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) lS (llà 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