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

Bài giảng cấu trúc dữ liệu thuật toán chương 2 nguyễn đức nghĩa

96 215 1

Đ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 96
Dung lượng 33,77 MB

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

Nội dung

Recursive Step: Gi ng nh trong cây nh phân m r ng... Để đơn giản ta giả thiết rằng chỉ số như vậy là tồn tại... Do đó, nếu gọi hnlà số lần di chuyển đĩa ít nhất, ta có công thức đệ qui

Trang 2

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 3

Trang 3

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 5

Trang 4

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 7

Trang 5

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 9

Trang 6

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 11

Trang 7

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 13

Trang 8

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 15

Fractals

fractals là ví d v hình nh đ c

Trang 9

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 17

Hàm đ qui (Recursive Functions)

Các hàm đ qui đ c xác đ nh ph thu c vào bi n nguyên không

âm n theo s đ sau:

B c c s (Basic Step): Xác đ nh giá tr c a hàm t i n=0: f(0).

B c đ qui (Recursive Step): Cho giá tr c a f(k), k ≤ n, đ a ra

tính giá tr c a hàm đ qui ta thay th d n theo đ nh ngh a đ qui

đ thu đ c bi u th c v i đ i s càng ngày càng nh cho đ n t n

Hàm đ qui (Recursive Functions)

Trang 10

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 19

Hàm đ qui (Recursive Functions)

Trang 11

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 21

Nói thêm v Fibonacci

S Fibonacci trong các c u trúc t nhiên

The left and right going spirals are neighboring Fibonacci numbers!

Trang 12

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 23

T l vàng (Golden Section)

1 (1 5) 1.6180 2

Trang 13

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 25

nh ngh a đ qui c a xâu

Gi s  = b ng ch cái (alphabet).

T p  * các xâu (strings) trên b ng ch cái  đ c đ nh ngh a đ qui nh sau:

Basic step: xâu r ng là ph n t c a  *

Recursive step: n u w thu c  * và x thu c   wx thu c  *

Ví d : T p các xâu nh phân thu đ c khi ={0,1}:

Trang 14

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 27

Basic Step: M t nút là cây có g c.

Recursive Step: Gi s T1, ,Tn, là các cây v i g c là r1, rn,

N u ta t o m t g c m i r và n i g c này v i m i m t trong s các g c r1, rn,

b i m t c nh t ng ng, ta thu đ c m t cây có g c m i.

Cây là c u trúc d li u quan tr ng th ng đ c dùng đ t ch c tìm ki m và s p

x p d li u

Trang 15

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 29

Cây nh phân (Binary Trees)

Cây nh phân m r ng (Extended Binary Trees):

Basic Step: t p r ng là cây nh phân m r ng.

Recursive Step: N u T1 và T2 là các cây nh phân m r ng, thì cây T1.T2 sau đây c ng là cây nh phân m r ng: ch n m t nút g c m i và g n T1 v i g c

b i m t c nh nh là cây con trái và g n T2nh là cây con ph i.

Basic Step: M t nút là cây nh phân đ y đ

Recursive Step: Gi ng nh trong cây nh phân m r ng

K t qu là chúng ta không th g n cây r ng vào bên trái c ng nh

Trang 16

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 31

M t s đ nh ngh a

Ký hi u h(T) là đ cao c a cây nh phân đ y đ nh ngh a đ qui c a h(T):

Basic Step: Chi u cao c a cây T g m duy nh t m t nút g c là h(T)=0.

Recursive Step: N u T1và T2là các cây nh phân đ y đ , thì cây nh phân đ y

đ T = T1.T2có chi u cao h(T) = 1+max(h(T1), h(T2)).

Ký hi u n(T) là s đ nh trong cây Ta có th đ nh ngh a đ qui n(T) nh sau:

Basic Step: S đ nh trong cây T g m duy nh t m t nút g c là n(T) = 1;

Recursive Step: N u T1và T2là các cây nh phân đ y đ , thì s đ nh c a cây

T = T1.T2là n(T) = 1+n(T1)+n(T2).

nh ngh a đ qui và Qui n p

đ ng và là b sung cho nhau nh ngh a đ qui th ng giúp

đ c đ nh ngh a đ qui Ng c l i, các ch ng minh b ng qui

n p toán h c th ng là c s đ xây d ng các thu t toán đ qui đ gi i quy t nhi u bài toán.

Ch ng minh b ng qui n p toán h c th ng bao g m hai ph n:

Trang 17

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 33

Trang 18

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 35

C u trúc c a thu t toán đ qui

• Thu t toán đ qui th ng có c u trúc sau đây:

Thu t toán RecAlg(input)

end;

Thu t toán chia đ tr

(Divide and conquer)

thu t toán c b n, nó bao g m 3 thao tác

con

bài toán c n gi i

Gi i các bài toán con m t cách đ qui.

Trang 19

C u trỳc d li u và thu t toỏn - NGUY N C NGH A, B mụn KHMT, HBK Hà N i 37

Thu t toỏn chia đ tr

Chia bài toán thành a bài toán con kích thước n/b;

for (mỗi bài toán trong a bài toán con) do D-and-C(n/b);

Tổng hợp lời giải của a bài toán con để thu được lời giải của bài toán gốc;

end;

end;

Thu t toỏn chia đ tr

• Cỏc thụng s quan tr ng c a thu t toỏn:

– n 0 - kớch th c nh nh t c a bài toỏn con (cũn g i là neo đ qui) Bài toỏn con v i kớch th c n 0 s đ c gi i tr c ti p.

– a - s l ng bài toỏn con c n gi i

Trang 20

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 39

S p x p m i dãy con m t cách đ qui s d ng s p x p tr n

– Khi dãy ch còn m t ph n t thì tr l i ph n t này

T h p (Combine)

– Tr n (Merge) hai dãy con đ c s p x p đ thu đ c dãy đ c s p x p

g m t t c các ph n t c a c hai dãy con

Merge Sort

MERGE-SORT (A, p, r)

Trang 21

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 41

Ví d – n là lu th a c a 2

1 2 3 4 5 6 7 8

q = 4

6 2 3 1 7 4 2 5

1 2 3 4

7 4 2 5

5 6 7 8

6 2 3 1

1 2

2 5

3 4

7 4

5 6

3 1

7 8

6 2

1 2 3 4

7 5 4 2

5 6 7 8

6 3 2 1

Trang 22

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 43

Ví d – n không là lu th a c a 2

6 2 5 3 7 4 1 6 2 7 4

1 2 3 4 5 6 7 8 9 10 11

q = 6

4 1 6 2 7 4

1 2 3 4 5 6

6 2 5 3 7

7 8 9 10 11

q = 9

q = 3

2 7 4

1 2 3

4 1 6

4 5 6

5 3 7

7 8 9

6 2

10 11

7 4

1 2

2

3

1 6

4 5

4

6

3 7

1 2 3 4 5 6 7 8 9 10 11

7 6 4 4 2 1

1 2 3 4 5 6

7 6 5 3 2

7 8 9 10 11

7 4 2

1 2 3

6 4 1

4 5 6

7 5 3

7 8 9

6 2

10 11

Trang 23

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 45

Tr n (Merging)

u vào: M ng A và các ch s p, q, r sao cho p ≤ q < r

– Các m ng con A[p q] và A[q + 1 r] đã đ c s p x p

u ra: M ng con đ c s p x p A[p r]

1 2 3 4 5 6 7 8

6 3 2 1 7 5 4 2

Trang 24

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 47

Trang 25

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 49

Trang 26

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 51

Trang 27

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 53

Trang 28

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 55

Lính canh

Ví d : MERGE(A, 9, 12, 16)

Trang 29

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 57

Ví d (ti p)

Ví d (ti p)

Trang 30

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 59

1 2 3 4 5 6 7 8

6 3 2 1 7 5 4 2

Trang 31

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 61

Trang 32

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 63

Cài đ t các thu t toán đ qui

Trang 33

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 65

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 34

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 67

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 35

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 69

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 36

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 71

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 37

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 73

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 38

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 75

Ho t đ ng c a Fact(5) int Fact(int n){

Trang 39

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 77

Ho t đ ng c a Fact(5) int Fact(int n){

if (n==0) return 1;

else return n*Fact(n-1);

}

Return 5! = 120

Trang 40

C u trỳc d li u và thu t toỏn - NGUY N C NGH A, B mụn KHMT, HBK Hà N i 79

Bài toán: Cho mảng số x[1 n] được sắp xếp theo thứ tự không giảm

và số y Cần tìm chỉ số i (1  i  n) sao cho x[i] = y

Để đơn giản ta giả thiết rằng chỉ số như vậy là tồn tại Thuật toán để giải bài toán được xây dựng dựa trên lập luận sau: Số y cho trước

hoặc là bằng phần tử nằm ở vị trí ở giữa mảng x

hoặc là nằm ở nửa bên trái (L) của mảng x

hoặc là nằm ở nửa bên phải (R) của mảng x.

Trang 41

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 81

boolean binary_search_2(int* a, int n, int x) {

/* Test xem x có m t trong m ng a[] kích th c n */

int i;

if (n > 0) {

i = n / 2;

if (a[i] == x)

Trang 42

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 83

Tìm ki m nh phân

(xét c tr ng h p không tìm th y)

function Bsearch(x[1 n], start, finish) {

middle:= (start+finish)/2;

if (start=finish) { /* Base step */

if (x[middle]=y) return middle

else return notFound ;

sau: “Có 3 c c a, b, c Trên c c a có m t ch ng g m n cái đ a

đ ng kính gi m d n t d i lên trên C n ph i chuy n ch ng

đ a t c c a sang c c c tuân th qui t c: m i l n ch chuy n 1

đ a và ch đ c x p đ a có đ ng kính nh h n lên trên đ a có

đ ng kính l n h n Trong quá trình chuy n đ c phép dùng

c c b làm c c trung gian”

Trang 43

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 85

•Có 3 c c và m t ch ng đ a đ c s p x p theo th t đ ng kính

gi m d n t d i lên trên c c A.

3 2 1

Tower of Hanoi - Tr ng thái k t thúc

Trang 44

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 87

kính l n h n

3 2

M c ích: S d ng ít l n di chuy n a nh t

Trang 45

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 89

Trang 46

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 91

Trang 47

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 93

– Chuy n đ a 1 và 2 sang B (đ qui)

3

2 1

– Chuy n đ a 1 và 2 sang B (đ qui)

 Sau đó chuy n đ a 3 sang C

Trang 48

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 95

Trang 49

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 97

3 2 1

Bài toán tháp Hà n i

quy t bài toán đ t ra

Trang 50

C u trỳc d li u và thu t toỏn - NGUY N C NGH A, B mụn KHMT, HBK Hà N i 99

Bài toỏn thỏp Hà n i

Bước (i) và (iii) đòi hỏi giải bài toán tháp Hà nội với n-1 đĩa, vì vậy số lần

di chuyển đĩa ít nhất cần thực hiện trong hai bước này là 2hn-1 Do đó, nếu

gọi hnlà số lần di chuyển đĩa ít nhất, ta có công thức đệ qui sau:

Trang 51

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 101

move (1, start, finish, spare);

move (n-1, spare, finish, start);

} }

Tower of Hanoi Example, n=5

Trang 52

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 103

Phân tích thu t toán đ qui

• phân tích thu t toán đ qui ta th ng ti n hành nh sau: – G i T(n) là th i gian tính c a thu t toán

Xây d ng công th c đ qui cho T(n).

Gi i công th c đ qui thu đ c đ đ a ra đánh giá cho T(n)

Nói chung ta ch c n m t đánh giá sát cho t c đ t ng c a T(n)

nên vi c gi i công th c đ qui đ i v i T(n) là đ a ra đánh giá

Trang 53

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 105

Trang 54

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 107

Phân tích th i gian c a thu t toán chia đ tr

• G i T(n) – th i gian gi i bài toán kích th c n

• Th i gian c a chia đ tr đ c đánh giá d a trên đánh giá th i gian th c hi n 3 thao tác c a thu t toán:

– Chia bài toán ra thành a bài toán con, m i bài toán kích th c n/b: đòi h i th i gian: D(n)

Tr (gi i) các bài toán con: aT(n/b)

Chia bài toán thành a bài toán con kích th c n/b;

for (m i bài toán trong b bài toán con) do D-and-C(n/b);

T ng h p l i gi i c a a bài toán con đ thu đ c l i gi i c a bài toán g c;

Trang 55

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 109

Gi i công th c đ qui: nh lý th rút g n

c a dãy s tho mãn công th c đ qui d ng

Trang 56

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 111

Trang 57

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 113

Phân tích Bsearch

G i T(n) là th i gian tính c a vi c th c hi n Bsearch(x[1 n],1,n), ta có

T(1) = c T(n) = T(n/2) + d trong đó c và d là các h ng s

else /* y>x[m] */

return Bsearch(x,m+1,f) }

}

Phân tích thu t toán tính C(n,k)

• Xét thu t toán đ qui đ tính h s nh th c C(n,k):

int C(int n, int k){

if ((k==0)||(k==n)) return 1;

else return C(n-1,k-1)+C(n-1,k);

}

Trang 58

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 115

• S d ng k thu t này, trong nhi u tr ng h p, ta gi

Trang 59

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 117

Bài toán con trùng l p

• Nh n th y là trong các thu t toán đ qui là m i khi

c n đ n l i gi i c a m t bài toán con ta l i ph i tr nó

m t cách đ qui Do đó, có nh ng bài toán con b gi i

Bài toán con trùng l p trong vi c tính C(5,3)

C(5,3)

C(3,3) C(3,2)

C(3,2) C(3,1)

C(4,3) C(4,2)

Trang 60

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 119

Bài toán con trùng l p khi tính FibRec(4)

Trang 61

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 121

qui có nh

rút ng n th i gian tính c a thu t toán, b i vì, m i khi c n đ n

đ c gi i tr c đó.

đ c ghi nh n vào D[n,k] Nh v y, n u D[n,k]>0 thì đi u đó

Trang 62

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 123

2.6 Ch ng minh tính đúng đ n c a thu t toán đ qui

Ch ng minh tính đúng đ n c a thu t toán đ qui

• ch ng minh tính đúng đ n c a thu t toán đ qui thông th ng ta

s d ng qui n p toán h c.

• Ng c l i ch ng minh b ng qui n p c ng th ng là c s đ xây

d ng nhi u thu t toán đ qui

• Ta xét m t s ví d minh ho

Trang 63

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 125

Ví d 1

Ví d 1 Ch ng minh hàm Fact(n) cho ta giá tr c a n!

C s qui n p Ta có Fact(0) = 1 = 0!

Chuy n qui n p Gi s Fact(n-1) cho giá tr c a (n-1)!, ta

ch ng minh Fact(n) cho giá tr c a n! Th c v y, l nh Fact(n) s tr l i giá tr

n*Fact(n-1) = (theo gi thi t qui n p) = n*(n-1)! = n!

Xét hàm trên Pascal sau đây

function Count(x: integer): integer;

begin

if x=0 then

Trang 64

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 127

else return (x % 2 + Count(x /2));

ph i s d ng bao nhiêu màu đ tô các ph n b chia b i các

đ ng th ng này sao cho không có hai ph n có chung c nh

• P(n): Luôn có th tô các ph n đ c chia b i n đ ng th ng v

v trí t ng quát b i 2 màu xanh và đ sao cho không có hai

ph n có chung c nh nào b tô b i cùng m t màu.

Trang 65

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 129

Ví d 3

C s qui n p Khi n = 1, m t ph ng đ c chia làm hai ph n,

m t ph n s tô màu xanh, ph n còn l i tô màu đ

minh kh ng đ nh đúng v i n.

n p có th tô màu các ph n sinh ra b i hai màu tho mãn đi u

Trang 66

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 131

Trang 67

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 133

Trang 68

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 135

• P(n): Luôn có th x p n đ i tr ng ra thành m t hàng ngang

sao cho ngo i tr hai ng i đ ng hai mép, m i ng i trong hàng luôn đ ng c nh m t đ i tr ng c a đ i th ng đ i mình

Trang 69

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 137

Ví d 5

gi thi t qui n p, luôn có th x p h ra thành hàng ngang tho

Trang 70

C u trúc d li u và thu t toán - NGUY N C NGH A, B môn KHMT, HBK Hà N i 139

Trang 71

THU T TOÁN QUAY LUI

Ngày đăng: 04/12/2015, 17:45

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