Tải bản đầy đủ (.pdf) (96 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.73 MB, 96 trang )

Ch

ng 2

Thu t toán đ qui

N i dung
2.1. Khái ni m đ qui
2.2. Thu t toán đ qui
2.3. M t s ví d minh ho
2.4. Phân tích thu t toán đ qui
2.5.

qui có nh

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

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

2


2.1. Khái ni m đ qui
• 2.1.1 Khái ni m đ qui
• 2.1.2 Thu t toán đ qui

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

Khái ni m đ qui
• Trong th c t ta th ng g p nh ng đ i t ng bao g m chính
nó ho c đ c đ nh ngh a d i d ng c a chính nó. Ta nói các
đ i t ng đó đ c xác đ nh m t cách đ qui.
• Ví d :


i m quân s

– Fractal
– Các hàm đ

c đ nh ngh a đ qui

– T ph pđ

c đ nh ngh a đ qui

nh ngh a đ qui c a cây


– ...
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

4


qui: i m quân

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

qui: i m quân

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

6


qui: i m quân


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

qui: i m quân

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

8


qui: i m quân

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


qui: i m quân

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

10


qui: i m quân

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

qui: i m quân

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

12



qui: i m quân

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

qui: i m quân

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

14


qui: i m quân

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
xây d ng m t cách đ qui (đ i t ng
l p l i m t cách đ qui).

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

16


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
qui t c tính giá tr c a f(n+1).
Ví d 1:
f(0) = 3,


n=0

f(n+1) = 2f(n) + 3,

n>0

Khi đó ta có: f(1) = 2 × 3 + 3 = 9, f(2) = 2 × 9 + 3 = 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

17

Hàm đ qui (Recursive Functions)
Ví d 2:

nh ngh a đ qui c a n! :
f(0) = 1
f(n+1) = f(n) × (n+1)

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
đi u ki n đ u.
Ch ng h n:
đ qui

5! = 5 · 4! = 5 · 4 · 3! = 5 · 4 · 3 · 2! = 5 · 4 · 3 · 2 · 1! =
5 · 4 · 3 · 2 · 1 · 0! = 5 · 4 · 3 · 2 · 1 · 1 = 120

đi u ki n đ u
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

18


Hàm đ qui (Recursive Functions)
Ví d 3:

n

nh ngh a đ qui c a t ng sn   ak
k 1

s1 = a1
sn = sn-1 + an
Ví d 4: Dãy s Fibonacci
f(0) = 0, f(1) = 1,
f(n) = f(n-1) + f(n-2) v i n > 1

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

Fibonacci Numbers
S phát tri n c a bày th
S l ng
c p th

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

20


Nói thêm v Fibonacci

C u trúc d

li u và thu t toán - NGUY N

21

C NGH A, B môn KHMT, HBK Hà N i

S Fibonacci trong các c u trúc t

nhiên


The left and right going
spirals are neighboring
Fibonacci numbers!

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

22


T l vàng (Golden Section)
x

y

x y x 1
  (1  5)  1.6180  Phi
x
y 2

C u trúc d

li u và thu t toán - NGUY N

23

C NGH A, B môn KHMT, HBK Hà N i


T p h p đ c xác đ nh đ qui
(Recursively defined sets)
T p h p có th xác đ nh m t cách đ qui theo s đ t

ng t nh

hàm đ qui:
Basis Step: đ nh ngh a t p c s (ch ng h n t p r ng).
Recursive Step : Xác đ nh qui t c đ s n sinh t p m i t các t p đã
có.
Ví d :
Basis Step: 3 là ph n t c a S.
Recursive Step: n u x thu c S và y thu c S thì x+y thu c S.
3
3+3=6
3+6 = 9 & 6+6=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

24


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  đ

qui nh sau:

c đ nh ngh a đ

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 đ
1) xâu r ng
2) 0 & 1
3) 00 & 01 & 10 & 11
4) ...
C u trúc d

li u và thu t toán - NGUY N

c khi ={0,1}:

C NGH A, B môn KHMT, HBK Hà N i

25

dài c a xâu


nh ngh a đ qui đ dài length(w) c a xâu w  *
– (B) length(l)0
– (R) N u w* và x thì length(wx)= length(w)+1.




nh ngh a đ qui c a t p các xâu nh phân đ dài ch n.
– (B) lS (llà xâu r ng)
– (R) N u b S thì 0b0, 0b1, 1b0, 1b1 S .

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

26


Công th c toán h c
• M t công th c h p l c a các bi n, các s và các phép toán t t p
{+, -, *, /, ^} có th đ nh ngh a nh sau:
• C s : x là công th c h p l n u x là bi n ho c là s .
• Qui n p: N u f, g là các công th c h p l thì
(f + g), (f – g), (f * g), (f / g), (f ^ g)
là công th c h p l .
• Theo đ nh ngh a ta có th xây d ng các công th c h p l nh :
(x – y);
((z / 3) – y);
((z / 3) – (6 + 5));
((z / (2 * 4)) – (6 + 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


27

Cây có g c
Cây là c u trúc d li u quan tr ng th
x p d li u

ng đ

c dùng đ t ch c tìm ki m và s p

Cây có g c (Rooted Trees): Cây có g c bao g m các nút, có m t nút đ c bi t
đ c g i là g c (root) và các c nh n i các nút.
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.

Basis step:

Step 2:

Step 1:
...
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


28


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 T2 nh là cây con ph i.

B

c 1:

B

c 2:

C u trúc d

li u và thu t toán - NGUY N

B

c 3: ví d

C NGH A, B môn KHMT, HBK Hà N i

29


Cây nh phân đ y đ
Cây nh phân đ y đ (Full binary Trees): Ch khác đ nh ngh a
cây nh phân m r ng b c c s :
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
bên ph i.
Kh i t o:
B

c 1:

Không ph i! Cây nh phân đ y đ có 0 ho c 2 nút con.
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

30


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 T1 và T2 là các cây nh phân đ y đ , thì cây nh phân đ y
đ T = T1.T2 có 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 T1 và T2 là các cây nh phân đ y đ , thì s đ nh c a cây
T = T1.T2 là n(T) = 1+n(T1)+n(T2).

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

nh ngh a đ qui và Qui n p


nh ngh a đ qui và Qui n p toán h c có nh ng nét t ng
đ ng và là b sung cho nhau. nh ngh a đ qui th ng giúp
cho ch ng minh b ng qui n p các tính ch t c a các đ i t ng
đ 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:
1. B c c s qui n p – gi ng nh b c c s trong đ nh
ngh a đ qui
2. B c chuy n qui n p – gi ng nh b c đ qui
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

32


N i dung
2.1. Khái ni m đ qui
2.2. Thu t toán đ qui
2.3. M t s ví d minh ho
2.4. Phân tích thu t toán đ qui
2.5.

qui có nh

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

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

nh ngh a
• Thu t toán đ qui là thu t toán t g i đ n chính mình v i đ u
vào kích th c nh h n.
• Vi c phát tri n thu t toán đ qui là thu n ti n khi c n x lý v i
các đ i t ng đ c đ nh ngh a đ qui (ch ng h n: t p h p, hàm,

cây, ...trong các ví d nêu trong m c tr c).
• Các thu t toán đ c phát tri n d a trên ph ng pháp chia đ tr
thông th ng đ c mô t d i d ng các thu t toán đ qui (xem ví
d m đ u)
• Các ngôn ng l p trình c p cao th ng cho phép xây d ng các
hàm (th t c) đ qui, ngh a là trong thân c a hàm (th t c) có
ch a nh ng l nh g i đ n chính nó. Vì th , khi cài đ t các thu t
toán đ qui ng i ta th ng xây d ng các hàm (th t c) đ qui.
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

34


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)
begin
if (kích th c c a input là nh nh t) then
Th c hi n B c c s /* gi i bài toán kích th c đ u vào nh nh t */
else
RecAlg(input v i kích th c nh h n); /* b c đ qui */
/* có th có thêm nh ng l nh g i đ qui */
T h p l i gi i c a các bài toán con đ thu đ c l i_gi i;
return (l i_gi i)

endif
end;

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

Thu t toán chia đ tr
(Divide and conquer)

• Thu t toán chia đ tr là m t trong nh ng ph ng pháp thi t k
thu t toán c b n, nó bao g m 3 thao tác
• Chia (Divide) bài toán c n gi i ra thành m t s bài toán
con
– Bài toán con có kích th c nh h n và có cùng d ng v i
bài toán c n gi i
• Tr (Conquer) các bài toán con
– Gi i các bài toán con m t cách đ qui.
– Bài toán con có kích th c đ nh s đ c gi i tr c ti p.
• T h p (Combine) l i gi i c a các bài toán con
– Thu đ c l i gi i c a bài toán xu t phát.
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


36


Thu t toỏn chia tr
S c a ph
õy:

ng phỏp cú th trỡnh by trong th t c qui sau

procedure D-and-C (n);
begin
if n n0 then
Giải bài toán một cách trực tiếp
else
begin
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;

C u trỳc d

li u v thu t toỏn - NGUY N

37

C NGH A, B mụn KHMT, HBK H N i


Thu t toỏn chia tr
Cỏc thụng s quan tr ng c a thu t toỏn:
n0 - kớch th c nh nh t c a bi toỏn con (cũn g i l neo
qui). Bi toỏn con v i kớch th c n0 s c gi i tr c ti p.
a-s l

ng bi toỏn con c n gi i

b - liờn quan n kớch th

C u trỳc d

li u v thu t toỏn - NGUY N

c c a bi toỏn con

C NGH A, B mụn KHMT, HBK H N i

c chia

38


Ví d : S p x p tr n (Merge Sort)
• Bài toán: C n s p x p m ng A[1 .. n]:
• Chia (Divide)
– Chia dãy g m n ph n t c n s p x p ra thành 2 dãy, m i dãy có n/2
ph n t

• Tr (Conquer)

– 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 đ
g m t t c các ph n t c a c hai dãy con

C u trúc d

li u và thu t toán - NGUY N

c dãy đ

cs px p

39

C NGH A, B môn KHMT, HBK Hà N i

Merge Sort
p
MERGE-SORT(A, p, r)

1

r

q
2


3

4

5

6

8

5 2 4 7 1 3 2 6
Ki m tra đi u ki n neo

if p < r
(p + r)/2

Chia (Divide)

MERGE-SORT(A, p, q)

Tr (Conquer)

MERGE-SORT(A, q + 1, r)

Tr (Conquer)

MERGE(A, p, q, r)

T h p (Combine)


then q

7

endif

• L nh g i th c hi n thu t toán: MERGE-SORT(A, 1, n)
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

40


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

Ví d

2

3

4

5

6


8

5 2 4 7 1 3 2 6
1

2

3

4

5

5 2 4 7
1

2

3

5 2

C u trúc d

7

6

q=4


7

8

1 3 2 6
4

5

6

7

1 3

4 7

8

2 6

1

2

3

4


5

6

7

8

5

2

4

7

1

3

2

6

li u và thu t toán - NGUY N

41

C NGH A, B môn KHMT, HBK Hà N i


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

2

3

4

5

6

7

8

1 2 2 3 4 5 6 7
1

2

3

4

5

2 4 5 7
1


2

3

2 5

C u trúc d

6

7

8

1 2 3 6
4

5

6

7

1 3

4 7

8


2 6

1

2

3

4

5

6

7

8

5

2

4

7

1

3


2

6

li u và thu t toán - NGUY N

C NGH A, B môn KHMT, HBK Hà N i

42


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

2

3

4

5

6

7

8

9


10

11

4 7 2 6 1 4 7 3 5 2 6
1

2

3

4

1

2

3

4

4 7 2
2

7

5

4


6

2

5

7

8

7

10

9

4

8

7 3

1

2

4

5


7

8

4

7

6

1

7

3

li u và thu t toán - NGUY N

9

11

10

7 3 5

6

6 1


8

7 3 5 2 6

6 1 4

3

4 7

C u trúc d

6

4 7 2 6 1 4

q=3

1

5

q=6

q=9

11

2 6


9

10

11

5

2

6

43

C NGH A, B môn KHMT, HBK Hà N i

Example – n không là lu th a c a 2
1

2

3

4

5

6

7


8

9

10

11

1 2 2 3 4 4 5 6 6 7 7
1

2

3

4

5

6

7

1 2 4 4 6 7
1

2

3


4

2 4 7
1

2

C u trúc d

4

2

5

6

7

8

7

4

8

3 7


1

2

4

5

7

8

4

7

6

1

7

3

li u và thu t toán - NGUY N

10

9


11

10

3 5 7

6

1 6

9

2 3 5 6 7

1 4 6

3

4 7

5

8

11

2 6

9


10

11

5

2

6

C NGH A, B môn KHMT, HBK Hà N i

44


Tr n (Merging)
p
1

r

q
2

3

4

5


6

7

8

2 4 5 7 1 2 3 6
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] đã đ

u ra: M ng con đ



C u trúc d

li u và thu t toán - NGUY N

cs px p

c s p x p A[p . . r]

C NGH A, B môn KHMT, HBK Hà N i

45

Tr n

• Ýt

ng c a thu t toán tr n:

– Có hai dãy con đã đ

cs px p

• Ch n ph n t nh h n

đ u hai dãy

• Lo i nó kh i dãy con t

ng ng và đ a vào dãy k t qu

– L p l i đi u đó cho đ n khi m t trong hai dãy tr thành dãy
r ng
– Các ph n t còn l i c a dãy con kia s đ

c đ a n t vào

đuôi c a dãy k t qu

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


46


10, 13, 51, 64

5, 21, 32, 34

K t qu :
tr n hai dãy đ c s p,
ta s gi hai con tr , m i con cho m t dãy
So sánh hai ph n t đ c tr ,
đ a ph n t nh h n vào dãy k t qu
và di chuy n con tr t ng ng
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

10, 13, 51, 64

K t qu :

47

5, 21, 32, 34

5,
Ti p theo l i so sánh hai ph n t
đ c ch ra b i con tr ;

đ a ph n t nh h n vào dãy k t qu
và t ng con tr t ng ng

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

48


10, 13, 51, 64

K t qu :

5, 21, 32, 34

5, 10,
L p l i quá trình …

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

10, 13, 51, 64

K t qu :


49

5, 21, 32, 34

5, 10, 13
L p l i quá trình …

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

50


×