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 2C 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 3C 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 4C 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 5C 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 6C 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 7C 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 8C 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 9C 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 10C 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 11C 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 12C 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 13C 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 14C 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 15C 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 16C 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 17C 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 18C 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 19C 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 20C 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 21C 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 22C 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 23C 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 24C 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 25C 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 26C 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 27C 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 28C 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 29C 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 30C 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 31C 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 32C 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 33C 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 34C 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 35C 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 36C 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 37C 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 38C 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 39C 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 40C 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 41C 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 42C 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 43C 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 44C 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 45C 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 46C 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 47C 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 48C 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 49C 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 50C 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 51C 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 52C 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 53C 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 54C 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 55C 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 56C 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 57C 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 58C 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 59C 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 60C 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 61C 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 62C 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 63C 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 64C 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 65C 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 66C 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 67C 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 68C 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 69C 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 70C 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 71THU T TOÁN QUAY LUI