1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 1: Giới thiệu chung

40 55 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 1,2 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 1: Giới thiệu chung trình bày đôi nét về khái niệm về cấu trúc dữ liệu và giải thuật, giải thuật, dữ liệu và các cấu trúc dữ liệu, biểu diễn giải thuật, độ phức tạp của giải thuật.

Trang 1

Lecturer: Dr Ngo Huu Phuc

Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com

Trang 2

Tài li ệu tham khảo

Mastering Algorithms with C, Kyle Loudon, 1999.

Introduction to Algorithms, Thomas H Cormen, Charles

E Leiserson, Ronald L Rivest and Clifford Stein, The MIT Press © 2001

Data Structures, Algorithms, and Object-Oriented

Programming NXB McGraw Hill; Tác giả Gregory

Heilleman -1996

C ấu trúc dữ liệu và giải thuật, Đỗ Xuân Lôi.

Trang 3

Bài 1 Gi ới thiệu

N ội dung:

1.0 Đôi nét về khái niệm.

1.1 Gi ải thuật.

1.2 D ữ liệu và các cấu trúc dữ liệu.

1.3 Bi ểu diễn giải thuật.

1.4 Độ phức tạp của giải thuật.

Elliz Horowitz - Fundamentals of data structures, Chapter 1: Introduction

Trang 4

1.0 Đôi nét về khái niệm

 Để giải một bài toán, bắt đầu từ câu hỏi “phải làm gì?”, sau

đó trả lời câu hỏi “làm như thế nào?” → đó là cách tiếp cận đến giải thuật và cấu trúc dữ liệu

 Các bài toán trong thực tế không dễ giải bằng cách hiểu thông thường và để giảm độ phức tạp, trong nhiều trường

hợp có thể mô hình hóa bài toán

 Từ việc mô hình hóa, trong thực tế thấy rằng có nhiều bài toán có cùng một mô hình hóa

Trang 5

1.0.1 M ột số ví dụ (1)

Ví d ụ 1: Tô màu bản đồ thế giới

Yêu c ầu:

 Ta cần phải tô màu cho các nước trên bản đồ thế giới

 Trong đó mỗi nước đều được tô một màu

 Hai nước láng giềng (cùng biên giới) thì phải được tô bằng hai màu khác nhau

 Hãy tìm một phương án tô màu sao cho số màu sử dụng là

ít nhất

Trang 6

1.0.2 M ột số ví dụ (2)

Hướng giải quyết bằng mô hình hóa:

 Ta có th ể xem mỗi nước trên bản đồ thế giới là một đỉnh của đồ thị.

 Hai nước láng giềng của nhau thì hai đỉnh ứng với nó được nối với nhau b ằng một cạnh

Bài toán lúc này tr ở thành bài toán tô màu cho đồ thị như sau:

 M ỗi đỉnh đều phải được tô màu.

 Hai đỉnh có cạnh nối thì phải tô bằng hai màu khác nhau.

 C ần tìm một phương án tô màu sao cho số màu được sử dụng là ít

nh ất.

Trang 7

1.0.3 M ột số ví dụ (3)

Ví d ụ 2: Đèn giao thông

 Cho m ột ngã năm như hình 1.

 C và E là các đường một chiều theo chiều mũi tên.

 Các đường khác là hai chiều

 Hãy thi ết kế một bảng đèn hiệu điều khiển giao thông tại ngã năm này

m ột cách hợp lý: sao cho:

 Phân chia các l ối đi tại ngã năm này thành các nhóm

 M ỗi nhóm gồm các lối đi có thể cùng đi đồng thời nhưng không xảy ra tai nạn giao thông (các hướng đi không cắt nhau),

 Và s ố lượng nhóm là ít nhất có thể được

Trang 8

1.0.4 Hướng giải quyết (VD2)

 Ta có thể xem đầu vào (input) của bài toán là tất cả các lối

đi tại ngã năm này

 Đầu ra (output) của bài toán là các nhóm lối đi có thể điđồng thời mà không xảy ra tai nạn giao thông

 Mỗi nhóm sẽ tương ứng với một pha điều khiển của đèn

hiệu, vì vậy ta phải tìm kiếm lời giải với số nhóm là ít nhất

để giao thông không bị tắc nghẽn vì phải chờ đợi quá lâu

Trang 9

1.0.4 Hướng giải quyết (VD2) (t)

 Trước hết ta nhận thấy rằng tại ngã năm này có 13 lối đi: AB, AC, AD,

BA, BC, BD, DA, DB, DC, EA, EB, EC, ED.

 Th ể hiện các lối có thể đi đồng thời.

 Ví d ụ cặp AB và EC có thể đi đồng thời, nhưng AD và EB thì không, vì các hướng giao thông cắt nhau.

 S ử dụng sơ đồ trực quan:

 Tên c ủa 13 lối đi được viết lên mặt phẳng,

 Hai l ối đi nào nếu đi đồng thời sẽ xảy ra đụng nhau (tức là hai hướng đi cắt qua nhau) ta n ối lại bằng một đoạn thẳng.

 Ta s ẽ có một sơ đồ như hình 2 Như vậy, trên sơ đồ này, hai lối đi có cạnh nối

l ại với nhau là hai lối đi không thể cho đi đồng thời.

Trang 10

Hình 2

Trang 11

1.0.4 Hướng giải quyết (VD2) (t)

 V ới cách biểu diễn như vậy ta đã có một đồ thị (Graph), tức là ta đã mô hình hoá bài toán giao thông ở trên theo mô hình toán là đồ thị.

 M ỗi lối đi trở thành một đỉnh của đồ thị, hai lối đi không thể cùng đi đồng

th ời được nối nhau bằng một đoạn ta gọi là cạnh của đồ thị

 Bây gi ờ ta phải xác định các nhóm, với số nhóm ít nhất, mỗi nhóm gồm các l ối đi có thể đi đồng thời, nó ứng với một pha của đèn hiệu điều

khi ển giao thông

 Gi ả sử rằng, ta dùng màu để tô lên các đỉnh của đồ thị này sao cho:

 Các l ối đi cho phép cùng đi đồng thời sẽ có cùng một màu: Dễ dàng nhận

th ấy rằng hai đỉnh có cạnh nối nhau sẽ không được tô cùng màu

 S ố nhóm là ít nhất: ta phải tính toán sao cho số màu được dùng là ít nhất

Trang 12

1.0.4 Hướng giải quyết (VD2) (t)

 "Tô màu cho đồ thị ở hình 2 sao cho:

 Hai đỉnh có cạnh nối với nhau (hai còn gọi là hai đỉnh kề nhau) không cùng màu

 S ố màu được dùng là ít nhất."

Nh ận xét:

 Hai bài toán thực tế “tô màu bản đồ thế giới” và “đèn giaothông” xem ra rất khác biệt nhau nhưng sau khi mô hìnhhóa, chúng thực chất chỉ là một, đó là bài toán “tô màu đồ

thị”

Trang 13

1.0.5 Thi ết kế giải thuật để giải bài toán “ tô màu đồ thị”

 Bài toán “tô màu đồ thị không có giải thuật tối ưu

 Để có kết quả tối ưu, cần sử dụng phương pháp vét cạn Phương pháp này tốt khi số phép thử là nhỏ

 Thông thường, để đơn giản hóa, có thể:

 Thêm thông tin vào bài toán để đồ thị có một số tính chất đặc biệt và dùng các tính ch ất đặc biệt này ta có thể dễ dàng tìm lời giải, hoặc

 Thay đổi yêu cầu bài toán một ít cho dễ giải quyết, nhưng lời giải tìm được chưa chắc là lời giải tối ưu

 Cách này được xem là "Cố gắng tô màu cho đồ thị bằng ít màu nhất một cách nhanh chóng"

 Một giải pháp như thế gọi là một HEURISTIC

Trang 14

1.0.6 Gi ải thuật HEURISTIC

 HEURISTIC cho bài toán tô màu đồ thị, thường gọi là giải thuật "háu ăn" (GREEDY) là:

 Ch ọn một đỉnh chưa tô màu và tô nó bằng một màu mới C nào đó

 Duy ệt danh sách các đỉnh chưa tô màu Đối với một đỉnh chưa tô

màu, xác định xem nó có kề với một đỉnh nào được tô bằng màu C đó không N ếu không có, tô nó bằng màu C đó

 Ý tưởng của Heuristic này là hết sức đơn giản: dùng một

màu để tô cho nhiều đỉnh nhất có thể được (các đỉnh được xét theo một thứ tự nào đó), khi không thể tô được nữa với màu đang dùng thì dùng một màu khác Như vậy ta có thể

"hi vọng" là số màu cần dùng sẽ ít nhất

Trang 16

Gi ải bài toán giao thông bằng HEURISTIC

Trở lại bài toán giao thông ở trên và áp dụng HEURISTIC

Greedy cho đồ thị trong hình 2 (theo thứ tự các đỉnh đã liệt

kê ở trên), ta có kết quả:

 Tô màu xanh cho các đỉnh: AB,AC,AD,BA,DC,ED

 Tô màu đỏ cho các đỉnh: BC,BD,EA

 Tô màu tím cho các đỉnh: DA,DB

 Tô màu vàng cho các đỉnh: EB,EC

Chú ý: 4 màu là 1 lời giải, nhưng chưa kết luận được có tối

ưu hay không

Trang 17

Ch ứng minh về số mầu cần thiết để tô là 4?

Đồ thị trong hình I.2 có 4 đỉnh: AC,DA,BD,EB mà mỗi cặp đỉnh

bất kỳ đều được nối nhau vậy đồ thị hình I.2 không thể tô

với ít hơn 4 màu Điều này khẳng định rằng lời giải vừa tìm được ở trên trùng với lời giải tối ưu

Trang 18

1.1 Các gi ải thuật

1.1.1 Th ế nào là giải thuật.

1.1.2 Ví d ụ về giải thuật: Sắp xếp một dãy 1.1.3 Định nghĩa giải thuật.

Trang 19

 Giải thuật là các ý tưởng đằng sau chương trình trên máy tính.

 Giải thuật không thay đổi khi viết trên các ngôn ngữ khác nhau

 Giải thuật phải giải quyết được các vấn đề tổng quát cũng như các vấn đề riêng của một bài toán

 Giải thuật cần có đầu vào và đầu ra rõ ràng

Trang 20

Input : M ột dãy số gồm N phần tử

a[1], a[2], … , a[n]

Output : S ắp xếp lại dãy số trên

dãy s ố trên có dạng:

a[1] <= a[2] <= … <= a[n]

• C ần tìm giải thuật chính xác hi ệu quả

Trang 21

1.1.3 Nghiên c ứu giải thuật cần gì?

1 Máy tính để thực hiện giải thuật.

2 Ngôn ng ữ lập trình để diễn tả giải thuật.

3 Cơ sở của giải thuật.

4 Phân tích gi ải thuật.

Trang 22

1.1.4 Định nghĩa giải thuật.

Knuth (1973) định nghĩa giải thuật là một chuỗi hữu hạn các thao tác để

gi ải một bài toán nào đó Các tính chất quan trọng của giải thuật là :

1. Input: Không có hoặc có một số, được đưa từ ngoài vào

2. Output: Có ít nhất một đầu ra

3. Xác định (Definiteness) : mỗi bước của giải thuật phải được xác

định rõ ràng và phải được thực hiện chính xác, nhất quán

4 Hữu hạn (Finiteness) : giải thuật phải luôn luôn kết thúc sau một số

h ữu hạn bước

5 Hiệu quả (Effectiveness) : các thao tác trong giải thuật phải được

th ực hiện trong một lượng thời gian hữu hạn.

Trang 24

1.2.1 Là ngành khoa h ọc máy tính –

nghiên c ứu về dữ liệu

1. Máy tính lưu trữ dữ liệu

2. Ngôn ng ữ được sử dụng để thao tác với dữ liệu.

3. D ữ liệu được hiệu chỉnh, diễn tả hợp lý từ dữ liệu

g ốc.

4. C ấu trúc để biểu diễn dữ liệu.

Trang 25

1.2.2 Các ki ểu dữ liệu.

 Ki ểu dữ liệu là khái niệm về loại của dữ liệu cho

bi ến trong chương trình.

 Trong ngôn ng ữ C ki ểu dữ liệu có sẵn như: int ,

float , char , double…

 Trong ngôn ng ữ FORTRAN kiểu dữ liệu có sẵn

như: INTEGER, REAL, LOGICAL, COMPLEX, DOUBLE PRECISION…

Trang 26

1.2.3 Mi ền xác định của dữ liệu

• Ví d ụ: Với kiểu bool , D = {0, 1}

• Ví d ụ: Với kiểu int , D = {0, 1, 2, }

• V ới các ký tự hoặc xâu ký tự, D = {' ','A','B',

,'Z',”AA” }

• Như vậy, D có thể là hữu hạn hoặc vô hạn, cần xác định kiểu dữ liệu phù hợp với giải thuật.

Trang 28

1.2.5 S ự thực thi dữ liệu.

 Sự thực thi của cấu trúc dữ liệu là ánh xạ cấu trúc dữ liệu

d vào cấu trúc dữ liệu đã có trước đó

 Ví dụ: số nguyên được biểu diễn bởi chuỗi bít

 Ví dụ: kiểu boolean được định nghĩa bởi số 0 hoặc 1

 Ví dụ: mảng được định nghĩa các ô nhớ liên tục trong bộ

nhớ…

Trang 29

1.3 Bi ểu diễn thuật toán

Có nhiều cách khác nhau để biểu diễn một giải thuật, thông thường, có 3 cách:

1.3.1 Biểu diễn bằng cách liệt kê các bước;

1.3.2 Biểu diễn bằng sơ đồ khối;

1.3.3 Biểu diễn bằng giả mã lệnh

Trang 30

1.3.1 Bi ểu diễn giải thuật bằng liệt kê các bước

Liệt kê ra các bước cần phải thực hiện bằng ngôn ngữ tự nhiên

VD 1: Thuật toán tìm số lớn nhất trong 3 số a,b,c

 Giả thiết số lớn nhất là a: Max=a

 Nếu Max<b thì Max=b

 Nếu Max<c thì Max=c

 Ghi giá trị của Max

Trang 31

1.3.2 Bi ểu diễn giải thuật bằng sơ đồ khối

Sơ đồ khối là một ngôn ngữ dùng để biểu diễn thuật toán

 Hai loại nút giới hạn Bắt đầu và Kết thúc thường có hình

dạng elip:

Trang 32

1.3.2 Bi ểu diễn giải thuật bằng sơ đồ khối (tiếp)

 Kh ối nhập/xuất có dạng hình chữ nhật bị cắt vát

 Nút ch ỉ các thao tác, công việc có dạng hình chữ nhật:

 Nút ch ỉ các điều kiện có dạng hình thoi Trong các đường nối với nút điều kiện này có hai đường đi ra ứng với hai trường hợp điều kiện đúng

ho ặc điều kiện sai.

 Kh ối hình bình hành để in các giá trị.

 Các đường nối các nút với nhau

Trang 33

1.3.2 Ví d ụ về sơ đồ khối

Trang 34

1.3.3 Bi ểu diễn giải thuật bằng giả mã lệnh

Trong các trường hợp biểu diễn bằng sơ đồ khối quá phức tạp, hay quá dài, có th ể sử dụng giả mã lệnh để biểu diễn giải thuật.

M ột số cú pháp cơ bản trong giả mã lệnh:

tr ợ cho việc theo dõi được thuận tiện cũng có thể thêm số thứ tự

 If (điều kiện) Then (công việc);

 If (điều kiện) Then (công việc 1) Else (công việc 2);

Trang 35

1.3.3 Bi ểu diễn giải thuật bằng giả mã lệnh (tiếp)

 For (bi ến):= (giá trị đầu) to (giá trị cuối) do (công việc);

 For (bi ến):= (giá trị đầu) downto (giá trị cuối) do (công việc);

 While (điều kiện) do (công việc);

 VD: Thu ật toán tìm số lớn nhất trong 3 số a,b,c

 Max:=a;

 If Max<b then Max:=b;

 If Max<c then Max:=c;

 println(‘Max=’, max);

Trang 36

1.3.3 Ví d ụ về giả mã lệnh cho thuật toán HEURISTIC

void GREEDY ( GRAPH *G, SET *Newclr )

{

/*3*/ if (v không được nối với một đỉnh nào trong Newclr)

{

/*4*/ đánh dấu v đã được tô màu;

/*5*/ thêm v vào Newclr;

}

}

Trang 37

1.4 Độ phức tạp của thuật toán

Khi đề xuất một thuật toán ngoài việc quan tâm đến tính đúng đắn của thuật toán, người ta còn phải quan tâm đến một số

vấn đề:

phụ thuộc vào dữ liệu đầu vào như thế nào,…

Trước khi nghiên cứu độ phức tạp thuật toán, ta xem xét một

số khái niệm về cách xác định độ phức tạp cho thuật toán

Trang 38

1.4 Độ phức tạp của thuật toán (tiếp)

M ột số khái niệm:

Khái ni ệm về độ tăng của hàm: Một trong các khái niệm

thường được dùng để phân tích độ tăng của hàm là khái

niệm O (ô lớn) được định nghĩa như sau:

 Cho f(x) và g(x), ta nói f(x) là O(g(x)) n ếu tồn tại một hằng số C và k sao cho

 |f(x)|<=C|g(x)| v ới mọi x>k;

Độ tăng của tổ hợp các hàm:

 Xét f1(x) là O(g1(x) và f2(x) là O(g2(x)), CMR: (f1(x)+f2(x)) là

Trang 39

1.4 Độ phức tạp của thuật toán (tiếp)

Độ phức tạp của thuật toán

 Các thuật ngữ O(1)-độ phức tạp hằng số; O(n) độ phức tạp tuyến tính; O(nb) – độ phức tạp hàm mũ

 Độ phức tạp tính toán sẽ được tính theo số lần thực hiện các phép toán sơ cấp:cộng, trừ, nhân, chia, phép gán,

VD: Xét đoạn chương trình sau:

For (int i=1; i<n;i++)

{

…{có phép tính sơ cấp; ko có vòng lặp ở đây nữa}

}

=> s ố lần lặp sẽ là n=> O(n)

Trang 40

Tóm t ắt chương 1

Ngày đăng: 24/09/2020, 04:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w