Professional Documents
Culture Documents
-1-
MUC LUC
LI NOI AU .................................................................................. - 6 Chng 1 : GII THIEU THIET KE, ANH GIA THUAT TOAN . - 8 I. nh ngha trc quan ve Thuat toan........................................... - 8 1. nh ngha............................................................................. - 8 2. Cac ac trng c ban cua thuat toan ...................................... - 9 3. ac ta thuat toan .................................................................. - 9 II. Cac dang dien at thuat toan .................................................... - 9 1. Dang lu o ( s o khoi ) ................................................... - 10 2. Dang ngon ng t nhien ...................................................... - 10 3. Ngon ng lap trnh............................................................... - 10 4. Dang ma gia ........................................................................ - 10 III. Thiet ke thuat toan ................................................................ - 12 1. Modul hoa va thiet ke t tren xuong (Top-Down)............... - 13 2. Phng phap lam mn dan (hay tinh che tng bc )........... - 13 3. Mot so phng phap thiet ke ............................................... - 15 IV. Phan tch thuat toan............................................................... - 17 1. Cac bc trong qua trnh phan tch anh gia thi gian chay cua
thuat toan ................................................................................ - 17 2. Cac ky hieu tiem can .......................................................... - 18 3. Mot so lp cac thuat toan ................................................... - 19 4. Phan tch thuat toan e qui. ................................................. - 21 5. Cac phep toan tren cac ky hieu tiem can ............................ - 25 6. Phan tch trng hp trung bnh .......................................... - 26 V. Toi u thuat toan .................................................................... - 27 1. Ky thuat toi u cac vong lap ................................................ - 27 2. Toi u viec re nhanh ........................................................... - 30 Bai tap ..................................................................................... - 30 Chng 2 : PHNG PHAP CHIA E TR .................................. - 33 I. M au..................................................................................... - 33 1. Y tng................................................................................ - 33 2. Mo hnh ............................................................................... - 33 II. Thuat toan tm kiem nh phan................................................. - 33 1. Phat bieu bai toan................................................................ - 33 2. Y tng................................................................................ - 33 3. Mo ta thuat toan .................................................................. - 33 Tran Tuan Minh
Khoa Toan-Tin
-2-
4. o phc tap thi gian cua thuat toan ................................... - 34 5. Cai at ................................................................................. - 34 III. Bai toan MinMax .................................................................. - 35 1. Phat bieu bai toan................................................................ - 35 2. Y tng................................................................................ - 35 3. Thuat toan ........................................................................... - 35 4. o phc tap thuat toan ........................................................ - 36 5. Cai at ................................................................................. - 36 IV. Thuat toan QuickSort ........................................................... - 36 1. Y tng................................................................................ - 37 2. Mo ta thuat toan .................................................................. - 37 3. o phc tap cua thuat toan .................................................. - 38 V. Thuat toan nhan Strassen nhan 2 ma tran.............................. - 39 1. Bai toan ............................................................................... - 39 2. Mo ta ................................................................................... - 39 VI. Bai toan hoan oi 2 phan trong 1 day.................................. - 41 1. Phat bieu bai toan................................................................ - 41 2. Y tng................................................................................ - 41 3. Thuat toan ........................................................................... - 41 4. o phc tap thuat toan ........................................................ - 43 5. Cai at ................................................................................. - 43 VII. Tron hai ng trc tiep ..................................................... - 44 1. Bai toan ............................................................................... - 44 2. Y tng................................................................................ - 44 3. Thiet ke ............................................................................... - 45 Bai tap ..................................................................................... - 50 Chng 3 : PHNG PHAP QUAY LUI ....................................... - 53 I. M au..................................................................................... - 53 1. Y tng.- 542. Mo hnh ............................................................................... - 53 II. Bai toan Nga i tuan ............................................................. - 54 1. Phat bieu bai toan................................................................ - 54 2. Thiet ke thuat toan .............................................................. - 55 III. Bai toan 8 hau ....................................................................... - 57 1. Phat bieu bai toan................................................................ - 57 2. Thiet ke thuat toan .............................................................. - 57 IV. Bai toan liet ke cac day nh phan o dai n ............................ - 59 Tran Tuan Minh
Khoa Toan-Tin
-3-
1. Phat bieu bai toan................................................................ - 59 2. Thiet ke thuat toan .............................................................. - 59 V. Bai toan liet ke cac hoan v .................................................... - 60 1. Phat bieu bai toan................................................................ - 60 2. Thiet ke thuat toan .............................................................. - 60 VI. Bai toan liet ke cac to hp .................................................... - 61 1. Phat bieu bai toan................................................................ - 61 2. Thiet ke thuat toan .............................................................. - 61 VII. Bai toan tm kiem ng i tren o th ................................ - 61 1. Phat bieu bai toan................................................................ - 61 2. Thuat toan DFS ( Depth First Search) ................................. - 62 3. Thut toan BFS ( Breadth First Search) ............................. - 64 Bai tap ..................................................................................... - 66 Chng 4: PHNG PHAP NHANH CAN .................................... - 69 I. M au..................................................................................... - 69 1. Y tng................................................................................ - 69 2. Mo hnh ............................................................................... - 69 II. Bai toan ngui du lch............................................................. - 70 1. Bai toan ............................................................................... - 70 2. Y tng................................................................................ - 70 3. Thiet ke ............................................................................... - 71 4. Cai at ................................................................................. - 73 III. Bai toan cai tui xach.............................................................. - 74 1. Bai toan ............................................................................... - 74 2. Y tng................................................................................ - 74 3. Thiet ke thuat toan .............................................................. - 75 4. Cai at ................................................................................. - 78 Bai tap ..................................................................................... - 79 Chng 5: PHNG PHAP THAM LAM...................................... - 81 I. M au..................................................................................... - 81 1. Y tng................................................................................ - 81 2. Mo hnh ............................................................................... - 81 II. Bai toan ngi du lch............................................................. - 82 1. Bai toan ............................................................................... - 82 2. Y tng................................................................................ - 82 3. Thuat toan ........................................................................... - 82 4. o phc tap cua thuat toan .................................................. - 83 Tran Tuan Minh
Khoa Toan-Tin
-4-
5. Cai at ................................................................................. - 83 III. Thuat toan Dijkstra -Tm ng i ngan nhat trong o th co
trong so ....................................................................................... - 84 1. Bai toan ............................................................................... - 84 2. Y tng................................................................................ - 85 3. Mo ta thuat toan .................................................................. - 85 4. Cai at ................................................................................. - 87 5. o phc tap cua thuat toan .................................................. - 90 IV. Thuat toan Prim Tm cay bao trum nho nhat ..................... - 90 1. Bai toan ............................................................................... - 90 2. Y tng................................................................................ - 90 3. Mo ta thuat toan .................................................................. - 90 4. Cai at ................................................................................. - 91 5. o phc tap thuat toan ........................................................ - 93 V. Bai toan ghi cac bai hat .......................................................... - 93 1. Phat bieu bai toan................................................................ - 93 2. Thiet ke ............................................................................... - 93 3. o phc tap cua thuat toan .................................................. - 94 4. Cai at ................................................................................. - 94 VI. Bai toan chiec tui xach (Knapsack) ...................................... - 95 1. Phat bieu bai toan................................................................ - 95 2. Thiet ke thuat toan .............................................................. - 95 3. o phc tap cua thuat toan .................................................. - 96 4. Cai at ................................................................................. - 96 VII. Phng phap tham lam va Heuristic .................................... - 97 Bai tap ..................................................................................... - 98 Chng 6 : PHNG PHAP QUY HOACH ONG..................... - 100 I. Phng phap tong quat .......................................................... - 100 II. Thuat toan Floyd -Tm ng i ngan nhat gia cac cap nh..... 100 1. Bai toan ............................................................................. - 100 2. Y tng.............................................................................. - 101 3. Thiet ke ............................................................................. - 101 4. Cai at ............................................................................... - 103 5. o phc tap cua thuat toan ................................................ - 104 III. Nhan to hp nhieu ma tran .................................................. - 104 1. Bai toan ............................................................................. - 104 Tran Tuan Minh
Khoa Toan-Tin
-5-
2. Y tng.............................................................................. - 104 3. Thiet ke ............................................................................. - 105 4. o phc tap cua thuat toan ................................................ - 106 5. Cai at ............................................................................... - 106 IV. Cay nh phan tm kiem toi u (Optimal Binary Search Tree) ..... 107 1. Phat bieu bai toan.............................................................. - 108 2. Y tng.............................................................................. - 108 3. Thiet ke thuat toan ............................................................ - 109 4. o phc tap cua thuat toan ................................................ - 110 5. Cai at ............................................................................... - 111 V. Day chung dai nhat cua 2 day so.......................................... - 111 1. Bai toan ............................................................................. - 111 2. Y tng.............................................................................. - 112 3. Thuat toan ......................................................................... - 112 4. o phc tap cua thuat toan ................................................ - 114 5. Cai at ............................................................................... - 114 VI. Bai toan ngi du lch ......................................................... - 115 1. Y tng.............................................................................. - 116 2. Thiet ke thuat toan ............................................................ - 116 3. o phc tap cua thuat toan ................................................ - 118 Bai tap ................................................................................... - 118 PHU LUC .............................................................................. - 120 TAI LIEU THAM KHAO ..................................................... - 122 -
Khoa Toan-Tin
-6-
LI NOI AU
Giao trnh Thiet ke va anh gia thuat toan co noi dung tiep sau giao
trnh Cau truc d lieu va thuat toan 1 va Toan cao cap A4, trnh bay trong 3
tn ch ly thuyet va 1 tn ch thc hanh cho cac sinh vien nganh Toan Tin hoc va
Cong nghe thong tin. Trong tam chnh cua giao trnh :
-
Trnh bay mot so phng phap thiet ke thuat toan thong dung.
Khoa Toan-Tin
-7-
V trnh o ngi bien soan co han nen tap giao trnh khong tranh
khoi nhieu khiem khuyet, chung toi rat mong s gop y cua cac ban ong nghiep va
sinh vien.
Cuoi cung, chung toi cam n s ong vien, giup nhiet thanh cua
cac ban ong nghiep trong khoa Toan-Tin hoc e tap giao trnh nay c hoan
thanh.
alat, ngay 10 thang 11 nam 2002
TRAN TUAN MINH
Khoa Toan-Tin
-8-
Khoa Toan-Tin
-9-
3. ac ta thuat toan
Moi thuat toan nham giai quyet mot lp cac bai toan cu the.
Moi lan thc hien thuat toan can phai cung cap cho c che thc hien mot
so oi tng hay phng tien can thiet nao o. Cac oi tng hay phng tien nay
phan biet bai toan cu the trong lp bai toan ma thuat toan giai quyet.
Lam sao nh ro lp bai toan ma mot thuat toan giai quyet? o la ac ta
thuat toan. ac ta thuat toan can ch ra cac ac iem sau :
1. Cac oi tng va phng tien cua thuat toan can s dung (nhap).
2. ieu kien rang buoc (neu co) tren cac oi tng va phng tien o.
3. Cac san pham ,ket qua (xuat).
4. Cac yeu cau tren san pham, ket qua. Thng xuat hien di dang quan
he gia ket qua va cac oi tng, phng tien s dung.
INPUT
THUAT
TOAN
OUTPUT
Khoa Toan-Tin
- 10 -
1. Dang lu o ( s o khoi )
Dung cac hnh ve ( co qui c ) e dien at thuat toan .Lu o cho hnh anh
trc quan va tong the cua thuat toan ,cho nen thng c s dung.
4. Dang ma gia
Thuat toan trnh bay trong dang van ban bang ngon ng t nhien tuy de hieu
nhng kho cai at. Dung mot ng lap trnh nao o e dien ta th phc tap, kho hieu.
Thong thng thuat toan cung c trao oi di dang van ban - tuy khong rang
buoc nhieu vao cu phap xac nh nh cac ngon ng lap trnh, nhng cung tuan theo
mot so quy c ban au - Ta goi dang nay la ma gia. Tuy theo viec nh hng cai
at thuat toan theo ngon ng lap trnh nao ta dien at thuat toan gan vi ngon ng
ay. Trong phan nay ta trnh bay mot so quy c cua ngon ng ma gia trong dang
gan C/C++.
a) Ky t
- Bo ch cai : 26 ch cai.
- 10 ch so thap phan.
- Cac dau phep toan so hoc.
- Cac dau phep toan quan he.
. . .
b) Cac t : Ghep cac ky t ch, so, dau gach di ( _ ).
Cac t sau xem nh la cac t khoa :
if, else, case, for, while , do while ...
c) Cac phep toan so hoc va logic
- Cac phep toan so hoc : +, -, *, /, %.
- Cac phep toan Logic : &&, ||, ! cua C/C++.
d) Bieu thc va th t u tien cac phep toan trong bieu thc (Nh C/C++).
e) Cac cau lenh
1. Lenh gan :
x = Bieu thc;
2. Lenh ghep ( Khoi lenh ) :
[
A1 ;
...
An;
Khoa Toan-Tin
- 11 -
}
3. Cau truc re nhanh :
if (C)
if (C)
A
else
A
B
Ma gia
Switch(Bt)
Case C1 : A1;
Case C2 : A2;
......
Case Cn : An
[default : An+1;]
Trong o :
- bt : Bieu thc nguyen.
- Ci la cac gia tr nguyen oi mot khac
nhau.
- Ai la nhom lenh.
C1 1
A1
0
C2 1
A2
0
Cn
0
An
An+1
A;
Khoa Toan-Tin
- 12 -
1 C
bt1
bt2
1
A
bt3
Khoa Toan-Tin
- 13 -
A2
A1
A1
A1
...
A3
A3
A3
. . .
A3
. . .
Chien thuat giai bai toan nh vay la chia e tr, the hien chien thuat o ta
dung thiet ke t tren xuong. o la cach nhn nhan van e mot cach tong quat, e
cap en cac cong viec chnh, sau o mi bo sung dan cac chi tiet.
La phng phap thiet ke phan anh tinh than modul hoa va thiet ke t tren
au tien thuat toan c trnh bay di dang ngon ng t nhien the hien y
chnh cong viec. Cac bc sau se chi tiet hoa dan tng ng vi cac cong viec nho
hn. o la cac bc lam mn dan ac ta thuat toan va hng ve ngon ng lap trnh
ma ta d nh cai at.
Qua trnh thiet ke va phat trien thuat toan se the hien dan t ngon ng t
nhien, sang ngon ng ma gia roi en ngon ng lap trnh, va i t mc lam cai g
en lam nh the nao.
V du :
Bai toan nan ten .
Mot ten co the co mot hay nhieu t, cac t tach biet bi t nhat 1 dau cach
(khoang trang, tab, ..). T la mot day cac ky t khac dau cach.
Viec nan ten thc hien theo cac quy cach :
(i) Kh cac dau cach au va cuoi cua ten (ca ho va ten c goi tat la ten ).
(ii) Kh bt cac dau cach gia cac t, ch e lai mot dau cach.
(iii) Cac ch cai au t c viet hoa, ngoai ra moi ch cai con lai c viet
thng.
Chng trnh c phat thao bi :
Mc 0 :
Khoa Toan-Tin
- 14 -
Khoa Toan-Tin
- 15 -
Khoa Toan-Tin
- 16 -
Khoa Toan-Tin
- 17 -
1. Cac bc trong qua trnh phan tch anh gia thi gian chay cua
thuat toan
- Bc au tien trong viec phan tch thi gian chay cua thuat toan la quan
tam en kch thc d lieu, se c dung nh d lieu nhap cua thuat toan va quyet
Khoa Toan-Tin
- 18 -
nh phan tch nao la thch hp. Ta co the xem thi gian chay cua thuat toan la mot
ham theo kch thc cua d lieu nhap. Neu goi n la kch thc cua d lieu nhap th
thi gian thc hien T cua thuat toan c bieu dien nh mot ham theo n, ky hieu la
: T(n).
- Bc th hai trong viec phan tch anh gia thi gian chay cua mot thuat
toan la nhan ra cac thao tac tru tng cua thuat toan e tach biet s phan tch va
s cai at. Bi v ta biet rang toc o x ly cua may tnh va cac bo dch cua cac ngon
ng lap trnh cap cao eu anh hng en thi gian chay cua thuat toan, nhng
nhng yeu to nay anh hng khong ong eu vi cac loai may tren o cai at thuat
toan, v vay khong the da vao chung e anh gia thi gian chay cua thuat toan.
Chang han ta tach biet s xem xet co bao nhieu phep toan so sanh trong mot thuat
toan sap xep khoi s xac nh can bao nhieu micro giay chay tren mot may tnh cu
the. Yeu to th nhat dc xac nh bi tnh chat cua thuat toan, con yeu to th hai
c xac nh bi tnh nang cua may tnh. ieu nay cho ta thay rang T(n) khong
the c bieu dien bang giay, phut...c; cach tot hn la bieu dien theo so cac ch
th trong thuat toan.
V du :
Xet :
for(i = 1; i < n; i++)
(1)
for(j = 1; j < n; j++)
(2)
Ky hieu : T(n) la thi gian thc hien cau lenh (2) :
1
(2)
1
n
2
n
3
n
. . .
n-1
n
L4
T (n) = n14
+2
+3n = (n 1)n
)
( n 1) la n
- Bc th ba trong viec phan tch anh gia thi gian chay cua mot thuat
toan la s phan tch ve mat toan hoc vi muc ch tm ra cac gia tr trung bnh va
trng hp xau nhat cho moi ai lng c ban. Chang han, khi sap xep mot day cac
phan t, thi gian chay cua thuat toan hien nhien con phu thuoc vao tnh chat cua
d lieu nhap nh :
* Day co th t thuan.
* Day co th t ngc.
* Cac so hang cua day co th t ngau nhien.
Khoa Toan-Tin
- 19 -
Nhan xet :
a) t(n) O(t(n))
b) t(n) O(f(n)) c R+ , n N , t(n) cf(n) .
Cac tnh chat :
Tnh chat 1 :
Vi moi ham f : N* N* :
f (n) 2 O(n 2 )
f ( n) O ( n)
2 f ( n) O(2 n )
Tnh chat 2:
a) f(n) O(g(n)) va g(n) O(h(n)) f(n) O(h(n)).
b) g(n) O(h(n)) O(g(n)) O(h(n)).
Tnh chat 3:
a) O(f(n)) = O(g(n)) g(n) O(f(n)) va f(n) O(g(n)).
b) O(f(n)) O(g(n)) f(n) O(g(n)) va g(n) O(f(n)).
Tnh chat 4:
f ( n)
a) lim
= c 0 O(f(n)) = O(g(n))
n g ( n)
f ( n)
b) lim
= 0 O(f(n)) O(g(n)) = O(g(n) f(n))
n g ( n)
V du :
- Ham f(n) = 2n5 + 3n3 + 6n2 + 2 co cap O(n5 ) v :
2n 5 + 3n 3 + 6n 2 + 2
= 2 0.
lim
n
n5
- Ham f(n) = 2n la O(n! ) v :
2n
lim
= 0.
n n !
- Ham 2n+1 O(2n ) .
b) Ky hieu :
Ky hieu nay dung e ch chan di cua thi gian chay cua thuat toan
Ta nh ngha :
(f(n)) = {t : N N* | c R+ , n0 N, n n0 , t(n) cf(n)}
Tnh chat 6:
Cho f, g : N N* , Ta co :
f(n) O(g(n)) g(n) (f(n)).
c) Ky hieu :
nh ngha :
(f(n)) = O(f(n)) (f(n)).
Tnh chat 7:
f(n) (g(n)) c,d R+ , n0 N, n n0 , cg(n) f(n) dg(n) .
Khoa Toan-Tin
- 20 -
(1) 1 : Neu tat ca cac ch th cua chng trnh eu c thc hien ch mot vai
lan va ta noi thi gian chay cua no la hang so.
(2) Logn : Khi thi gian chay cua chng trnh la Logarit. Thi gian chay
thuoc loai nay xuat hien trong cac chng trnh ma giai 1 bai toan ln bang cach
chuyen no thanh 1 bai toan nho hn, bang cach cat bo kch thc mot hang so nao
o. C so Logarit co the lam thay oi hang so o nhng khong nhieu.
(3) n : Khi thi gian chay cua chng trnh la tuyen tnh.
(4) nLogn : Thi gian chay thuoc loai nay xuat hien trong cac chng trnh
ma giai 1 bai toan ln bang cach chuyen no thanh cac bai toan nho hn, ke en giai
quyet chung 1 cach oc lap, sau o to hp cac li giai.
(5) n2 : Thi gian chay cua thuat toan la bac 2, thng la x ly cac cap phan
t d lieu (co the la 2 vong lap long nhau). Trng hp nay ch co y ngha thc te
khi bai toan nho.
(6) n3 : Mot thuat toan x ly bo ba cac phan t d lieu (co the la 3 vong lap
long nhau) co thi gian chay bac 3. Trng hp nay ch co y ngha thc te khi bai
toan nho.
(7) . 2n :
Sau ay la cac gia tr xap x cua cac ham tren :
n \ Ham
n
lg n
Nlgn
n2
n3
2n
1
1
0
0
1
1
2
2
2
1
2
4
8
4
4
n
2
8
16
64
16
8
8
3
24
64
512
256
16
16
4
64
256
4096
65536
32
32
5
160
1024
32768
2.147.483.648
De thay rang :
O(1) O(lg n) O(n) O(nlgn) O(n2 ) O(n3 ) O(2n ).
Cac ham loai : 2n, n!, nn thng c goi la cac ham loai mu. thuat toan vi
thi gian chay co cap ham loai mu th toc o rat cham.
Cac ham loai : n3, n2, nLog2 n, n, Log2 n thng c goi la cac ham loai a
thc. Thuat toan vi thi gian chay co cap ham a thc thng chap nhan c.
Ghi chu :
Cac hang so b bo qua trong bieu thc anh gia o phc tap cua thuat toan
co the co y ngha quan trong trong ng dung cu the. Gia s thuat toan 1 oi hoi thi
gian la C1n, con thuat toan 2 oi hoi thi gian la C2n2. D nhien la vi n u ln th
thuat toan 1 nhanh hn thuat toan 2. Nhng vi n nho th co the thuat toan 1 nhanh
hn thuat toan 2. Chang han, vi C1 = 200, C2 = 10, va vi n = 5, th thuat toan 1
oi hoi thi gian 1000, trong khi o thuat toan 2 ch co 250.
V du :
Thuat toan Chon trc tiep (Straight Selection) : SSS
Sap xep tang dan day cac khoa : x[1],x[2],. . .,x[n].
Y tng :
Khoa Toan-Tin
- 21 -
- Bc i chon phan t nho nhat cua day x[i],x[i+1],. . .,x[n], oi cho phan
t nho nhat nay cho x[i].
- Lap thao tac nay vi i = 1..n-1.
Thuat toan :
1
for (i =1;i <= n-1;i++)
{
2
k = i;
Khi ong ch so cua gia tr nho nhat : (k
= = i)
3
a = x[i];
Lay ra gia tr cua phan t th i
4
for (j=i+1;j <= n; j++)
Tm phan t nho nhat trong mang
x[i]...x[n]
5
if (x[ j] < a)
{
6
a = x[j];
7
k = j;
Gi v tr cua phan t nho nhat
}
a la gia tr nho nhat (Khi o : x[k] = = a)
8
x[k] = x[i];
oi v tr cua phan t nho nhat
9
x[i] = a;
Cho phan t a v tr th i.
}
o phc tap thuat toan:
Lenh (1) thc hien n lan, (Lan n e thoat khoi for).
Moi lenh (2), (3), (8), (9) thc hien n-1 lan.
n( n + 1)
Lenh (4) thc hien n + (n-1) +...+2 =
1 lan.
2
n(n 1)
Lenh (5) thc hien A = (n-1)+(n-2)+...+1 =
lan. // So sanh
2
Xet trng hp xau nhat :
Tc la lenh (5) luon thoa ieu kien, tng ng day co th t ngc lai,
n(n 1)
lan.
Moi lenh (6), (7) thc hien
2
Do o :
T(n) = n + 4(n-1) + n(n+1)/2 - 1 + 3n(n-1)/2
= 2n2 + 4n - 5 6n2 .
T(n) (n2 )
Xet trng hp tot nhat
Tc la lenh (5) luon khong thoa ieu kien, tng ng day co th t thuan,
(6) va (7) khong thc hien lan nao. Ta co :
T(n) = n2 + 5n - 5 (n2 ).
Khoa Toan-Tin
- 22 -
bai toan con va gia phai tra cua s phan ra. Nen cac thuat toan e qui co thi gian
chay phu thuoc vao thi gian chay cho cac d lieu nhap co kch thc nho hn, ieu
nay c dien dch thanh mot cong thc toan hoc goi la cong thc truy hoi. Do o,
e tnh o phc tap cua thuat toan, ta thng phai giai cac phng trnh truy hoi. Co
nhieu cach giai, ta nghien cu cac cach thng dung sau.
A. Phng phap thay the :
Da vao dang truy hoi cua phng trnh e tnh o phc tap cua thuat toan
dc vao cac kch thuc d lieu nho hn.
Mot so cong thc thng gap sau ay c giai bang phng phap thay the :
Cong thc 1:
T + N ; N 2
TN = N 1
1; N = 1
Cong thc nay thng dung cho cac chng trnh e qui ma co vong lap
duyet qua d lieu nhap e bo bt 1 phan t .
TN = TN-1 + N
= TN-2 + (N-1) +N
= TN-23+ +(N-2) + (N-1) +N = . . .
= 1+2+ . . . +N
=
Cong thc 2:
N ( N + 1)
2
T N + 1; N 2
TN = 2
0; N = 1
Cong thc nay thng dung cho cac thuat toan e qui ma tai moi bc chia
d lieu nhap thanh 2 phan .
Gia s N = 2n , co :
T n = T n 1 + 1 = T n 2 + 2 = L = n.
2
2
2
Suy ra :
TN = log2 N .
Cong thc 3:
T N + N ; N 2
TN = 2
0; N = 1
Cong thc nay thng dung cho cac thuat toan e qui ma tai moi bc thc
hien, chia oi d lieu nhap nhng co kiem tra moi phan t cua d lieu nhap.
TN = N +
N N N
+ +
L 2N .
2 4 8
Cong thc 4:
2T N + 1; N 2
TN = 2
0; N = 1
Khoa Toan-Tin
tr.
- 23 -
Cong thc nay thng dung cho cac thuat toan theo phng phap chia e
T2n = 2T2n 1 + 2 n
T2n
T2n 1
2n 1
T2n = n 2 n
2n
+1 =
T2n 2
2n 2
+1+1 = L = n
TN = NLog 2 N
(1)
at tn = Xn , ta a (1) ve dang :
X nk (a0 X k + a1 X k 1 + L + a k 1 X + a k ) = 0
(2)
X nk = 0
a0 X k + a1 X k 1 + L + a k 1 X + a k = 0
X = 0 hien nhien la nghiem cua (2), nhng ta quan tam en nghiem cua
phng trnh :
(3)
p ( X ) = a 0 X k + a 1 X k 1 + L + a k 1 X + a k = 0
Phng trnh (3) goi la phng trnh ac trng bac k cua phng trnh truy
hoi (1) .
TH1 : Tat ca cac nghiem cua (3 ) eu la nghiem n.
Gia s rang X 1 , X 2 ,L , X k la cac nghiem n cua (3), th ta co the kiem tra
k
Khoa Toan-Tin
- 24 -
T (0) = 1
T (1) = 2
T (n) = c1 X 1n + c2 X 2n
T (0) = 1 c1 X 10 + c2 X 20 = 1 c1 + c2 = 1
T (1) = 2 c1 X 1 + c 2 X 2 = 2 2c1 + 4c2 = 2
Vay co :
c1 + c 2 = 1
2c1 + 4c 2 = 2
c1 = 1, c2 = 0.
V du 2 :
5T (n 1) 8T (n 2) + 4T (n 3); n 3
0; n = 0
T ( n) =
1; n = 1
2; n = 2
Ta co phng trnh :
T ( n) 5T ( n 1) + 8T ( n 2) 4T ( n 3) = 0
Phng trnh ac trng tng ng la :
X 3 5X 2 + 8X 4 = 0
( X 1)( X 2) 2 = 0
Vay ta co cac nghiem cua phng trnh ac trng : 1 (n), 2 (kep)
Nen nghiem chung la : T ( n) = c11n + c 2 2 n + c3 n 2 n
Da vao cac ieu kien au, ta co :
c1 + c 2 = 0
c1 + 2c 2 + 2c3 = 1
c + 4c + 8c = 2
2
3
1
Suy ra :
Vay :
1
2
n +1
n 1
T ( n) = 2 n 2 2
c1 = 2; c 2 = 2; c3 =
Khoa Toan-Tin
- 25 -
B2) Phng trnh truy hoi tuyen tnh khong thuan nhat vi cac he so khong oi :
Phng trnh dang : a 0 t n + a 1 t n 1 + L + a k t n k = b n p (n)
Vi b la hang so, p la a thc bac d theo n.
Bien oi ve dang thuan nhat.
V du :
t n 2t n 1 = 3 n
(2) : t n +1 2t n = 3 n +1 ;
n +1
(3) : 3t n 6t n 1 = 3 ; do nhan 2 ve cua (1) cho 3
Lay (2) (3), c dang thuan nhat :
t n +1 5t n + 6t n 1 = 0
Ta co :
Khoa Toan-Tin
}
Co the xem phep toan tch cc ay la : a< x[j];
Trong trng hp xau nhat, tng ng day giam dan. So lan thc hien cua
phep toan nay la :
n(n + 1)
2++n=
1 .
2
Vay : T(n) (n2).
Trong trng hp tot nhat, tng ng day tang dan.So lan thc hien cua
phep toan nay la : n - 1
Vay : T(n) (n).
Khoa Toan-Tin
i+1
I
1
i +1
X1
X2
i
1
i +1
...
1
i +1
3
...
2
1
i +1
- 27 -
Xi
1
1
1
i +1
V tr
(T phai sang trai)
Xi
p
1
1
1
1
i
+2
+3
+L+ i
+
i +1
i +1 i +1
i +1 i +1
1
=
(1 + 2 + L + (i 1) + i + i )
i +1
i
1 i (i + 1)
=
+
i +1
i +1
2
i
i
= +
2 i +1
E( X i ) = 1
th :
Neu goi Y la bien ngau nhien xac nh bi tong cac so sanh trong sap xep
Y
Ta co :
E(Y) =
X1 + X2 + +Xn-1
n 1
E( X i ) =
i =1
n 1
i
+
i =1 2
n
1 n(n 1)
1
+n
2
2
i =1 i
n 2 3n
+
Hn
4
4
n 1
n 1
i
1 n 1
1
(1
)
=
i
+
2 i =1
i +1
i =1
i =1 i + 1
1
lgn + 1 ; ( Hn la so Harmonic bac n .)
i =1 i
Nen gia tr trung bnh cua cac phep toan so sanh trong thuat toan tng
n2
ng vi
, Vay o phc tap trung bnh cua thuat toan la (n2 ).
4
n
Trong o : H n =
Khoa Toan-Tin
- 28 -
ay la iem quan tam au tien khi cai tien thuat toan, v vong lap la cau
lenh thng lam tang o phc tap cua thuat toan. Viec cai tien tap trung vao :
- Co gang giam cac vong lap long nhau.
- Tang so lenh thc hien trong mot bc lap e giam so lng cac bc lap.
- Tach cac lenh khong phu thuoc vao ch so lap ra khoi vong lap.
...
V du 1:
Xet thuat toan tnh gia tr cua ex theo cong thc gan ung :
xi
x2
xn
=
1
+
+
+
L
+
+L
x
i!
2
!
!
n
i 0
Thuat toan 1 :{ Tnh tng so hang roi cong lai.}
Input x,n
n
xi
Ouput S = .
i =1 i!
Mo ta :
S = 1;
for( i = 1; i<= n;i++)
{
p = 1;
for (j:= 1; j <= i ;j++ )
p = p*x/j;
S = S + p;
}
Ta co the coi phep toan tch cc ay la phep p := p*x/j .
n(n + 1)
Ta thay no thc hien c : 1+2+. . .+n =
lan.
2
Nen T(n) (n2 ).
Thuat toan 2 :
Ta xem xet vong lap trong co can thiet hay khong ?
xi
Nhan xet rang vong lap trong c dung e tnh
, nhng moi so hang
i!
trong tong, so hang sau co the c tnh da vao so hang trc :
x2 x x
= ;
2! 1! 2
L;
xn
x n 1 x n
=
n! (n 1)! n
xi
theo cong thc tren. Vay
i!
Khoa Toan-Tin
- 29 -
p = 1;
for( i = 1; i<= n;i++)
{
xi
p = p*x/i; //
i!
S = S + p;
}
Chang han co the coi phep toan tch cc ay la phep p := p*x/i .
Do o : T(n) (n).
V du 2 :
Ta xet thuat toan nhan 2 ma tran vuong cap n.
TT1 :
Input a,b Mat N (n)
Output c Mat N (n)
Nhan1(a,b,c)
for(i =1; i<=n; i++)
for(j = 1; j <= n; j++)
{
c[i][j] = 0;
for (k = 1; k <= n; k++)
c[i][j] += a[i][k]*b[k][j];
}
Theo TT1, moi lan ta ch tnh 1 phan t c[i][j] trong vong lap theo k. Gi ta
cai tien, trong trng hp n chan, tnh mot lan 4 gia tr :
c[i][j]
c[i+1][j]
c[i][j+1]
c[i+1][j+1]
c[i][j]
c[ii][j]
c[i][jj]
c[ii][jj]
TT2 :
Nhan2(a,b,c)
i = 1;
while (i < n)
{
ii = i+1;
j = 1;
while ( j < n )
{
jj = j+1;
c[i][j] = 0;
c[i][jj] = 0;
Khoa Toan-Tin
a[ii][kk]*b[kk][jj];
- 30 -
c[ii][j] = 0;
c[ii][jj] = 0;
k = 1;
while (k < n)
{
kk = k+1;
c[i][j] = c[i][j] + a[i][k]*b[k][j] + a[i][kk]*b[kk][j];
c[i][jj] = c[i][jj]+a[i][k]*b[k][jj] + a[i][kk]*b[kk][jj];
c[ii][j] = c[ii][j]+a[ii][k]*b[k][j] + a[ii][kk]*b[kk][j];
c[ii][jj] = c[ii][jj]+a[ii][k]*b[k][jj] +
k = k+2;
}
j = j + 2;
}
i = i + 2;
}
oi vi bieu thc logic ket hp bang phep toan &&, nen viet theo th t xac
suat sai giam dan :
A1 && A2 &&... && An
Xac suat sai cua cac Ai giam dan .
oi vi bieu thc logic ket hp bang phep toan ||, nen viet theo th t xac
suat ung giam dan :
A1 || A2 ||... || An
Xac suat ung cua cac Ai giam dan :
...
BAI TAP
Bai 1 :
Xac nh o phc tap cua cac thuat toan sau :
r = m%n;
while(r)
{
m = n;
n = r;
r = m%n;
}
return n
gt (n)
if (n == 0 || n == 1)
return 1;
else
return (n * gt(n-1)) ;
Khoa Toan-Tin
Fib(n)
if ( n < 2 )
return 2;
else
return Fib(n-1)+Fib(n-2);
- 31 -
Fibo(n)
i = 1; j = 0;
for( k =1 n)
{
j = i + j;
i = j i;
}
return j;
Bai 2 :
Tnh o phc tap cua cac thuat toan sau trong trng hp tot nhat, xau nhat :
if (csmin == n-i+1)
for (i = 1; i <= n/2; i++)
{
{
Hoan v a[i] va a[csmin];
Min = a[i];
if (csmax != i)
Csmin = i ;
Hoan v a[csmax] va a[nMax = a[n-i+1];
I+1];
Csmax = n-i+1;
}
for (j = i ;j <= n-i+1; j++)
else
{
{
if (a[j] < Min)
Hoan v a[csmax] va a[n{
I+1];
Min = a[j];
Hoan v a[i] va a[csmin];
csmin = j ;
}
}
}
if (a[j] > Max)
{
Max = a[j];
csmax = j;
}
}
Bai 3 :
Tnh thi gian thc hien trung bnh cua cac phep toan so sanh trong cac
thuat toan :
1. oi cho trc tiep.
2. Chon trc tiep.
Bai 4 :
Xac nh T(n) , vi :
Khoa Toan-Tin
- 32 -
1. T (0) = 1
T (1) = 2
T (n) = n + 4T ( ), n > 1
2.
2
T (1) = 1
3. T (0) = 1
T (1) = 1
T (n) = 2T (n 1) + 1; n > 1
4. T (0) = 0
T (1) = 1
Bai 5 :
Cai tien thuat toan chen trc tiep bang cach : Dung phng phap tm kiem
nh phan e xac nh v tr can chen cua ai trong day con a co th t a1,, ai-1 .
Thuat toan cai tien goi la chen nh phan. Hay thiet ke, cai at va anh gia
o phc tap thi gian cua thuat toan.
Bai 6 :
Tm cac v du ve cac thuat toan ma khi cai tien ( bang cach nao o ), so lan
thc hien cua thuat toan giam ang ke ( ve o phc tap tiem can, hoac ve t le ...)
Khoa Toan-Tin
- 33 -
I. M au
1. Y tng
Co le quan trong va ap dung rong rai nhat la ky thuat thiet ke Chia e tr .
No phan ra bai toan kch thc n thanh cac bai toan con nho hn ma viec tm li
giai cua chung la cung mot cach. Li giai cua bai toan a cho c xay dng t li
giai cua cac bai toan con nay .
Ta co the noi van tat y tng chnh cua phng phap nay la : chia d lieu
thanh tng mien u nho, giai bai toan tren cac mien a chia roi tong hp ket qua
lai.
2. Mo hnh
Neu goi D&C() - Vi la mien d lieu - la ham the hien cach giai bai
toan theo phng phap chia e tr th ta co the viet :
void D&C()
{
If ( u nho)
giai bai toan;
Else
{
Chia thanh 1 , ,m ;
for (i = 1; i <=m; i++)
D&C(i);
Tong hp ket qua;
}
}
Sau ay la cac minh hoa ky thuat thiet ke Chia e tr .
2. Y tng
Chia oi mang , moi lan so sanh phan t gia vi x, neu phan t x nho hn
th lay na trai, ngc lai th lay na phai.
3. Mo ta thuat toan
Input
: a[1..n]
Khoa Toan-Tin
- 34 -
1; x a
Output :
0; x a
Mo ta :
Tknp(a, x, au, Cuoi)
If (au > Cuoi)
return 0 ; {day trong}
Else
{
Gia = (au + cuoi) / 2;
If (x == a[Gia])
return 1;
else
if (x > a[Gia])
Tknp(a, x, Gia + 1, Cuoi) ;
else
Tknp(a, x, au, Gia - 1) ;
}
5. Cai at
int tknp(int a[max],int x,int l, int r)
{
int mid;
if ( l > r )
return 0;
mid = (l+r)/2;
if ( x == a[mid] )
return 1;
if ( x > a[mid] )
return tknp(a,x,mid+1,r);
return tknp(a,x,l,mid-1);
}
Khoa Toan-Tin
- 35 -
2. Y tng
Tai moi bc, chia oi oan can tm roi tm Min, Max cua tng oan, sau o
tong hp lai ket qua.
Neu oan chia ch co 1 phan t th Min = Max va bang phan t o.
Minh hoa :
i
a[i]
1
10
2
1
3
5
4
0
5
9
6
3
7
15
8
19
3. Thuat toan
Input : a[l..r], ( l r )
Output : Min = Min (a[l],..,a[r]),
Max = Max (a[l],..,a[r]).
Mo ta :
MinMax(a,l, r, Min, Max)
if (l == r)
{
Min = a[l];
Max = a[l];
}
Else
{
MinMax(a,l, (l+r) / 2, Min1, Max1);
MinMax(a,(l+r) /2 + 1, r , Min2, Max2);
If (Min1 < Min2)
Min = Min1;
Else
Min = Min2;
If (Max1 > Max2)
Max = Max1
Else
Max = Max2;
}
Khoa Toan-Tin
- 36 -
T (n) = 1 ; n = 2
0 ; n = 1
Vi n = 2k , th :
k 1
T (n) = 2 + 2T (n / 2) = 2 + 2 2 + 2 2 T (n / 2 2 ) = L = 2 k 1 T (2) + 2 i
i =1
= 2 i 2 k 1 = 2 k +1 2 k 1 2 =
i =1
3n
2.
2
5. Cai at
void MinMax(int a[.], int l, int r, int &Min, int &Max )
{
int Min1,Min2,Max1,Max2;
if (l == r )
{
Min = a[l];
Max= a[l];
}
else
{
MinMax(a,l,(l+r)/2 , Min1, Max1);
MinMax(a,(l+r) /2 + 1,r, Min2, Max2);
if (Min1 < Min2)
Min = Min1;
else
Min = Min2;
if (Max1 > Max2)
Max = Max1;
else
Max = Max2;
}
}
Khoa Toan-Tin
- 37 -
1. Y tng
Chon ngau nhien mot phan t x.
Duyet day t ben trai ( theo ch so i ) trong khi con ai < x.
Duyet day t ben phai ( theo ch so j ) trong khi con aj > x.
oi cho ai va aj neu hai pha cha vt qua nhau.
. . . tiep tuc qua trnh duyet va oi cho nh tren trong khi hai pha con cha
vt qua nhau ( tc la con co i j).
2. Mo ta thuat toan
- Thuat toan QuickSort
Input : a[1..n]
Output : a[1..n] khong giam.
Mo ta thuat toan :
QuickSort (a,n)
QS(a,1,n) ;
- Thuat toan phan hoach
Input : a[1..n],l,r;
Output : a[l..r] tang dan
Mo ta :
QS(a,l,r)
i = l;
j = r;
x = a[(l+r)/2]; // Chon phan t gia
do
{
while (a[i] < x )
i++;
while (a[j] > x)
j--;
if (i <= j)
{
oicho a[i] va a[j];
i++;
Khoa Toan-Tin
- 38 -
j--;
}
}
while (i <= j);
if (l < j)
QS(a,l,j);
if (r > i )
QS(a,i,r);
Khoa Toan-Tin
- 39 -
nTn ( n 1)Tn 1 = n( n + 1) + n
n
2 n
Tk 1 (n 1)Tn 1
n k =1
= n(n + 1) + 2 Tk 1 ( n 1)[n +
k =1
2 n 1
Tk 1 ]
n 1 k =1
n 1
k =1
k =1
= n( n + 1) n( n 1) + 2 Tk 1 2 Tk 1
Ta c :
Suy ra :
nTn = ( n + 1)Tn 1 + 2n
n
n +1
1
1
2
1
+
= + 2
2 k =2 k + 1 2
k =3 k
n
Tn
1
1
2 2 dx = 2 ln(n )
n +1
x
k =3 k
1
2. Mo ta
ng dung thiet ke chia e tr, moi ma tran A, B, C ta chia thanh 4 ma tran
con va bieu dien tch 2 ma tran AxB = C theo cac ma tran con o :
C11
C 21
C12 A11
=
C 22 A21
A12
A22
B11
B21
B12
B22
Trong o :
Khoa Toan-Tin
- 40 -
Cu the, e nhan 2 ma tran vuong cap 2 , theo Strassen ch can 7 phep nhan
va 18 phep cong (tr) cac so. e tnh :
c11
c 21
c12 a11
=
c 22 a 21
a12
a 22
b11
b21
b12
b22
Khoa Toan-Tin
- 41 -
strass(a22,b22,d2,n/2);
cong(d1,d2,c22,n/2);
Hop(c11,c12,c21,c22,c,n);
}
2. Y tng
* Neu
* Neu
-
Nh vay, bang cach ap dung phng phap chia e tr, ta chia bai toan thanh
2 bai toan con :
- Bai toan th nhat la hoan oi hai mang con co o dai bang nhau, cu the la
hoan oi na so phan t au va cuoi cua mang cho nhau bang cach oi cho
tng cap phan t tng ng.
- Bai toan th hai cung dang vi bai toan a cho nhng kch thc nho hn,
nen co the goi thuat toan e qui e giai va qua trnh goi e qui se dng khi
at ti s hoan oi 2 phan co o dai bang nhau
Vay mau chot cua thuat toan la thc hien thao tac hoan oi 2 nhom phan t,
lap lai thao tac nay trong khi so lng phan t cua 2 nhom cong khac nhau. Nen ta
se thay thuat toan e qui bang thuat toan lap.
3. Thuat toan
// Hoan oi m phan t au cua mang vi phan con lai.
Input : a[1..n], m. (m n)
Output : a[1..n] vi tnh chat m phan t au mang a ( mang nhap ) nam cuoi
mang
Khoa Toan-Tin
- 42 -
ket qua, n-m phan t cuoi mang nhap nam au mang ket
qua.
Mo ta thuat toan :
Transpose(a,n,m)
i = m; j = n-m; m = m+1;
Khi ( i j)
Neu ( i > j)
{
Exchange(a,m-i,m,j);
i = i j;
}
Ngc lai
{
j = j i;
Exchange(a,m-i,m+j,i);
}
Exchange(a,m-i,m,i);
* Thuat toan exchange :
input a,
i,j, //v tr
m; // So phan t can hoan oi
output a
Mo ta :
Exchange(a,i,j,m)
Vi moi p = 0 m-1
oicho (a[i+p], a[j+p]);
Minh hoa :
n = 8, a[8] = ( 1, 2, 3, 4, 5, 6, 7, 8) , m = 3.
- Mang nhap :
1
Hoan oi
- Exchange(a,1,6,3)
6
Hoan oi
Khoa Toan-Tin
- 43 -
- Exchange(a,1,4,2)
4
Hoan oi
- Exchange(a,3,5,1)
4
Hoan oi
- Exchange(a,3,4,1)
4
i; neu i = j
T(i,j) = i + j UCLN(i,j)
UCLN(i,j) la c chung ln nhat cua i, j.
5. Cai at
void Transpose(day a,int n,int m)
{
int i, j;
i = m;
j = n-m;
m = m+1;
while ( i != j )
if(i > j)
{
Exchange(a,m-i,m,j);
i = i - j;
}
Khoa Toan-Tin
- 44 -
j = j - i;
Exchange(a,m-i,m+j,i);
}
Exchange(a,m-i,m,i);
}
//*************************
void Exchange(day a, int i, int j, int m)
{
for (int k = 0; k <= m-1; k++)
doicho(a[i+k], a[j+k]);
}
2. Y tng
Thuat toan sap xep kieu tron hai ng trc tiep c thc hien theo nhieu
bc lap :
* Moi bc lap bao gom hai giai oan :
Giai oan 1 :( Phan bo)
Phan bo luan phien tng p phan t t day F vao cac day trung gian F1, F2
trong khi cha het day F.
Giai oan 2 :( Tron )
Tron tng bo p phan t trong day F1 vi p phan t trong F2, ket qua tron
c a vao F, trong khi cha het day F1 va cha het day F2.
* Cac bc lap con c thc hien trong khi p con so cac phan t cua F .
Bc au tien p c khi ong bang 1.
Moi bc lap sau( sau mot lan phan bo va tron ), so phan t p se khi ong
lai la : p = p * 2 .
Minh hoa :
Gia s F la day dung sap th t , F co noi dung nh sau :
F 9 2 1 1 5 8 1 2 9 6 7 4 6 7 2 2 3 1 1
0
1
au tien ta phan bo luan phien tng phan t cua day nguon F vao cac day
trung gian F1 , F2.
Trong lan phan bo au tien ,ta co :
F1
90
1
5
1
9
7
6
21
3
1
F2
2
1
8
2
6
4
7
2
1
Khoa Toan-Tin
- 45 -
Ta thc hien tron hai ng tng phan t F1 vi tng phan t F2; Ket
qua tron c ghi vao F.
F
2-90
1-1
5-8
1-2
6-9
4-7
6-7
2-21
1-3
Sang lan th 2:
F1
F2
2-90
1-1
5-8
1-2
6-9
4-7
6-7
2-21
1-3
1
1-1 2-90
1-2-5-8
4-6-7-9
2-6-7-21
1-1-3
Sang lan th 3 :
F1
F2
1-1 2-90
1-2-5-8
4-6-7-9
2-6-7-21
1-1-3
1-1-1-2-2-5-8-90
2-4-6-6-7-7-9-21
1-1-3
Sang lan th 4 :
F1
F2
1-1-1-2-2-5-8-90
2-4-6-6-7-7-9-21
1-1-3
1-1-1-2-2-2-4-5-6-6-7-7-8-9-21-90
1-1-3
Sang lan th 5 :
F1
F2
1-1-1-2-2-2-4-5-6-6-7-7-8-9-21-90
1-1-3
1-1-1-1-1-2-2-2-3-4-5-6-6-7-7-8-9-21-90
Khi o F c sap th t .
3. Thiet ke
* Thuat toan tron 2 ng trc tiep :
input F[1..n]; // day can sap
Output F a c sap
Mo ta:
p = 1;
Trong khi (p <= n) ta thc hien :
{
- Phan bo luan phien tng p phan t t day F vao cac day trung gian F1, F2
trong khi cha het day F.
-Tron tng cap p phan t trong day F1 vi p phan t trong day F2, ket qua
ghi vao F, trong khi cha het day F1 va cha het day F2;
Khoa Toan-Tin
- 46 -
Khoa Toan-Tin
- 47 -
Khoa Toan-Tin
- 48 -
k = 3-k;
}
while(l <= n);
b) Thuat toan tron tng bo p phan t trong F1 va p phan t trong F2.
Tron tng bo p phan t trong F1, va p phan t trong F2, ket qua lu tr vao
F, trong khi cha het F1 va F2.
a1) Thiet ke :
Input F1, F2;
Output F;
Mo ta :
Trong khi ( cha het day F1 va cha het day F2 )
{
Tron tng cap p phan t cua F1 va cua F2 vao F;
}
Trong khi (cha het day F1)
chep cac phan t con lai cua F1 vao F;
Trong khi (cha het day F2)
chep cac phan t con lai cua F2 vao F;
- Ta can ch ro cong viec tron tng cap p phan t cua F1 va cua F2 vao F
hoat ong nh the nao ? o la :
- (*) : oc tng phan t trong F1, trong F2, so sanh gia tr cua chung, gia tr nao
nho hn th chep phan t tng ng vao F. Neu la phan t cua F1 th oc tiep 1
phan t cua F1; ngc lai th oc tiep 1 phan t cua F2
- ( ** ) :Thao tac tren con c thc hien trong khi : cha oc u p phan t trong F1
va cha oc u p phan t trong F2 va cha het day F1 va cha het day F2;
- Vong lap (**) dng khi a oc u p phan t trong F1, hoac a oc u p phan t
trong F2, hoac het day F1 hoac het day F2; Va khi o ta can x ly cac trng hp
sau :
Trong trng hp cha het day F1 va cha het day F2 :
Neu cha u p phan t trong F1, th oc va chep cac phan t cua F1
vao F cho u p; Tng t nh vay cho F2.
a2) Cai at :
/*
F,F1,F2,n,h1,h2 la cac bien toan cuc.
Ta dung cac bien :
- r1 : em cac phan t oc c trong day F1.
- r2 : em cac phan t oc c trong day F2 .
- i1 : duyet day F1
- i2 = 1 duyet day F2
*/
void merge(int p)
Khoa Toan-Tin
- 49 -
{
int t, i1 = 1,i2 = 1,r1,r2;
int h = 0;
while(i1 <= h1 && i2 <= h2)
{
r1=r2=1;
while((r1 <= p) && (r2 <=p ) && i1 <= h1 && i2 <= h2)
{
if(F1[i1] <= F2[i2])
{
h++;
F[h] = F1[i1];
r1++;
i1++;
}
else
{
h++;
F[h] = F2[i2];
r2++;
i2++;
}
}
while(i1 <= h1 && r1 <= p)
{
h++;
b[h] = b1[i1];
i1++;
}
while(i2 <= h2 && r2 <= p)
{
h++;
b[h] = b2[i2];
i2++;
}
}
while(i1 <= h1)
{
h++;
b[h] = b1[i1];
i1++;
}
Khoa Toan-Tin
- 50 -
BAI TAP
Bai 1 : ( Nhan cac so ln )
Ky thuat chia e tr nhan 2 so nguyen dng x, y di dang chuoi :
Nhan(x,y)
if( l(x), l(y) <= 4)
Nhan 2 so nguyen nguyen kieu long;
else
Gia s l(x) = l(y) = n;
Tach x thanh 2 chuoi con : a(Na trai), b (na phai)
Tach y thanh 2 chuoi con : c(Na trai), d (na phai)
Khoa Toan-Tin
- 51 -
a
n/2 bit trai
c
b
n/2 bit phai
d
x s , tnh
x.
Bai 4 :
Sap tang dan mot day x cac so, bang thuat toan tron t nhien :
Trong khi (so ng chay cua x > 1)
- Tach luan phien tng ng chay cua x vao cac day trung gian x1, x2;
- Tron tng cap ng chay cua x1, x2 , lu tr vao x;
Ghi chu :
ng chay trong x la cac day con co th t ( tang dan) co chieu dai ln
nhat.
Bai 5 :
Lap lch thi au vong tron 1 lt cho n oi bong a, n la luy tha 2. Trong 1
t thi au , moi oi au 1 tran. au trong n-1 t.
Ky thuat chia e tr xay dng lch cho mot na so oi . Lch nay c lap
nen do ap dung e qui cua thuat toan bang cach tm lch cho mot na so oi ... khi
ch con 2 oi th ta co mot cap au n gian.
Cac oi c anh so t 1 en n. Gia s co 8 oi . Lch thi au cho 4 oi t
1 en 4 lap ay goc trai tren ( 4 hang 3 cot) coi nh a lap xong. Goc trai di ( 4
hang 3 cot ) phai cho vao cac oi co so th t cao (t 5 en 8) ngc vi cac so
khac.Lch con nay tao ra bang cach cong 4 cho moi so nguyen cua goc trai tren .
Bay gi ta a lam n gian bai toan. Tat ca phan con lai la cac oi co so thap au
vi cac oi co so cao. ieu o de hieu la cac oi t 1-4 au vi cac oi 5-8 tng
ng t t th 4 va hoan v theo chu ky 5 en 8 trong cac t tiep theo.
Khoa Toan-Tin
t
1
2
3
4
1
2
1
4
3
2
3
4
1
2
3
4
3
2
1
t
oi 1
2
3
4
5
6
7
8
- 52 1
2
1
4
3
6
5
8
7
2
3
4
1
2
7
8
5
6
3
4
3
2
1
8
7
6
5
4
5
6
7
8
1
2
3
4
5
6
7
8
5
4
1
2
3
6
7
8
5
6
3
4
1
2
7
8
5
6
7
2
3
4
1
Khoa Toan-Tin
- 53 -
2. Mo hnh
Li gii ca bai toan thng bieu dien bang mot vec t gom n thanh phan
x = (x1,.., xn ) phai thoa man cac ieu kien nao o. e ch ra li giai x, ta phai xay
dng dan cac thanh phan li giai xi .
Tai moi bc i :
a xay dng xong cac thanh phan x1,.., xi-1
- Xay dng thanh phan xi bang cach lan lt th tat ca cac kha nang ma xi
co the chon :
Neu mot kha nang j nao o phu hp cho xi th xac nh xi theo
kha nang j. Thng phai co them thao tac ghi nhan trang thai mi
cua bai toan e ho tr cho bc quay lui. Neu i = n th ta co c
mot li giai, nguc lai th tien hanh bc i+1 e xac nh xi+1 .
Neu khong co mot kha nang nao chap nhan c cho xi th ta lui
lai bc trc (bc 1-1) e xac nh lai thanh phan xi-1.
e n gian, ta gia nh cac kha nang chon la cho cac xi tai moi bc la
nh nhau, do o ta phai co them mot thao tac kiem tra kha nang j nao la chap nhan
c cho xi .
Mo hnh cua phng phap quay lui co the viet bang thu tuc sau, vi n la so
bc can phai thc hien, k la so kha nang ma xi co the chon la.
Try(i)
for ( j = 1 k)
If ( xi chap nhan c kha nang j)
{
Xac nh xi theo kha nang j;
Khoa Toan-Tin
Ghi chu :
Tm nghiem bang phng phap quay lui co the chuyen ve tm kiem tren cay
khong gian cac trang thai, vi cay c xay dng tng mc nh sau :
Cac nut con cua goc (thuoc mc 1) la cac kha nang co the chon cho x1.
Gia s xi-1 lamot nut mc th i-1, khi o cac nut con cua xi-1 la cac kha
nang ma xi co the chon, mot khi a tm c cac thanh phan x1,.., xi-1.
Nh vay, moi nut xi cua cay bieu dien mot li giai bo phan, o la cac nut
nam tren ng i t goc en nut o.
Ta co the noi viec tm kiem nghiem bang phng phap quay lui chnh la tm
kiem theo chieu sau tren cay khong gian cac trang thai.
Goc
x1
Mc 1
x2
Mc 2
x3
Mc 3
.
.
. . . . .
.
Sau ay la cac minh hoa ve ky thuat thiet ke quay lui.
Khoa Toan-Tin
- 55 -
* Cac kha nang chon la cho xi ? o chnh la cac nc i cua nga ma xi co the
chap nhan c.
Vi cap toa o bat au <x,y> nh trong hnh ve, co tat ca 8 o <u,v> ma
con nga co the i en. Gia s chung c anh so t 0 en 7 nh hnh sau :
Khoa Toan-Tin
(-1,-2)
hang
(1,-2)
(2,-1)
- 56 3
3
2
Toa o
(a,b)
1
(-2,1)
(-1,2)
3
6
1
7
(1,2)
(2,1)
cot y
( 8 bc i co the co cua con nga )
Mot phng phap n gian e co c u, v t x, y la ta dung 2 mang a va b
lu tr cac sai biet ve toa o .Neu ta dung mot ch so k e anh so bc i ke
th chi tiet o c the hien bi : u = x +a[k]; v = y + b[k]; k = 0,7 .
ieu kien chap nhan c co the c bieu dien nh ket hp cua cac ieu
kien :
O mi phai thuoc ban c (1 u n va 1 v n) va cha i qua o o,
ngha la h[u,v] = 0;
* e ghi nhan nc i hp le bc i, ta gan h[u][v] = i; va e huy mot nc i th
ta gan h[u][v] = 0.
* Ma tran h ghi nhan ket qua nghiem. Neu co <x,y> sao cho h<x,y> = 0 th o
khong phai la li giai cua bai toan , con ngc la h cha ng i cua nga.
Vay thuat toan co the mo ta nh sau :
Input n, //Kch thc ban c
x, y;//Toa o xuat phat bc i
Output h;
Mo ta :
Try(i, x, y)
for(k = 0; k <= 7; k++)
{
u = x + a[k];
v = y + b[k];
if (1 <= u ,v <= n &&h[u][v] == 0)
{
h[u][v] = i;
if (i < n*n)
Try(i+1,u,v);
else
xuat_h(); // In ma tran h
}
Khoa Toan-Tin
- 57 -
h[u][v] = 0;
}
Thu tuc nay xuat tat ca cac li giai, neu co.
Thu tuc e qui c khi ong bang mot lenh goi cac toa o au x0, y0 la
tham so. O xuat phat co tr 1, con cac o khac c anh dau con trong.
H[x0 ][y0 ] = 1;
Try(2,x , y );
Cac mang a va b co the khi au nh sau :
int a[8]= {2,1,-1,-2,-2,-1,1,2};
int b[8]= {1,2,2,1,-1,-2,-2,-1};
* Cac li giai sau la mot so ket qua cho t thuat toan tren :
1
14
19
8
25
n=5
6
9
2
13
18
x=1
15
20
7
24
3
y=1
10
5
22
17
12
21
16
11
4
23
36
19
16
23
34
21
n=6
17
30
35
20
15
24
x=2
6
1
18
31
22
33
y=3
29
10
7
2
25
14
8
5
12
27
32
3
11
28
9
4
13
26
Khoa Toan-Tin
- 58 -
x[i] = j
// quan hau th i at cot j;
e quan hau i (tren hang i) chap nhan cot j th cot j va 2 ng cheo qua o
<i,j> phai con trong ( tc la khong co quan hau khac chiem lnh)
Lu y rang trong 2 ng cheo :
- ng cheo ngc (vuong goc vi ng cheo chnh) : tat ca cac o eu co
tong 2 toa o i va j la hang;
- ng cheo thuan (song song vi ng cheo chnh) : gom tat ca cac o
(i,j) ma co hieu cac toa o (i-j) la hang so.
Cot j
ng cheo (i + j)
ng cheo
(i j)
Hang i
Do o ta se chon cac mang Boole 1 chieu e bieu dien cac trang thai nay :
a[j] = 1 : Co ngha la khong co quan hau nao cot.
b[i+j] = 1 : Co ngha la khong co quan hau nao ng cheo ngc (i+j) .
c[i -j] = 1 : Co ngha la khong co quan hau nao ng cheo thuan (i- j) .
V :
1 i,j 8 2 i+j 16 Va -7 i - j 7.
Nen ta co the khai bao :
int x[8],
a[8],
b[15],
c[15];
Vi cac d lieu a cho, th lenh at quan hau se the hien bi :
x[ i ] = j; // at quan hau th i tren cot j.
a[ j ] = 0;//Khi at hau tai cot j , th cot j khong con trong na
b[ i+ j ] = 0;//Cac ng cheo tng ng cung khong con
c[ i - j ] = 0;//trong na .
Con lenh Di quan hau la :
//Lam cho hang i va cac ng cheo tng ng tr thanh trong
a[ j ] = 1;
b[ i+ j ] = 1;
c[ i - j ] = 1;
Khoa Toan-Tin
- 59 -
Khoa Toan-Tin
- 60 -
{
x[i] = j;
if (i < n )
Try (i+1);
else
Xuat(x);
}
Cay khong gian cac trang thai cua bai toan co the mo ta bi :
0
0
000
001 010
1
0
011 100
101 110
111
Khoa Toan-Tin
- 61 -
b[j] = 0;
// Ghi nhan trang thai mi
if (i < n)
Try(i+1);
else
Xuat();
b[j] = True; // Tra lai trang thai cu
}
Khoa Toan-Tin
- 62 -
Khoa Toan-Tin
- 63 -
Input G = (aij)nxn , s, t
Output Tat ca cac ng i t s en t (neu co).
void DFS( s)
int u;
daxet[s] = 1;
for( u = 1;u <= n; u++)
{
if( a[s][u] && !daxet[u])
{
Truoc[u] = s;
if ( u == t )
Xuat_duongdi();
else
DFS(u);
daxet[u] = 0;
}
}
Mang truoc[ ] lu tr cac nh tren ng i,
Neu ket thuc thuat toan, Daxet[t] = 0 ( Truoc[t] = 0 ) th khong co ng i
t s en t.
Trong trng hp ton tai ng i, xuat ng i chnh la xuat mang Truoc[
]. Thao tac nay co the viet nh sau :
Xuat_duongdi()
cout<<t<<"<--";
j = t;
while ( truoc[j] != s)
{
cout<<truoc[j]<<"<--";
j = truoc[j];
}
cout<<s<<endl;
Vi o th co hng cho bi ma tran ke :
7
0 0 0 1 0
0 0 1 1 0
0 1 0 1 0
1 0 1 0 0
0 0 0 0 1
1 0 0 0 1
1 0 0 1 0
1
0
1
0
1
0
0
1
0
0
0
0
0
0
Ket qua :
Khoa Toan-Tin
- 64 s = 2, t = 5
5 6
5 6
5 6
5 6
1
3
1
3
4 3 2
2
4 2
4 2
Bc 1 : A1 = {x V \ A0 : ( s, x) E}.
Bc 2 : A2 = {x V \ [ A0 A1 ] : y A1 , ( y, x) E}.
...
Bc i : Ai = {x V \ U Ak : y Ai 1 , ( y, x) E} .
i 1
k =0
Thuat toan co khong qua n bc lap; mot trong hai trng hp sau xay ra :
- Neu vi moi i, t Ai : khong co ng i t s en t;
- Ngc lai, t A(m) vi m nao o. Khi o ton tai ng i t s ti t, va o la
mot ng i ngan nhat t s en t.
Trong trng hp nay, ta xac nh c cac nh tren ng i bang cach
quay ngc lai t t en cac nh trc t trong tng cac tap trc cho en khi gap s.
Minh hoa :
Cho n o th co hng :
-
Khoa Toan-Tin
- 65 -
3
A(0)
A(1)
A(2)
A(3)
Tm ng i t nh (1) en nh (4) :
= {1};
= {2,3,5}
= {6}
= {4}
ng i ngan nhat tm c la 4 6 5 1 , co chieu dai la 3.
c) Cai at
Khoa Toan-Tin
- 66 -
queue[cuoiQ] = j;
Daxet[j] = 1;
Truoc[j] = u;
}
Nhan xet :
Ta co the thay moi lan goi DFS(s), BFS(s) th moi nh cung thanh phan
lien thong vi s se c tham, nen sau khi thc hien ham tren th :
Truoc[t] == 0 : co ngha la khong ton tai ng i t s en t,
Ngc lai, co ng i t s en t. Khi o li giai c cho bi :
t p1 = Truoc[t] p2 = Truoc[p1] s .
BAI TAP
Bai 1:
Cai at cac thuat toan :
1. Liet ke tat ca cac day nh phan o dai n.
2. Liet ke tat ca cac hoan v cua n so nguyen dng au tien.
3. Liet ke tat ca cac to hp chap k trong tap gom n so nguyen dng au tien.
4. Giai bai toan nga i tuan.
5. Giai bai toan n hau.
6. DFS.
7. BFS.
Bai 2 :
Cho day a = (a1, a2, . . ., an ) gom cac so oi mot khac nhau.
1. Liet ke tat ca cac hoan v cua day n phan t cua a.
2. Liet ke tat ca cac to hp chap k trong tap gom n phan t cua a.
Bai 3 :
Gia s o khoa co n cong tac. Moi cong tac co mot trong 2 trang thai ong
hay m. Khoa m c neu co t nhat [n/2] cong tac co trang thai m.
Liet ke tat ca cac cach m khoa.
Bai 4 ( Nga i tuan ).
Cho ban c n x n o. Mot con nga c phep i theo luat c vua.
Tm hanh trnh cua nga, bat au t o <x0, y0 > i qua tat ca cac o cua ban
c, moi o ung mot lan.
Liet ke tat ca cac hanh trnh.
Bai 5 :
Cho ban c n x n o. Mot con nga c phep i theo luat c vua.
Khoa Toan-Tin
- 67 -
Tm hanh trnh cua nga, bat au t o <x0, y0 > , o ket thuc <x1, y1 >, moi o
trong hanh trnh nga i qua ung mot lan.
1. Liet ke tat ca cac hanh trnh.
2. Ch ra hanh trnh ngan nhat ( co so o trong hanh trnh t nhat )
Bai 6 ( Nga i tuan ).
Cho ban c n x n o. Mot con nga c phep i theo luat c tng.
Tm hanh trnh cua nga, bat au t o <x0, y0 > i qua tat ca cac o cua ban
c, moi o ung mot lan.
Liet ke tat ca cac hanh trnh.
Bai 7 :
Mot ngi du lch muon tham quan n thanh pho T1, T2, . ., Tn . Xuat phat t
mot thanh pho nao o, ngi du lch muon i qua tat ca cac thanh pho con lai, moi
thanh pho i qua ung mot lan roi quay tr lai thanh pho xuat phat.
Goi Cij la chi ph i t thanh pho Ti en thanh pho Tj .
1. Liet ke tat ca cac hanh trnh i t thanh pho Ti en thanh pho Tj thoa yeu cau
bai toan va chi ph tng ng.
2. Ch ra hanh trnh i t thanh pho Ti en thanh pho Tj thoa yeu cau bai toan (neu
co) sao cho co chi ph t nhat.
Bai 8 :
Cho mot ma tran vuong cap n, cac phan t cua ma tran la cac so t nhien.
Ta noi ng i trong ma tran la mot ng gap khuc khong t cat xuat phat t mot
o nao o cua ma tran, sau o co the i theo cac hng : len tren, xuong di, re
trai, re phai. o dai cua ng i la so o nam trong ng i.
Vi o xuat phat cho trc :
1. Tm mot ng i dai nhat trong ma tran, theo ngha co nhieu o nhat trong ng
i.
2. Tm ng i dai nhat trong ma tran sao cho cac o tren ng i lap thanh mot
day so khong giam.
Bai 9 :
Khoa Toan-Tin
- 68 -
Bai 11 :
Cho 3 ky t A, B, C va n la mot so nguyen dng.
1. Liet ke tat ca cac chuoi tao ra t 3 ky t tren, vi chieu dai n.
2. Liet ke tat ca cac chuoi tao ra t 3 ky t tren, vi chieu dai n, thoa ieu kien
khong co 2 chuoi con lien tiep nao giong nhau.
3. Ch ra chuoi thoa (1) , (2) va sao cho so ky t B la t nhat.
Bai 12 :
Gia s A N* , co n phan t. Cho S N*.
n
Xac nh : D = ( x1 ,L, x n ) N n : S = xi ai ; ai A, i = 1, n
i =1
Bai 13 :
Cho n xau ky t khac rong a1, a2, . .,an , va mot xau ky t S. Tm cach bieu
dien S qua cac xau ai, di dang ghep xau, moi xau ai co the khong xuat hien
trong S, hoac xuat hien trong S nhieu lan.
Liet ke tat ca cach cach bieu dien.
Bai 14 :
Co n o vat, moi vt i ac trng bi trong lng Wi va gia tr s dung Vi,
vi moi i {1,..,n}.
Can chon cac vat nay at vao mot chiec tui xach co gii han trong lng m,
sao cho tong gia tr s dung cac vat c chon la ln nhat.
Bai 15 :
Xet bai toan tm ng bay trong mang giao thong hang khong.
Trong c s d lieu cac tuyen bay cua mot hang hang khong, gia s moi
tuyen bay xac nh bi cac thanh phan :
- Thanh pho xuat phat.
- Thanh pho ch.
- Chieu dai ng bay
Vi thanh pho xuat phat va thanh pho ich cho trc.
1. Liet ke tat ca cac ng bay.
2. Ch ra ng bay co chieu dai ngan nhat.
Khoa Toan-Tin
- 69 -
2. Mo hnh
Gia s bai toan toi u cho la :
Tm Min{f(x) : x D};
n
chat tren
A .
i
i =1
Sau khi tm c ham anh gia can g, ta dung g e giam bt chi ph duyet
cac phng an theo phng phap quay lui.
Gia s x* la li giai tot nhat hien co (phng an mau), con f* la gia tr tot
nhat tng ng f* = f(x*).
Neu g ( x1 , L , xi ) > f* th :
f* < g ( x1 ,L, xi ) Min{ f (a) : a = (a1 ,L, a n ) X , xi = ai , i = 1, i}
Khoa Toan-Tin
- 70 -
Nen chac rang cac li giai m rong t ( x1 ,L, xi ) se khong tot hn phng
an mau, do o co the bo i khong can phat trien li giai bo phan ( x1 ,L, xi ) e tm
}
// Tra bai toan ve trang thai cu
}
Thc chat cua phng phap nhanh can la tm kiem theo chieu sau tren cay
liet ke li giai nh phng phap quay lui, ch khac co mot ieu la khi tm c xi
ma anh gia can g ( x1 ,L , xi ) > f* th ta cat bo cac nhanh con t xi i xuong, ma
quay len ngay cha cua no la xi-1.
Van e la xac nh ham anh gia can nh the nao ?
2. Y tng
Goi la mot hoan v cua {1,.., n} th mot hanh trnh tho yeu cau bai toan co
dang : T(1) T(2) T(n) .
Nen co tat ca n! hanh trnh nh the.
Neu ta co nh mot thanh pho xuat phat, chang han T1, th co (n-1)! hanh
trnh.
Bai toan chuyen ve dang :
Khoa Toan-Tin
- 71 -
3. Thiet ke
Input
Output
C = (Cij )
- x* = (x1,...,xn)
- f* = f(x*)
Try (i)
for (j = 1 n)
if( Chap nhan c )
{
Xac nh xi theo j;
Ghi nhan trang thai mi;
if(i == n)
Cap nhat li giai toi u;
else
{
Xac nh can g ( x1 ,L , xi ) ;
if( g ( x1 ,L , xi ) f* )
Try (i+1);
}
// Tra bai toan ve trang thai cu
}
Neu ta co nh xuat phat t T1, ta duyet vong lap t j = 2.
anh gia nhanh can :
at : CMin = Min{Cij : i, j {1,..,n}
Gia s vao bc i ta tm c li gia bo phan cap i la (x1,..,xi ), tc la a i
qua oan ng T1 T2 . . . Ti , tng ng vi chi ph :
Si = C1x2 + C x2 x3 + L + C xi 1 xi
e phat trien hanh trnh bo phan nay thanh mot hanh trnh ay u, ta con
phai i qua n-i+1 oan ng na, gom n-i thanh pho con lai va oan quay lai T1.
Do chi ph moi mot trong n-i+1 oan con lai khong nho hn CMin, nen ham
anh gia can co the xac nh nh sau :
g ( x1 ,L, xi ) = S i + (n i + 1)CMin
Khoa Toan-Tin
- 72 -
Try(i)
for (j = 2 n)
if(!Daxet[j])
{
x[i] = j;
Daxet[j] = 1;
S = S + C[x[i-1]][x[i]];
if(i==n)
//Cap nhat toi uu
{
Tong = S + C[x[n]][x[1]];
if(Tong < f*)
{
Lgtu = x;
f* = Tong;
}
}
else
{
g = S + (n-i+1)*Cmin; //Danh gia can
if ( g < f*)
Try(i+1);
}
S = S - C[x[i-1]][x[i]];
Daxet[j] = 0;
}
Minh hoa :
3 14 18 15
3 4 22 20
Ma tran chi ph :
C = 17 9 16 4
6 2 7 12
9 15 11 5
Khoa Toan-Tin
- 73 -
(1)
f*=
(1,2)
S=3; g = 11
(1,2,3)
S=7; g = 13
(1,2,4)
S=25; g = 31
(1,2,3,4)
S=23; g = 27
(1,2,3,5)
S=11; g = 15
(1,2,3,4,5)
S=35; g = 37
(1,2,3,5,4)
S=16; g = 18
Cap nhat :
f* = 35 + 9 = 44
Hanh trnh TU mi
12345
(1,3)
S=14; g=22
(1,4)
S=18; g = 26
(1,5)
S=15;g=23
(1,2,5)
S=23; g = 29
g f* (=22) :
Cat cac nhanh nay
Cap nhat :
f* = 16 + 6 = 22
Hanh trnh mi :
12354
4. Cai at
void Try(int i)
{
int j, Tong, g;
for (j = 2; j <= n; j++)
if(!Daxet[j])
{
x[i] = j;
Daxet[j] = 1;
S = S + C[x[i-1]][x[i]];
if(i==n)
//Cap nhat hanh trinh toi uu
{
Tong = S + C[x[n]][x[1]];
Khoa Toan-Tin
}
else
{
- 74 -
}
S = S - C[x[i-1]][x[i]];
Daxet[j] = 0;
}
2. Y tng
va :
at : D = u = (u1 , L, u n ) N n : u i wi m
i =1
+
f :DR
Khoa Toan-Tin
- 75 n
x v
j =1
= S + xjvj.
x w
j =1
= TL + xiwi .
x w
j =1
Ta co :
Khoa Toan-Tin
- 76 -
Max f (u ) : u = (u1 , L , u n ) D; u j = x j , j = 1, i =
Max S +
u v : u
j =i +1
j =i +1
w j mi =
n
n
m
S + Max u j v j : u j w j mi S + vi +1 * i
j =i +1
wi +1
j =i +1
Theo bieu thc xac nh can tren g, cac gia tr co the chap c cho xj+1 la :
m
t = 0 i
wi +1
Thao tac ghi nhan trang thai mi khi xac nh c xi chang qua la cap nhat
lai gia tr thu c va gii han trong lng mi cua chiec tui :
S = S + xivi
T = = T + xiwi .
V vay, thao tac tra lai trang thai cu cho bai toan :
S = S xivi
T = T - xiwi .
Cap nhat li giai toi u :
Khi tm c mot li giai, ta so sanh li giai nay vi li giai ma ta coi la tot
nhat vao thi iem hien tai e chon li giai toi u.
Cac khi tao gia tr ban au :
- x* = 0 ;
//Li giai toi u cua bai toan
- f* = f(x*) = 0;
// Gia tr toi u
- S = 0;
//Gia tr thu c tng bc cua chiec tui.
- TL = ;
//Trong lng xep vao chiec tui tng bc.
Ta viet lai thu tuc nhanh can tren :
Input
m,
v=(v1, . . ., vn) : vi R,i;
w=(w1,..., wn ) : wi R,i;
Output
x* = (x1,..., xn) : xi N,i;
n
n
f* = f(x*)= Max u i vi : u i wi m, u i N , i 1, n
i =1
i =1
Try(i)
t = (m-TL)/wi ;
for (j = t; j >=0 ; j--)
{
xi = j;
TL = TL + wi*xi ;
S = S + vi*xi;
Khoa Toan-Tin
}
Minh hoa :
i
w
v
m=8
- 77 -
if(i==n)
//Cap nhat toi uu
{
if(S > f*)
{
x* = x;
f* = S;
}
}
else
{
g = S + vi+1*(m-TL)/wi+1; //Danh gia can
if ( g > f*)
Try(i+1);
}
TL = TL wi*xi;
S = S - vi*xi;
1
5
10
2
3
5
3
2
3
4
4
6
Khoa Toan-Tin
- 78 Goc
f* = 0
x1=1
x1=0
(1)
S = 10;
TL = 5;
g = 15;
x2=1
(0)
S=0;
TL = 0 ;
g = 10;
x2 =0
g < f*
(1,1)
S = 15;
TL = 8;
g = 15;
(1,0)
S = 10;
TL = 5;
g = 13;
x3 =0
(1,1,0)
S = 15;
TL = 8;
g = 15;
x4 =0
(1,1,0,0)
S = 15;
TL = 8;
Li giai toi u :
x* = (1,1,0,0)
f* = 15
4. Cai at
void Try(int i)
{
int j, t, g;
t = (int)((m-Tl)/w[i]);
for (j = t; j >=0 ; j--)
{
x[i] = j;
Tl = Tl + w[i]*x[i]; //Trong luong thu duoc
S = S + v[i]*x[i]; //Gia tri thu duoc
if(i==n)
//Cap nhat toi uu
{
Khoa Toan-Tin
}
else
{
- 79 -
}
Tl = Tl - w[i]*x[i];
S = S - v[i]*x[i];
}
}
//*************
void Init()
{
for (int i = 1; i <= n; i++)
{
Patu[i] = 0;
x[i] = 0;
}
S = 0;
Gttu = 0;
Tl = 0;
}
BAI TAP
Bai 1 :
Co n o vat, moi vt i ac trng bi trong lng wi va gia tr s dung vi, vi
moi i {1,..,n}.
Can chon cac vat nay at vao mot chiec tui xach co gii han trong lng m,
sao cho tong gia tr s dung cac vat c chon la ln nhat.
Bai 2 :
Khoa Toan-Tin
- 80 -
Bai 3 :
Tm li giai toi u bai toan :
10 x + 5 x 2 + 3x 3 +6 x 4 Max
5 x1 + 3x 2 + 2 x3 + 4 x 4 8
x , x , x , x N
1 2 3 4
Bai 4 :
Gia s co n cong viec va n th. Chi ph tra cho ngi th i e lam cong viec
j la Cij . Moi cong viec ch do mot th thc hien va ngc lai.
Tm cach thue cac th lam viec sao cho tong chi ph la nho nhat.
Khoa Toan-Tin
- 81 -
I. M au
1. Y tng
Phng phap tham lam la ky thuat thiet ke thng c dung e giai cac bai
toan toi u. Phng phap c tien hanh trong nhieu bc. Tai moi bc, theo mot
chon la nao o ( xac nh bng mot ham chon), se tm mot li giai toi u cho bai
toan nho tng ng. Li giai cua bai toan c bo sung dan tng bc t li giai
cua cac bai toan con.
Li giai c xay dng nh the co chac la li giai toi u cua bai toan ?
Cac li giai tm c bang phng phap tham lam thng ch la chap nhan
c theo ieu kien nao o, cha chac la toi u.
Cho trc mot tap A gom n oi tng, ta can phai chon mot tap con S cua
A. Vi mot tap con S c chon ra thoa man cac yeu cau cua bai toan, ta goi la mot
nghiem chap nhan c . Mot ham muc tieu gan moi nghiem chap nhan c vi
mot gia tr. Nghiem toi u la nghiem chap nhan c ma tai o ham muc tieu at
gia tr nho nhat ( ln nhat).
ac trng tham lam cua phng phap the hien bi : trong moi bc viec x
l se tuan theo mot s chon la trc, khong ke en tnh trang khong tot co the xay
ra khi thc hien la chon luc au.
2. Mo hnh
Chon S t tap tap A .
Tnh chat tham lam cua thuat toan nh hng bi ham Chon.
- Khi ong S = ;
- Trong khi A :
- Chon phan t tot nhat cua A gan vao x : x = Chon (A) ;
- Cap nhat cac oi tng e chon : A = A-{x};
- Neu S {x} thoa man yeu cau bai toan th
Cap nhat li giai : S = S {x};
Thu tuc thuat toan tham lam co the cai at nh sau :
input A[1..n]
output S //li giai;
greedy (A,n)
S = ;
while ( A )
{
x= Chon(A);
A = A-{x}
if( S {x} chap nhan c )
S = S {x};
}
Khoa Toan-Tin
- 82 -
return S;
2. Y tng
ay la bai toan tm chu trnh co trong so nho nhat trong mot n o th co
hng co trong so.
Thuat toan tham lam cho bai toan la chon thanh pho co chi ph nho nhat tnh
t thanh pho hien thi en cac thanh pho cha qua.
3. Thuat toan
Input C= (Cij)
output TOUR //Hanh trnh toi u,
COST;//Chi ph tng ng
Mo ta :
TOUR := 0; COST := 0; v := u; // Khi tao
k := 1 n ://Tham tat ca cac thanh pho
// Chon canh ke )
- Chon <v, w> la oan noi 2 thanh pho co chi ph nho nhat tnh t TP v en
cac thanh pho cha qua.
- TOUR := TOUR + <v, w>; //Cap nhat li giai
- COST := COST + Cvw ;
//Cap nhat chi ph
// Chuyen i hoan thanh
TOUR := TOUR + <v, u>;
COST := COST + Cvu ;
Minh ho :
0
1
C = 2
7
5
1
0
4
4
3
2
4
0
1
2
7
4
1
0
3
5
3
2
3
0
1
5
2
4
2
7
Khoa Toan-Tin
- 83 -
1. TOUR := 0; COST := 0; u := 1;
w = 2;
1
1
w = 5;
1
5
w = 3;
2
3
1
w = 4;
1
5
3
2
3
4
5. Cai at
int GTS (mat a, int n, int TOUR[max], int Ddau)
Khoa Toan-Tin
- 84 -
{
int
v,
//Dinh dang xet
k,
//Duyet qua n dinh de chon
w;
//Dinh duoc chon trong moi buoc
int
mini; //Chon min cac canh(cung) trong moi buoc
int COST;
//Trong so nho nhat cua chu trinh
int daxet[max];
//Danh dau cac dinh da duoc su dung
for(k = 1; k <= n; k++)
daxet[k] = 0; //Chua dinh nao duoc xet
COST = 0;
//Luc dau, gia tri COST == 0
int i; // Bien dem, dem tim du n dinh thi dung
v = Ddau;
//Chon dinh xuat phat la 1
i = 1;
TOUR[i] = v; //Dua v vao chu trinh
daxet[v] = 1; //Dinh v da duoc xet
while(i < n)
{
mini = VC;
for (k = 1; k <= n; k++)
if(!daxet[k])
if(mini > a[v][k])
{
mini = a[v][k];
w = k;
}
v = w;
i++;
TOUR[i] = v;
daxet[v] = 1;
COST += mini;
}
COST += a[v][Ddau];
return COST;
Khoa Toan-Tin
- 85 -
2. Y tng
Thuat toan Dijkstra cho phep tm ng i ngan nhat t mot nh s en cac
nh con lai cua o th va chieu dai (trong so ) tng ng.
Phng phap cua thuat toan la xac nh tuan t nh co chieu dai en s theo
th t tang dan.
Thuat toan c xay dng tren c s gan cho moi nh cac nhan tam thi.
Nhan tam thi cua cac nh cho biet can tren cua chieu dai ng i ngan nhat t s
en nh o. Nhan cua cac nh se bien oi trong cac bc lap, ma moi bc lap
se co mot nhan tam thi tr thanh chnh thc. Neu nhan cua mot nh nao o tr
thanh chnh thc th o cung chnh la chieu dai ngan nhat cua ng i t s en
nh o.
3. Mo ta thuat toan
Ky hieu :
* L(v) e ch nhan cua nh v, tc la can tren cua chieu dai ng i ngan
nhat t s0 en v.
* d(s0 ,v) : chieu dai ng i ngan nhat t s0 en v.
* m(s0 ,v) la trong so cua cung (canh) (s,v).
Thuat toan Dijkstra tm chieu dai ng i ngan nhat t nh s en n-1 nh
con lai c mo ta nh sau :
input : G, s0
Output : d(s0,v), v s0 ;
Mo ta :
Khi ong :
L(v) = , v s0; //Nhan tam thi
S = ;
//Tap lu tr cac nh co nhan chnh thc
Bc 0 :
d(s0 ,s0 ) = L(s0) = 0;
S = {s0};
// s0 co Nhan chnh thc
Bc 1:
- Tnh lai nhan tam thi L(v), v S :
Neu v ke vi s0 th
L(v) = Min{L(v), L(s0) + m(s0,v)};
- Tm s1 S va ke vi s0 sao cho :
L(s1 ) = Min{L(v) : v S, };
(Khi o : d(s0,s1 ) = L(s1) )
- S = S {s1}; // S = {s0, s1 } ; s1 co nhan chnh thc
Bc 2:
- Tnh lai nhan tam thi L(v), v S :
Neu v ke vi s1 th
L(v) = Min{L(v), L(s1) + m(s1,v)};
Khoa Toan-Tin
- 86 -
Tnh chat tham lam cua thuat toan Dijkstra la tai moi bc, chon si S va si
la nh ke vi sj, vi j = 0, i 1 sao cho L(si ) = Min{L(v) : v S }.
Minh hoa : Xet o th co hng G :
10
80
90
15
18
36
40
10
30
4
20
15
15
45
20
10
Khoa Toan-Tin
- 87 -
Bc 0 :
L(s ) = ; s
d(1,1) = L(1) = 0;
S = {1};
Bc 1 :
- Tnh nhan tam thi L(v), v S :
* Cac nh S va ke vi 1 la 2,3,5 :
L(2) = Min{ L(2), L(1)+m(1,2)} = 20.
L(3) = Min{ L(3), L(1)+m(1,3)} = 15.
L(5) = Min{ L(5), L(1)+m(1,5)} = 80.
* Cac nh S va khong ke vi 1 la 4,6 :
L(4) = L(6) = .
- Tm s1 S va ke vi 1 sao cho :L(s1 ) = Min{L(v) : v S };
L(3) = Min{L(v) : v S} = 15.
ng i t 1 en 3 xac nh bi : 1 3 la ngan nhat trong tat ca cac
ng i t 1 en cac nh khac va d(1,3) = L(3) = 15.
- S = S {3}; // S = {1,3}
Bc 2 :
- Tnh nhan tam thi L(v), v S :
* Cac nh S va ke vi 3 la 2,6 :
L(2) = Min{ L(2), L(3)+m(3,2)} = Min{ 20, 15+4} = 19.
L(6) = Min{ L(6), L(3)+m(3,6)} = Min{ , 15+10} = 25.
L(4) = .
L(5) = 80 //a tnh bc 1.
- Tm s2 S va ke vi 1 hoac 3 sao cho :L(s1 ) = Min{L(v) : v S };
L(2) = Min{L(v) : v S} = Min{ L(2), L(3)+m(3,2)} = 19.
ng i t 1 en 2 xac nh bi : 1 3 2 la ngan nhat trong tat ca cac
ng i t 1 en cac nh j 3 va : d(1,2) = L(2) = 19.
- S = S {2}; // S = {1,3,2}
. . . tng t, ta co ket qua tnh toan sau ay :
Bc
lap
Bc1
Bc2
Bc3
Bc4
Bc5
ng i ngan
nhat la ng i
t nh 1
1 3
13 2
13 6
13 64
13 25
en
nh
3
2
6
4
5
20
19
-
15
-
80
29
29
-
29
25
25
-
4. Cai at
- Ta bieu dien n o th co hng G bang ma tran cac trong so cua canh :
Khoa Toan-Tin
trong o :
- 88 -
a= (auv)nxn ;
tro ng so cua (u , v); (u , v) E;
auv =
; (u , v) E;
- Dung mang 1 chieu e lu tr cac nhan tam thi cua cac nh, ky hieu la
L[ ].
- Dung mang 1 chieu Daxet[ ] cac gia tr logic e anh dau cac nh a c
a vao tap S ( gom cac nh co nhan chnh thc ):
Moi bc, neu xac nh c nh k e a vao tap S th ta gan Daxet[k]
= 1; va khi o L[k] la nhan chnh thc cua k ( ch chieu dai cua ng i nho nhat
cua ng t s en k) .
- Khi ong d lieu :
o Khi ong Daxet[] la rong :
Daxet[i] = 0, i.
o Khi ong can tren chieu dai cua ng i ngan nhat t s en nh
khac ( anh nhan tam thi ) bang .
L[i] = ; i s.
o Khi ong trong so nho nhat ng i t s en s bang 0.
L[s] = 0;//d(s,s) = 0
- Gia s tai moi bc, ( vi Dht la nh va a c vao S, Daxet[Dht] = 1
), cac nh i cha c xet se c anh nhan lai nh sau :
Neu (L[i] + m(Dht,i) ) < L[i]) th :
L[i] = L[Dht] + m(Dht,i);
Va trong trng hp nay, ng i ngan nhat t s en i se i qua nh Dht
(o la nh ke trc i)
- e lu tr cac nh tren ng i ngan nhat t s en t, vi t S , ta dung
mang mot chieu Ddnn[ ], vi tnh chat Ddnn[i] la nh trc nh i.
Thuat toan c cai at bang ham sau :
Input a[n][n], s
Output
- Xuat ra man hnh ng i ngan nhat t s en cac nh con lai
- Chieu dai tng ng
void dijkstra( int s)
{
int Ddnn[max]; // Cha ng i ngan nhat t s en nh t tai moi bc
int i,k,Dht,Min;
int Daxet[max]; //anh dau cac nh a a vao S
int L[max];
for ( i = 1; i <= n; i++)
{
Daxet[i] = 0;
L[i] = VC;
Khoa Toan-Tin
trinh
- 89 -
}
//Dua dinh s vao tap dinh S da xet
Daxet[s] = 1;
L[s] = 0;
Dht = s;
int h = 1; //em moi bc : cho u n-1 bc
while (h<= n-1)
{
Min = VC;
for ( i = 1; i <= n; i++)
if(!Daxet[i])
{
if ( L[dht] + a[dht][i] < L[i] ) //Tnh lai nhan
{
L[i] = L[dht] + a[dht][i] ;
Ddnn[i] = dht;
//gan dinh hien tai la dinh truoc dinh i tren lo
}
if(L[i] < Min) // Chon nh k
{
Min = L[i];
k = i;
}
}
// Tai bc h : tm c ng i ngan nhat t s en k : Ddnn[]
xuatdd(s,k,Ddnn);
cout<<"\nTrong so : "<<L[k];
dht = k;// Khoi dong lai Dht
Daxet[dht] = 1;
//Dua nut k vao tap nut da xet
h++;
}
}
//***************************
void xuatdd(int s, int k, int Ddnn[max])
{
int i;
cout<<"\nDuong di ngan nhat tu "<<s<<" den "<<k<<" la : ";
i = k;
while(i != s)
{
cout<<i<<"<--";
i = Ddnn[i];
}
Khoa Toan-Tin
- 90 -
cout<<s;
}
IV. Thuat toan Prim Tm cay bao trum nho nhat (Minimal Spanning
Tree)
1. Bai toan
G = (V,E) la n o th vo hng lien thong, co trong so .
V = {1,..,n}la tap cac nh. E la tap cac canh (edge).
Mot cay T goi la cay bao trum cua G neu T la o th con cua G va cha moi
nh cua G.
Van e la tm cay bao trum co trong so nho nhat : MST (Minimal
Spanning Tree ) cua G.
Cac thuat toan c ban giai bai toan tren la cac thuat toan Prim va Kruscal.
Trong phan nay, ta gii thieu thuat toan Prim
2. Y tng
Thuat toan Prim xay dng mot o th con T cua G nh sau:
au tien chon tuy y 1 nh cua G at vao T.
Qua trnh sau con thc hien trong khi T cha cha het cac nh cua G :
Moi bc, tm mot canh co trong so nho nhat noi 1 nh trong T vi 1 nh
ngoai T. Them canh nay vao T.
Ket thuc thuat toan Prim cho ta mot MST cua o th G.
Tnh tham lam cua thuat toan Prim la tai moi bc them vao T mot canh co
trong so nho nhat noi mot nh trong T va mot nh ngoai T.
3. Mo ta thuat toan
nput G = (V,E)
Output T = (V, .) la MST
Mo ta :
- Goi U la tap con cua V.
- Khi ong T = (U,.) = ; //o th con rong.
- Khi ong U = {1};
// Chon nh 1 at vao T.
- Trong khi ( U V )
Tm canh (u,v) co trong so nho nhat, vi u U va v U. Them nh v
nay vao U. Them (u,v) vao T .
Li giai cua bai toan la li giai toi u.
Minh hoa :
Xet o th sau :
Khoa Toan-Tin
- 91 -
3
4
7
Ap dung thuat toan Prim,bat au t nh 1,ta xay dng dan 1 MST cua o
th tren :
7
3
3
Hoat ong cua thuat toan :
Bc
0
1
2
3
4
5
6
Tap U
{1}
{1,2}
{1,2,3}
{1,2,3,4}
{1,2,3,4,5}
{1,2,3,4,5,7}
{1,2,3,4,5,7,6}
4. Cai at
e tien hanh cai at thuat toan, ta can mo ta d lieu .
o th co trong so co the bieu dien bi 1 ma tran ke cua no :
c = (c[i][j])nxn .
Khoa Toan-Tin
- 92 )
c[i ][ j ] = 0; i = j
; Ne) u (i, j ) kho)ng to) n tai;
Khoa Toan-Tin
- 93 -
}
}
ki .
2
10
3
3
ak
1
ak + a k
1
2
ak + ak + ak
1
2
3
5
5
10
10
3
3
5+10 = 15
5+3 = 8
10+5 = 15
10+3 = 13
3+5 = 8
3+10 = 13
5+10+3 = 18
5+3+10 = 18
10+5+3 = 18
10+3+5 = 18
3+5+10 = 18
3+10+5 = 18
D(b)
38
31
43
41
29
34
2. Thiet ke
Input :
Output :
Khoa Toan-Tin
- 94 -
j
Ta co nhan xet rang D(b) at min neu T = a ; j 1.. n at min .
j
k
i =1 i
Va Tj at Min neu trong moi bc i, a c chon vao la gia tr nho nhat cua day
k
4. Cai at
int record_greedy(int a[max],int b[max],int n)
{
int i,t= 0,min = 0;
int j,k,x;
for ( i = 1; i <= n; i++)
// Khi ong b
b[i] = i;
for (i = 1;i <=n; i++)
{
j = arcmin(a,n,i);
Doich(b[i],b[j]);
// Chnh xac lai b tai moi bc
Doicho(a[i],a[j]);
t += a[i];
min += t;
// Chnh xac dan min trong moi bc
}
return min;
}
Khoa Toan-Tin
- 95 -
Output
Thuat toan tham lam cho bai toan chon vat co gia tr giam dan (theo n
Khoa Toan-Tin
- 96 -
- b[i] b[j] ;
- // Cap nhat lai Vmax, Chon[ ], m;
if (m > w[b[i]])
{
Vmax += v[b[i]];
[b[i] = 1;
m -= w[b[i]];
}
- d[i] d[j] ;
}
* return max;
Minh hoa :
Vi n = 4; m = 17
i 1
w[i] 8
v[i] 8
n gia d[i] 1
Vat chon
theo thuat
toan [i]
Phng an x
toi u
2
10
12
6/5
x
3
9
10
10/9
4
5
4
4/5
x
Ttl : 15/17
Vmax = 16
Ttl : 17
Vmax = 18
4. Cai at
long MAX_GREEDY(long w[],long v[],int C[],int n,long m)
{
int i,j,k,b[max];
long Vmax = 0;
double d[max];
// Mang don gia
for (i = 1; i <= n; i++)
{
b[i]
= i;
C[i] = 0;
d[i] = (double)w[i]/v[i];
}
for(i = 1; i <= n && m > 0; i++)
{
j = arcmax(d,n,i);
dcn(b[i],b[j]); //oi cho
Khoa Toan-Tin
- 97 -
if (m > w[b[i]])
{
Vmax += v[b[i]];
C[b[i]] = 1;
m -= w[b[i]];
}
dct(d[i],d[j]); //oi cho
}
return Vmax;
}
Khoa Toan-Tin
- 98 -
minh hoa :
4
1
2
3
BAI TAP
Bai 1 :
Khoa Toan-Tin
- 99 -
Bai 4 :
Giai bai toan :
n
i vi max
i =1
n
i wi m
i =1
0 1; i = 1, n
i
Bai 5 :
Co n loai o vat, moi loai co so lng khong han che. o vat loai i, ac
trng bi trong lng wi va gia tr s dung vi, vi moi i {1,..,n}.
Can chon cac vat nay at vao mot chiec tui xach co gii han trong lng m,
sao cho tong gia tr s dung cac vat c chon la ln nhat.
Bai 6 :
Cho G = (V,E) la mot n o th lien thong .V = {1,.., n} la tap cac nh, E
la tap cac canh. Thuat toan Kruscal xay dng tap canh T cua cay bao trum nho
nhat
H = (V,T) theo tng bc :
- Sap E theo th t khong giam.
- Khi au T = ;
- Trong khi ( | T | < n 1)
{
Chon e la canh co trong so nho nhat trong E;
E = E \ {e};
if ( T {e} khong cha chu trnh )
T = T {e};
}
Bai 7 :
Cai at thuat toan to mau o th.
Khoa Toan-Tin
- 100 -
II. Thuat toan Floyd -Tm ng i ngan nhat gia cac cap nh
1. Bai toan
Cho G = (V,E) la mot n o th co hng co trong so. V = {1,..,n} la tap
cac nh. E la tap cac cung. Tm ng i ngan nhat gia cac cap nh cua o th .
Khoa Toan-Tin
- 101 -
2. Y tng
Thuat toan Floyd c thiet ke theo phng phap quy hoach ong. Nguyen
ly toi u c van dung cho bai toan nay la :
Neu k la nh nam tren ng i ngan nhat t i en j th oan ng t i
en k va t k en j cung phai ngan nhat.
3. Thiet ke
o th c bieu dien bi ma tran ke cac trong so cua cung : a = (aij )nxn .
Trong so (i, j); (i, j) E
Ta ky hieu :
- Ma tran trong so ng i ngan nhat gia cac cap nh : d = (dij)
dij : Trong so cua ng i ngan nhat t i en j.
- Ma tran xac nh cac nh trung gian cua ng i ngan nhat t i en j : p = (pij)
pij : ng i ngan nhat t i en j co i qua nh trung gian pij hay khong ?
pij = 0; ng i ngan nhat t i en j khong co i qua nh trung gian pij.
pij 0; ng i ngan nhat t i en j i qua nh trung gian pij.
- bc k :
- Ky hieu ma tran d la dk cho biet chieu dai nho nhat cua ng i t i en
j.
- Ky hieu ma tran p la pk cho biet ng i ngan nhat t i en j co i qua
nh trung gian thuoc tap nh {1,..,k}.
Input a
Output d,p;
Mo ta :
Bc 0 :
- Khi ong d : d = a ; (= d0 )
- Khi ong p : pij = 0;
Bc 1 :
Kiem tra moi cap nh i, j : Co/khong mot ng i t i en j i qua nh
trung gian 1, ma co trong so nho hn bc 0 ? Trong so cua ng i o la :
d1ij = Min{ d0ij , d0i1 + d01j }
Neu d1ij = d0i1 + d01j th p1ij = 1, tc la ng i tng ng i qua nh 1.
Bc 2 :
Kiem tra moi cap nh i, j : Co/khong mot ng i t i en j i qua nh
trung gian 2, ma co trong so nho hn bc 1? Trong so cua ng i o la :
d2ij = Min{ d1ij , d1i2 + d12j }
2
Neu d ij = d1i2 +d12j th p2ij = 2 : tc la ng i tng ng i qua nh 2.
Khoa Toan-Tin
- 102 -
...
C tiep tuc nh vay, thuat toan ket thuc sau bc n, ma tran d xac nh
trong so ng i ngan nhat gia 2 nh bat ky i, j. Ma tran p cho biet ng i
ngan nhat t i en j co i qua nh trung gian pij .
Minh hoa :
Tm ng i ngan nhat gia cac cap nh cua o th :
1
5
15
50
15
5
30
3
15
b2
d2
b3
d3
b4
d4 =
d
1
2
3
4
1
0
50
30
15
2
5
0
35
20
15
0
5
5
15
0
1
2
3
4
1
0
50
30
15
2
5
0
35
20
3
20
15
0
5
4
10
5
15
0
1
2
3
4
1
0
45
30
15
2
5
0
35
20
3
20
15
0
5
4
10
5
15
0
1
2
3
4
1
0
20
30
15
2
5
0
35
20
3
15
10
0
5
4
10
5
15
0
p =
p
1
2
3
4
1
0
0
0
0
2
0
0
1
1
3
0
0
0
0
4
0
0
0
0
1
2
3
4
1
0
0
0
0
2
0
0
1
1
3
2
0
0
0
4
2
0
0
0
1
2
3
4
1
0
3
0
0
2
0
0
1
1
3
2
0
0
0
4
2
0
0
0
1
2
3
4
1
0
4
0
0
2
0
0
1
1
3
4
4
0
0
4
2
0
0
0
Khoa Toan-Tin
- 103 -
4. Cai at
void floyd()
{
int i, j, k;
// Khoi dong ma tran d va p
for (i = 1; i<= n; i++)
for (j = 1; j<= n; j++)
{
d[i][j] = a[i][j];
p[i][j] = 0;
}
for (k = 1; k <= n; k++) // Tnh ma tran d va p bc lap k
for (i = 1; i <= n; i++)
if ( d[i][k] > 0 && d[i][k] < vc )
for (j = 1; j<= n; j++)
if ( d[k][j] > 0 && d[k][j] < vc )
if (d[i][k] + d[k][j] < d[i][j] )
{
d[i][j] = d[i][k] + d[k][j];
p[i][j] = k;
}
Ham xuat ng i ngan nhat t x en y cai at nh sau :
void xuatdd(int x, int y)
{
int r;
if ( p[x][y] == 0)
{
cout<<y<<" -> ";
return;
}
else
{
r = p[x][y];
xuatdd(x,r);
xuatdd(r,y);
Khoa Toan-Tin
- 104 -
}
}
B
140
C
4010
D
1025
30140 + 304010
401025 + 14025
30140 + 401025
14010 + 11025
+
+
+
+
Chi ph
301025 =
30125 =
304025 =
30125 =
20700
11750
41200
1400
Co the thay chi ph cho phep nhan cac ma tran phu thuoc vao cach to hp
cac ma tran .
2. Y tng
Ta giai bai toan bang cach tiep can t di len. Ta se tnh toan va lu tr li
giai toi u cho tng phan nho e tranh tnh toan lai cho bai toan ln hn.
Trc het la cho cac bo 2 ma tran, cac bo 3 ma tran . . .
Chang han, e tnh ABC ta co the tnh theo cac cach : (AB)C hoac
A(BC).
Nen chi ph e tnh ABC la chi ph tnh c t 2 phan :
Phan mot la chi ph kq1C, vi kq1 = AB ( chi ph nay a tnh va c
lu tr)
Phan hai la chi ph A kq2, vi kq2 = BC ( chi ph nay a c lu tr)
So sanh 2 phan tren va lu tr chi ph nho hn. . .
Khoa Toan-Tin
- 105 -
3. Thiet ke
Mau chot la tnh chi ph nhan bo cac ma tran : Ai...Aj , vi 1 i < j n,
trong o cac bo nho hn a c tnh va lu tr ket qua.
Vi mot cach to hp cac ma tran :
Ai...Aj = (Ai...Ak) (Ak+1...Aj)
Chi ph e nhan cac ma tran Ai,...,Aj se bang tong : Chi ph e nhan
Ai...Ak
( = kq1), chi ph e nhan Ak+1...Aj (= kq2), va chi ph kq1kq2.
Neu goi Mij la chi ph nho nhat e nhan bo cac ma tran Ai...Aj ,1 i < j
n, th:
* Mik la chi ph nho nhat e nhan bo cac ma tran Ai...Ak
* Mk+1,j la chi ph nho nhat e nhan bo cac ma tran Ak+1...Aj
V ma tran kq1 c di-1 dk va kq2 co c dk dj , nen chi ph e nhan
kq1kq2 la di-1dkdj.
Vay ta co :
M ij = Min {M ik + M k +1, j + d i 1 d k d j };1 i < j n
i k j 1
M ii = 0
Ta co the xem M la ma tran tam giac tren : (Mij)1i<jn . Ta can tnh va lam
ay cac phan t cua ma tran nay cho en khi xac nh c M1n . ng cheo chnh
bang 0 tat ca.
Tnh Mij , ta can biet Mik , Mk+1,j . Ta tnh bang doc theo cac ng cheo bat au t
ng cheo ke tren ng cheo chnh va thay oi ve hng goc phai tren.
Ta muon biet th t tot nhat e nhan day cac ma tran ( theo ngha chi ph
nho nhat). Moi lan ta xac nh c to hp tot nhat , ta dung bien k e lu tr th
t nay. o la Oij = k, vi M ik + M k +1, j + d i 1 d k d j at min.
j
0
M1n
0
i
Mij
0
( Bang tnh Mij )
Cac Mij ta lu tr trong mang 2 chieu M.
Cac ch so k e xac nh c Mij ta lu tr trong mang 2 chieu O.
Khoa Toan-Tin
- 106 -
M =
1200
0
700
400
0
1400
650
; O=
10000
1
2
1
3
3
5. Cai at
long MO(int d[max],int n, mat O, mat M)
{
int i, j, k, diag,min,csm;
for (i = 1; i <= n; i++)
M[i][i] = 0;
for (diag = 1; diag <= n-1; diag++)
for (i = 1; i <= n - diag; i++)
{
j = i + diag;
csm = i;
min = M[i][i]+M[i+1][j]+d[i-1]*d[i]*d[j];
for (k= i; k <= j - 1;k++)
if (min > (M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j] ))
Khoa Toan-Tin
- 107 -
}
M[i][j] = min;
O[i][j] = csm;
min = M[i][k]+M[k+1][j]+d[i-1]*d[k]*d[j];
csm = k;
}
return M[1][n];
Khoa Toan-Tin
- 108 -
nay, nhng phai thay oi chut t e phan anh c tnh chat cua cay
nh phan tm kiem bay gi : oi vi cac khoa ma xac suat tm kiem
ln hn phai tng ng vi ng i ngan hn.
Muon the, ta gan cho moi khoa ( nut ) mot so dng ma ta goi la trong so,
o la xac suat cua khoa nay trong tm kiem. T ay dan ti khai niem o dai ng
i co trong so cua cay (Weighted path tree):
o dai ng i (trong) co trong so cua cay la tong o dai ng i co
trong so ng vi moi nut tren cay.
o chnh la gia tr :
P =
pi hi
i =1
P = ai hi
i =1
Trong o :
hi la mc cua nut trong th i; i 1, n .
ai la tan suat xuat hien cua khoa ki ; i 1, n .
Cay nh phan tm kiem thoa man yeu cau nay goi la cay nh phan tm kiem
toi u.
2. Y tng
Ngi ta chng minh c rang so lng cac cay nh phan tm kiem n nut
co dang khac nhau, la :
1
C2nn
n +1
4n
3
n2
; (Khi n kha ln ).
Do o viec chon cay nh phan tm kiem toi u bang cach la chon trong cac
cay o mot cay co o dai ng i co trong so nho nhat, la kho thc hien khi n ln.
Ta co the ap dung phng phap qui hoach ong cho bai toan nay, v ta co the s
dung c nguyen ly toi u. o la v cay toi u co tnh chat ang chu y sau ay :
Khoa Toan-Tin
- 109 -
Mot cay la toi u th cac cay con cung la toi u. Tnh chat nay gi len mot thuat
toan :
Xuat phat t tng nut c xem nh cay con nho nhat, tm mot cach co he
thong cac cay ln hn . Nh the cay ln len t la ti goc .
Ki,...,Kk-1
at :
Kk+1,...,Kj
M ij = MinM i ,k 1 + a q + M k +1, j + a q + a k
ik j
q =i
q = k +1
= Min M i ,k 1 + M k +1, j + a q
ik j
q =i
ik j
q =i
M ii = ai .
Ta tnh Mij bang cach lap bang nh thuat toan nhan to hp nhieu ma tran.
e gi vet khoa c chon lam goc trong moi bc ta dung mot bang (ma tran )
root; root[i][j] la khoa chon lam goc cua cay con cha Ki,..., Kj.
Khoa Toan-Tin
- 110 -
j
1
2
Mij
0 a1
0 a2
0 a3
0
0
0 an
0
n
n+1
0 1
q =i
Khoa Toan-Tin
- 111 -
5. Cai at
double obst(double a[max],int n, mat root, mat M)
{
int i, j, k, diag,csm;
double min;
for (i = 1; i <= n; i++)
{
M[i][i] = p[i];
M[i][i-1] = 0;
root[i][i] = i;
}
M[n+1][n] = 0;
for (diag = 1; diag <= n-1; diag++)
for (i = 1; i <= n - diag; i++)
{
j = i + diag;
csm = i;
min = M[i][i-1] + M[i+1][j];
for (k= i; k <= j; k++)
if ( min > (M[i][k-1]+M[k+1][j]) )
{
min = M[i][k-1]+M[k+1][j];
csm = k;
}
root[i][j] = csm;
for (int q = i; q <= j; q++)
min += a[q];
M[i][j] = min;
}
return M[1][n];
}
Khoa Toan-Tin
1
3
1
2
5
5
3
1
3
- 112 4
3
5
5
5
3
6
5
1
7
3
4
3
3
3
1
1
1
5
2
5
3
3
3
5
5
5
2. Y tng
i {1, ,m}, j {1, ,n}, neu ta goi Lij la o dai cua day con dai nhat
cua a[1i] va b[1j] th khi o Lmn chnh la o dai cua day con dai nhat cua a va
b.
Vay ta can tnh cac Lij .
Mot cach tiep can t nhien cua thuat toan la t di len. Li giai toi u cua
cac day co o dai ngan hn se c tnh toan va lu tr lai e s dung lai viec xet
cac day co o dai dai hn.
3. Thuat toan
De thay la:
0; Neu a1 khong co trong b[1L j]
L1 j =
1; Ngc lai
Tng t :
0; Neu b1 khong co trong a[1L i]
Li1 =
1; Ngc lai
TH1 : ai bj .
* Neu ai b[1j] th ro rang la ai b[1j-1], nen : Lij = Li,j-1 .
* Neu bj a[1i] th ro rang la bj a[1i-1], nen : Lij = Li-1,j .
Vay ta co :
Lij = Max{Li , j 1 , Li 1, j , Li 1, j 1 + x}
Khoa Toan-Tin
- 113 -
1; Neu a i = b j
trong o : x =
0; Ngc lai
...
1
2
3
i
.
.
.
m
Lij
X
X
Lmn
Input a,b,m,n
Output L
Qhd(a,m,b,n,L)
for (i = 1; i <= m;i++)
if(b1 a[1..i])
Li1 = 1;
else
Li1 = 0;
for (j = 1; j <= n;j++)
if( a1 b[1..j])
L[1][j] = 1;
else
L[1][j] = 0;
for (i =2; i <= m; i++)
for(j = 2; j <= n; j++)
+ if(a[i] == b[j])
x = 1;
else
x = 0;
+ Lij = Max{Li , j 1 , Li 1, j , Li 1, j 1 + x} ;
Khoa Toan-Tin
- 114 -
return Lmn ;
Ghi chu :
e tm day c t ma tran L, ta xuat phat t o Lmn .
Gia s ang o Lij , va can xac nh ci . (1 i Lmn ).
Neu ai = bj th ci = ai , con ngc lai th Lij = Li,j-1 hoac Lij = Li-1,j .
Neu Lij = Li,j-1 ta i en o Li,j-1, con neu Lij = Li-1,j th i en o Li-1,j
Minh hoa :
Vi d lieu a, b nh tren, ta co :
L = (Lij )76
0
0
= 1
1
1
1
0
1
1
1
2
2
2
1
1
1
2
2
2
3
1
2
2
2
3
3
3
1
2
2
3
3
3
4
1
2
3
3 ;
3
3
4
c = ( 1, 5, 5, 3)
5. Cai at
int Bt_Dcnd(int a[MAX], int m, int b[MAX], int n, int L[MAX][MAX])
{
int i, j, x;
for (i = 1; i <= m;i++)
if( Thuoc(a,i,b[1] ))
L[i][1] = 1;
else
L[i][1] = 0;
for (j = 1; j <= n;j++)
if( Thuoc(b,j,a[1] ))
L[1][j] = 1;
else
L[1][j] = 0;
for (i =2; i <= m; i++)
for(j = 2; j <= n; j++)
{
if(a[i] == b[j])
x = 1;
Khoa Toan-Tin
- 115 -
else
x = 0;
L[i][j] = Max(L[i][j-1], L[i-1][j], L[i-1][j-1]+ x);
}
int k = L[m][n];
return k;
}
//*******************
void Dcdn(int a[MAX],int b[MAX],int m,int n,int L[MAX][MAX],int c[MAX], int
&l)
{
int i = m, j = n;
l = 0;
while ( i > 0 && j > 0)
{
if( a[i] == b[j])
{
l++;
c[l] = a[i];
i--; j--;
}
else
if(L[i][j] ==L[i][j-1])
j--;
else
i--;
}
for(i = 1; i <= l/2; i++)
Hv(c[i], c[l-i+1]);//oi cho.
}
Khoa Toan-Tin
- 116 -
1. Y tng
Gia s co mot chu trnh thoa yeu cau bai toan va bat au t nh 1 ve nh 1.
Khi o chu trnh nay bao gom cung (1,k), vi k V\{1}, va ng i t k en 1, i
qua moi nh con lai thuoc V\{1,k}, moi nh ung 1 lan.
Neu chu trnh nay co trong so nho nhat ( toi u ), th theo nguyen ly toi u
ng i t k en 1 cung co trong so nho nhat ( toi u ).
C ij = 0; i = j
; (i, j ) E
Khoa Toan-Tin
- 117 -
.
Bc n-2 :
- Vi S V\{1} va S= n-2; i 1 va i S :
d (i, S ) = Min{C ik + d (k , S \ {k})}
kS
Bc n-1 :
d (1, V \ {1}) = Min{C1k + d (k ,V \ {1, k})}
2 k n
Minh hoa :
Xet o th sau :
5
10
1
0 10 15 20
5 0 9 10
C=
6 13 0 12
8 8 9 0
* Khi S = :
d(2, ) = C 21 = 5
d(3, ) = C 31 = 6
15
3
8
2
20
12
9
10
4
13
d(4, ) = C 41 = 8
* Khi S la tap ch co 1 phan t 1va i (V\{1})\S
d(2,{3}) = C 23 + d(3, ) = C 23 + C 31 = 15
d(2,{4}) = C 24 + d(4, ) = 18
d(3,{2}) = C 32 + d(2, ) = 18
d(3,{4}) = C 34 + d(4, ) = 20
d(4,{2}) = C 42 + d(2, ) = 13
d(4,{3}) = C 43 + d(3, ) = 15
* Khi S la tap co 2 phan t 1 va i (V\{1})\S
d(2,{3,4}) = Min{ C 23 + d(3, {4}), C 24 + d(4,{3})} = 25
d(3,{2,4}) = Min{ C 32 + d(2, {4}), C 34 + d(4,{2})} = 25
d(4,{2,3}) = Min{ C 42 + d(2, {3}), C 43 + d(3,{2})} = 23
* Cuoi cung ta co:
d(1,{2,3,4})
Khoa Toan-Tin
- 118 -
Cach tm cac nh nam tren chu trnh co trong so nho nhat tng ng nh sau :
- Goi J(i,S) la nh lam cho Min{C ik + d (k , S \ {k})} at min.
kS
Ta co :
J(1,{2,3,4}) = 2
J(2,{3, 4})
= 4
J(4, {3})
= 3
Vay chu trnh ngan nhat la : 1 2 4 3 1
Do o :
n2
Mat khac khi tnh d(i,S) vi S gom k phan t, ta can thc hien k-1 phep so
sanh e xac nh min. Nen thi gian thc hien cua thuat toan la n 2 2 n .
BAI TAP
Bai 1 :
Cho mot bang ch nhat m hang, n cot. Moi o cua bang cha mot so nguyen
dng. Hay tm mot ng i t cot 1 en cot m, i qua ung m o sao cho tong
gia tr cac o la nho nhat.
Bai 2 :
Cho mot day so nguyen a1, a2, . .,an . Hay xoa mot so lng t nhat cac so
trong day sao cho day con lai ( van gi nguyen th t ) la mot day khong giam.
Bai 3 :
Cho n loai tien xu tng ng vi cac gia tr k1,k2,..,kn xu. Can oi T ong
(tien giay) ra tien xu sao cho so xu can dung la t nhat. Cho 1 ong bang 100 xu.
Bai 4 :
Cho n loai o vat, moi loai co so lng khong han che. Trong moi loai, cac
o vat co trong lng nh nhau va co gia tr nh nhau.
Vi moi i {1,..,n}, o vat loai th i co trong lng la wi va gia tr la pi .
Co mot chiec tui xach vi gii han trong lng la m.
Can chon cac vat t n loai o vat tren e at vao chiec tui xach sao cho thu
c chiec tui xach co gia tr nhat.
Bai 5 :
Khoa Toan-Tin
- 119 -
n + 1; m = 0, n N ;
Bai 6 :
Tnh :
1; i = 0, j > 0
p[i ][ j ] = 0; i > 0, j = 0
1
( p[i 1][ j ] + p[i ][ j 1]; i > 0, j > 0
2
Bai 7 :
T (n) = T (i )T (n i ); n N *
i =1
Bai 8 :
Cho a la mot day cac so nguyen dng.
Tm trong a mot day con giam dan dai nhat.
Bai 9 :
Cai at ham :
f(x,k) = So cach phan tch x thanh tong cac so nguyen to
ma moi so nguyen to xuat hien trong tong khong qua k lan.
Bai 10 :
Co n ngi xep hang mua ve xe. Trong hang, ta anh so theo th t t 1 en
n. Thi gian ban ve cho ngi th i la ti. Moi ngi can mua 1 ve nhng co the
c mua toi a 2 ve. Mot ngi co the mua ho cho ngi ng sau mnh. Ngi
th i mua ve ho cho ngi th i+1 th thi gian mua ve cho 2 ngi la ri.
Xac nh phng an sao cho n ngi eu co ve vi thi gian t nhat.
Khoa Toan-Tin
- 120 -
PHU LUC
D lieu s dung trong cac thuat toan c trnh bay trong giao trnh thng
c lu tr trong cac mang 1 chieu, mang 2 chieu vuong. e tranh viec nhap lieu
nhieu lan lam mat thi gian trong khi thc hanh, ong thi chuan b trc d lieu e
kiem tra ket qua thuat toan, cac d lieu au vao se c to chc va lu tr trong
cac tep van ban. Trong chng trnh the hien thuat toan, ch can viet them mot ham
chuyen d lieu t tep vao mang.
I. Mang 1 chieu :
1. nh dang :
- Dong 1 : n
( la mot so nguyen dng, ch kch thc s dung cua mang )
- Dong 2 :
Cac so ch cac phan t cua mang. Hai so tach biet bang 1 khoang trang.
2. Soan thao tep d lieu :
Co the s dung cac phan mem soan thao van ban trong che o khong nh
dang, nh NC, NOTEPAD, hoac cai at thanh mot ham rieng thc hien viec nhap
lieu t ban phm roi ghi vao tep.
3. Ham chuyen d lieu t tep van ban vao mang 1 chieu :
//oc d lieu t tep f, roi ghi vao day a.
void Tep_Day(char *f, Day a, int &n)
{
ifstream in(f);
if(!in)
{
cout<<"\nKhong mo duoc tep "<<f;
getch();
exit(1) ;
}
in>>n;
for( int i = 1; i <= n; i++)
in>>a[i];
in.close();
}
II. Mang 2 chieu vuong (ma tran vuong):
1. nh dang :
- Dong 1 : n
( la mot so nguyen dng, ch kch thc cua ma tran vuong)
- n dong tiep theo, moi dong n so .
Cac so ch cac phan t cua ma tran . Hai so tach biet bang 1 khoang trang.
2. Soan thao tep d lieu :
Nh mang 1 chieu.
Khoa Toan-Tin
- 121 -
Khoa Toan-Tin
- 122 -
Khoa Toan-Tin