You are on page 1of 122

Thiet ke va anh gia thuat toan

-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

Thiet ke va anh gia thuat toan

-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

Thiet ke va anh gia thuat toan

-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

Thiet ke va anh gia thuat toan

-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

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tm hieu c s phan tch o phc tap cua thuat toan.

Noi dung giao trnh gom 6 chng :


CHNG 1 : GII THIEU THIET KE VA ANH GIA THUAT TOAN.
Chng nay gii thieu khai niem trc quan cua thuat toan, ngon ng mo ta
thuat toan, phan tch thuat toan, cai tien thuat toan.
CHNG 2 : PHNG PHAP CHIA E TR
Chng nay trnh bay ky thuat thiet ke chia e tr, mo hnh thu tuc thng s
dung va cac bai toan minh hoa nh : bai toan MinMax, thuat toan Strassen ve nhan
ma tran, thuat toan tron trc tiep, . . .
CHNG 3 : PHNG PHAP QUAY LUI
Gii thieu mo hnh e quy quay lui va cac bai toan minh hoa nh : bai toan
nga i tuan, bai toan tam hau , cac bai toan to hp, cac thuat toan tm kiem
tren o th DFS, BFS. . .
CHNG 4 : PHNG PHAP NHANH CAN
Chng nay mo ta ky thuat anh gia nhanh can trong qua trnh quay lui e
tm li giai toi u cua bai toan. Cac bai toan dung e minh hoa nh bai toan
Ngi du lch , bai toan chiec tui xach .
CHNG 5 : PHNG PHAP THAM LAM
Gii thieu phng phap tm kiem nhanh li giai chap nhan c (va co the
la toi u) cua bai toan toi u. Cac bai toan minh hoa nh : bai toan Ngi du
lch, thuat toan Dijkstra tm ng i ngan nhat t mot nh en cac nh con lai
cua o th, bai toan chiec tui xach , . .
CHNG 6 : PHNG PHAP QUY HOACH ONG
Chng nay mo ta y tng, cac thao tac chnh s dung trong thuat toan quy
hoach ong. Cac bai toan minh hoa nh thuat toan Floyd tm ng i ngan nhat
gia cac cap nh cua mot n o th, bai toan nhan to hp cac ma tran, cay nh
phan tm kiem toi u ...

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

-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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

-8-

CHNG 1 : GII THIEU THIET KE, ANH GIA THUAT


TOAN
Thuat ng thuat toan (Algorithm ) la t viet tat cua ten mot nha toan hoc
the ky IX : Abu Jafa Mohammed ibn Musa al-Khowarizmi . au tien, thuat toan
c hieu nh la cac quy tac thc hien cac phep toan so hoc vi cac con so c
viet trong he thap phan. Cung vi s phat trien cua may tnh , khai niem thuat toan
c hieu theo ngha rong hn. Mot nh ngha hnh thc ve thuat toan c nha
toan hoc ngi Anh la Alanh Turing a ra vao nam 1936 thong qua may Turing.
Co the noi ly thuyet thuat toan c hnh thanh t o.
Ly thuyet thuat toan quan tam en nhng van e sau :
1. Giai c bang thuat toan : Lp bai toan nao giai c bang thuat toan,
lp bai toan khong giai c bang thuat toan.
2. Toi u hoa thuat toan : Thay nhng thuat toan cha tot bang nhng thuat
toan tot hn.
3. Trien khai thuat toan : Xay dng nhng ngon ng thc hien tren may tnh
e ma hoa thuat toan.
Hng nghien cu th 2 thuoc pham vi cua lnh vc phan tch thuat
toan : anh lng mc o phc tap cua thuat toan ; con hng th ba thng c
xep vao khoa hoc lap trnh.
Chng au tien cua giao trnh se gii thieu thuat toan theo ngha trc quan
va mot so khai niem m au ve phan tch va thiet ke thuat toan.

I. nh ngha trc quan ve Thuat toan


1. nh ngha
Thuat toan la mot day hu han cac thao tac c bo tr theo mot trnh t xac
nh, c e ra trc, nham giai quyet mot bai toan nhat nh.
- Thao tac , hay con goi la tac vu, phep toan ( Operation ) hay lenh
(Command), ch th (Instruction)...la mot hanh ong can c thc hien bi c che
thc hien thuat toan.
Moi thao tac bien oi bai toan t mot trang thai trc (hay trang thai
nhap) sang trang thai sau (hay trang thai xuat).Thc te moi thao tac thng s
dung mot so oi tng trong trang thai nhap (cac oi tng nhap )va san sinh ra
cac oi tng mi trong trang thai xuat (cac oi tng xuat). Quan he gia 2 trang
thai xuat va nhap cho thay tac ong cua thao tac. Day cac thao tac cua thuat toan
noi tiep nhau nham bien oi bai toan t trang thai ban au en trang thai ket qua.
Moi thao tac co the phan tch thanh cac thao tac n gian hn.
- Trnh t thc hien cac thao tac phai c xac nh ro rang trong thuat
toan. Cung mot tap hp thao tac nhng xep at theo trnh t khac nhau se cho ket
qua khac nhau.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

-9-

2. Cac ac trng c ban cua thuat toan


a) Tnh xac nh
Cac thao tac, cac oi tng, phng tien trong thuat toan phai co y ngha
ro rang, khong c gay nham lan. Noi cach khac, hai c che hoat ong khac nhau
(ngi hoac may...) cung thc hien mot thuat toan, s dung cac oi tng, phng
tien nhap phai cho cung mot ket qua.
b) Tnh dng (hay hu han)
oi hoi thuat toan phai dng va cho ket qua sau mot so hu han cac bc .
c) Tnh ung cua thuat toan
Thuat toan ung la thuat toan cho ket qua thoa man ac ta thuat toan vi
moi trng hp cua cac oi tng, phng tien nhap.
Thuat toan sai khi sai trong (t nhat ) mot trng hp.
d) Tnh pho dung
Thuat toan e giai mot lp bai toan gom nhieu bai toan cu the, lp o c
xac nh bi ac ta. D nhien co lp bai toan ch gom 1 bai. Thuat toan khi o se
khong can s dung oi tng, phng tien nhap nao ca.

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

II. Cac dang dien at thuat toan


Thuat toan co the dien at di nhieu hnh thc, chang han di dang lu
o, dang ngon ng t nhien, dang ma gia hoac mot ngon ng lap trnh nao o .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

2. Dang ngon ng t nhien


Thuat toan co the trnh bay di dang ngon ng t nhien theo trnh t cac
bc thc hien trong thuat toan .

3. Ngon ng lap trnh.


Dung cau truc lenh, d lieu cua mot ngon ng lap trnh nao o e mo ta.

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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 11 -

}
3. Cau truc re nhanh :
if (C)

if (C)
A

else

A
B

Trong o C la bieu thc logic, A va B la cac khoi lenh.


4. Cau truc chon :
bt

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

5. Lap vi kiem tra ieu kien trc (While).


Ma gia :
While C

A;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


6. Lap vi kiem tra ieu kien sau (do .. while).
Ma gia :
do
A;
while (C);

- 12 -

1 C

7. Lap vi so lan lap xac nh


Ma gia :
For (bt1;bt2;bt3)
A
Trong o :
- bt1 : Khi au gia tr bien ieu khien.
- bt2 : Bieu thc ieu kien, xac nh ieu
kien lap.
- bt3 : Khi au lai bien ieu khien
- A la khoi lenh.

bt1

bt2

1
A
bt3

8. Cau lenh vao ra :


oc : scanf(danh_sach_bien);
Viet : printf(Danh_sach_bien);
9. Cau lenh bat au va ket thuc :
{
...
}
10. Ham (Function):
Type ten_ham (Danh sach cac type va oi)
{
...
}
11. Li goi ham :
ten_ham (Danh sach cac tham so thc);
12. Cau lenh return
return (bt) : Gan gia tr bieu thc bt cho ham.

III. Thiet ke thuat toan


Thuat toan c thiet ke mot cach co cau truc, cong cu chu yeu la :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 13 -

1. Modul hoa va thiet ke t tren xuong (Top-Dow)


Cac bai toan giai c tren may tnh ngay cang phc tap va a dang. Cac
thuat toan giai chung ngay cang co quy mo ln oi hoi nhieu thi gian va cong sc
cua nhieu ngi. Tuy nhien cong viec se n gian hn neu nh ta chia bai toan ra
thanh cac bai toan nho. ieu o cung co ngha la neu coi bai toan la modul chnh
th can chia thanh cac modul con. en lt mnh cac modul con lai phan ra thanh
cac modul con thch hp...
Nh vay viec to chc li giai the hien theo mot cau truc phan cap :

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.

2. Phng phap lam mn dan (hay tinh che tng bc )


xuong.

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 14 -

Nan x thanh x theo cac quy tac (i-iii).


Mc 1 :
Do ten c tao bi cac t , nen nan ten th ta phai nan cac t. Ta nan tng
t trong ten cho en het cac t. Y tng muc 1 c lam mn hn nh sau :
Khi (con t w trong x) ta thc hien
Nan lai t w trong x;
at mot dau cach neu can;
Mc 2 :
Ta chi tiet hn thao tac :at mot dau cach neu can.
Ro rang dau cach noi ch at sau moi t, tr t cuoi cung. Nh vay sau khi
x ly xong t cuoi th ta khong at dau cach. Vay ta co the viet :
Khi (con t w trong x) ta thc hien
Nan lai t w trong x;
Neu w cha phai la t cuoi trong x th
at mot dau cach sau w;
Mc 3 :
e x ly d lieu c ro rang, tam thi ta coi ten ch la y va ten nguon la
x.
y = t rong;
Khi (con t w trong x) ta thc hien
Nan lai t w trong x;
Ghep w vao sau y;
Neu w cha phai la t cuoi trong x th
Ghep dau cach vao sau y;
Mc 4 :
Ta cu the hoa the nao la 1 t .
De thay la mot t w cua x la mot day ky t khong cha dau cach va c
chan au va cuoi bi dau cach hoac t rong.
Co the nhan dang c t w trong x bang thao tac n gian sau ay :
a) Vt day dau cach e en au t.
b) Vt day ky t khac dau cach e en het t.
Ta chu y rang tn hieu ket thuc cua x la ky t NULL. Ta co the viet ham nan
ten nh sau :
void Nanten(char x[])
{
char y[max];
int i;
y[0] = '\0';
// Vt day dau cach bien trai
i = 0;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 15 -

while (x[i] == cach )


i++;
//Cho ket qua : x[i] la au 1 t hay la x[i] = NULL
while (x[i] != NULL)
// Trng hp x[i] au 1 t
{
ghepkt(Hoa(x[i]),y); // Ky t au la Hoa
i++; //Sang than t hoac ri vao ket
while ((x[i] != cach )&& (x[i] != NULL)) // Than 1 t
{ // X ly than t
ghepkt(Thuong(x[i]),y); // Trong than t, KT viet thng
i++;
}
// X ly xong 1 t, tm en t tiep theo
while (x[i] == cach)
i++; // Vt dau cach sau 1 t
if (x[i] != NULL) // T va x ly cha phai la t cuoi
ghepkt(cach,y);
}
strcpy( y,x);
}
Mc 5 :
Ta viet them cac ham :
Hoa(char x) : oi ky t thng thanh Hoa;
Thuong(char x): oi ky t hoa thanh thng.
ghepkt (char ch, char y[ ]); Ghep ky t ch vao cuoi xau y, lu tr lai vao y.
Nhan xet rang khoang cach d = | A - a| ( = 32) chnh la o lech bo
ch hoa en ch thng.
Vay neu ch la ch thng th ch -d se la ma cua t hoa tng ng, va
ngc lai, neu ch la ch hoa th ch + d se la ma cua t thng tng ng. T o
suy ra cach cai at cac ham Hoa() va Thuong().
Con ham ghep(), Ch can xac nh cuoi cua y, sau o chep ch vao cuoi cua y
la xong.

3. Mot so phng phap thiet ke


Tren c s ly thuyet may Turing, ta chia c cac bai toan thanh 2 lp
khong giao nhau : Lp giai c bang thuat toan , va lp khong giai c bang
thuat toan.
oi vi lp cac bai toan giai c bang thuat toan, da vao cac ac trng
cua qua trnh thiet ke cua thuat toan, ta co the ch ra mot so cac phng phap thiet
ke thuat toan c ban sau ay :
a) Phng phap chia e tri. ( Divide-and-Conquer method ).
Y tng la : Chia d lieu thanh tng mien u nho, giai bai toan tren cac
mien a chia roi tong hp ket qua lai .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 16 -

Chang han nh thuat toan Quicksort.


b) Phng phap quay lui ( BackTracking method ).
Tm kiem theo u tien.
oi vi moi bc thuat toan, u tien theo o rong hay chieu sau e tm
kiem.
Chang han thuat toan giai bai toan 8 hau.
c) Phng phap tham lam ( Greedy Method ).
Y tng la : Xac nh trat t x ly e co li nhat, Sap xep d lieu theo trat t
o, roi x ly d lieu theo trat t a neu. Cong sc bo ra la tm ra trat t o.
Chang han thuat toan tm cay bao trum nho nhat (Shortest spanning
Trees).
d) Phng phap Quy hoach ong (Dynamic Programming method).
Phng phap quy hoach ong da vao mot nguyen ly, goi la nguyen ly toi
u cua Bellman :
Neu li giai cua bai toan la toi u th li giai cua cac bai toan con cung toi
u .
Phng phap nay to chc tm kiem li giai theo kieu t di len. Xuat phat
t cac bai toan con nho va n gian nhat, to hp cac li giai cua chung e co li
giai cua bai toan con ln hn...va c nh the cuoi cung c li giai cua bai toan
ban au.
Chang han thuat toan chiec tui xach (Knapsack).
e) Phng phap nhanh can ( branch-and-bound method ).
Y tng la : Trong qua trnh tm kiem li giai, ta phan hoach tap cac phng
an cua bai toan ra thanh hai hay nhieu tap con c bieu dien nh la cac nut cua
cay tm kiem va co gang bang phep anh gia can cho cac nut, tm cach loai bo cac
nhanh cua cay ma ta biet chac khong cha phng an toi u.
Chang han thuat toan giai bai toan ngi du lch.
. . .
Ta co the minh hoa bi hnh ve sau :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 17 -

IV. Phan tch thuat toan


Khi xay dng c thuat toan e giai bai toan th co hang loat van e c
at ra e phan tch. Thng la cac van e sau :
- Yeu cau ve tnh ung an cua thuat toan, thuat toan co cho li giai ung
cua bai toan hay khong ?
- Tnh n gian cua thuat toan. Thng ta mong muon co c mot thuat
toan n gian, de hieu, de lap trnh. ac biet la nhng thuat toan ch dung mot vai
lan ta can coi trong tnh chat nay, v cong sc va thi gian bo ra e xay dng thuat
toan thng ln hn rat nhieu so vi thi gian thc hien no.
- Yeu cau ve khong gian : thuat toan c xay dng co phu hp vi bo nh
cua may tnh hay khong ?
- Yeu cau ve thi gian : Thi gian chay cua thuat toan co nhanh khong ?
Mot bai toan thng co nhieu thuat toan e giai, cho nen yeu cau mot thuat toan
dan nhanh en ket qua la mot oi hoi ng nhien.
.......
Trong phan nay ta quan tam chu yeu en toc o cua thuat toan. Ta cung lu
y rang thi gian chay cua thuat toan va dung lng bo nh nhieu khi khong can oi
c e co mot giai phap tron ven. Chang han, thuat toan sap xep noi se co thi
gian chay nhanh hn v d lieu c lu tr trong bo nh trong, va do o khong phu
hp trong trng hp kch thc d lieu ln. Ngc lai, cac thuat toan sap xep
ngoai phu hp vi kch thc d lieu ln v d lieu c lu tr chnh cac thiet b
ngoai, nhng khi o toc o lai cham hn.

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

2. Cac ky hieu tiem can


a) Ky hieu O ln (big oh) :
nh ngha :
Cho ham f : N* N* . Ta nh ngha :
O(f(n)) = {t : N* N* | c R+ , n0 N, n n0 , t(n) cf(n)}
O(f(n)) goi la cap cua f(n).
Vi t : N* N*
t(n) O(f(n)) c R+ , n0 N, n n0 , t(n) cf(n) .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

3. Mot so lp cac thuat toan


Hau het cac thuat toan c gii thieu trong giao trnh nay tiem can ti mot
trong cac ham sau :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

4. Phan tch thuat toan e qui.


Phan ln cac thuat toan eu da tren s phan ra e qui mot bai toan ln
thanh cac bai toan nho, roi dung li giai cac bai toan nho e giai bai toan ban au.
Thi gian chay cua thuat toan nh the c xac nh bi kch thc va so lng cac

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

B. Dung phng trnh ac trng e giai phng trnh truy hoi :


B1) Phng trnh truy hoi tuyen tnh thuan nhat vi cac he so khong oi :
Xet phng trnh dang :
a0 t n + a1 t n1 + L + a k t nk = 0

(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)

Trong o cac t i , i = n, n 1,L , n k la cac an so.

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

c t n = ci X in , vi c1, c2, , ck la cac hang xac nh t k ieu kien ban au


i =1

la nghiem cua (3).


TH2 : Phng trnh (3 ) co nghiem boi.
- Gia s u la nghiem kep cua (3).
Vi n > k, xet a thc p bac n :
q ( X ) = a 0 nX n + a 1 (n 1) X n 1 + L + a k ( n k ) X n k = X ( X n k p ( X ))'
V u la nghiem kep cua (3), nen ton tai a thc r thoa :
p( X ) = ( X u ) 2 r ( X )
Khi o :
q ( X ) = X [ X n k ( X u ) 2 r ( X )]' = 0
Do o :
a 0 nu n + a 1 ( n 1)u n 1 + L + a k (n k )u n k = 0
Tc la : tn = nun cung la nghiem cua (1).

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 24 -

- Tong quat, neu u la nghiem boi m cua (3) th :


tn = u , nun, n2un, . . ., nm-1un cung la nghiem cua (1)
Khi o to hp tuyen tnh cua cac nghiem nay va cac nghiem khac cua
phng trnh ac trng (3) se la nghiem cua (1).
V du 1 :
T (n) 6T (n 1) + 8T (n 2) = 0

T (0) = 1
T (1) = 2

Xet phng trnh : T ( n) 6T ( n 1) + 8T ( n 2) = 0


at : Xn = T(n)
Ta co : X n 6 X n1 + 8 X n2 = 0
Phng trnh ac trng : X 2 6 X + 8 = 0
Co cac nghiem : X1 = 2, X2 = 4
Vay :
Do :

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 =

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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 :

5. Cac phep toan tren cac ky hieu tiem can


a) Phep toan cong :
( f(n)) + (g(n)) = Max(( f(n)) , (g(n))
Nhan xet :
- ( f(n)) + (g(n)) = ( f(n) + g(n)) = (Max(f(n),g(n))
- ac biet , Neu c la hang so , th :
( cf(n)) = ( f(n))
b) Phep toan nhan :
(f(n)) (g(n)) = (f(n)g(n))
ac biet :
( f(n)2 ) = ((f(n))2
c) Phep toan tch cc :
o la lenh trong thuat toan ma thi gian thc hien no khong t hn thi gian
thc hien cac lenh khac. Khi anh gia thi gian thc hien cua thuat toan, ta ch can
quan tam en cac bc thc hien cua phep toan nay.
V du : Sap tang dan cac phan t cua day so x.
Dung thuat toan chen trc tiep SIS (straight insertion Sort):
Y tng :
bc i , gia s day : x[1],..., x[i] a co th t. Tm v tr thch hp cua phan
t x[i+1] e chen no vao day x[1],..., x[i], ket qua la ta co day x[1],..., x[i+1] co th
t. Thc hien thao tac tren vi i = 1,2,,..., n-1.
Thuat toan :
for (i =1; i<= n-1; i++)
{
a = x[i+1];
x[0] = a;
j = i;
While (a < x[j])
{
x[ j+1] = x[ j];

Tran Tuan Minh

bien tam a nhan gia tr cua x[i+1]


Chuan b cho a tien ve trai (khi ong j
a con < x[j], a con tien ve trai
di gia tr ve phai

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


j = j-1;
}
x[j+1] = a;

- 26 Chuan b cho a tien tiep ve trai


a x[j]
Chen x[i+1] vao v tr thch hp - la sau
x[j].

}
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).

6. Phan tch trng hp trung bnh


Ta biet rang thi gian thc hien thuat toan khong phai ch phu thuoc vao
kch thc d lieu ma con phu thuoc vao tnh trang d lieu nhap na. Chang han,
khi xep tang dan mot day cac so nguyen, th cac so a co san th t tang dan, hoac
ngc lai, hoac ngau nhien.
Phan tren ta a xet trong nhng kha nang tot nhat hoac xau nhat cua thuat
toan .
Bay gi ta phan tch trong trng hp ngau nhien, tc la anh gia o phc
tap trung bnh thi gian thc hien thuat toan .
Viec anh gia trung bnh thng kho va phc tap oi hoi nhng cong cu
toan hoc tinh vi, hn na viec tnh trung bnh co the co nhieu cach quan niem khac
nhau. ay, viec anh gia o phc tap thuat toan trong trng hp trung bnh ta
da tren c s ly thuyet xac suat ( ri rac ) .
V du :
Xet thuat toan chen trc tiep .
Xet bc th i cua vong lap. Danh sach co i phan t a c sap. Phan t
x[i+1] co the chen vao i-1 khe gia cac x[j], j {1, i} va them 2 v tr au cuoi
na (Chen trc x[1] va chen sau x[i] ), tong cong la co i+1 v tr co the chen
x[i+1].
Gia s kha nang cua moi v tr c x[i+1] chen vao la ong eu. Tc la xac
1
suat cua moi v tr c x[i+1] chen vao la
.
i +1
Goi Xi la bien ngau nhien ch so lng cac phep toan so sanh can thiet e
x[i+1] chen vao v tr thch hp cua no trong moi bc. Ta co :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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 =

V. Toi u thuat toan


Tien trnh tong quat cua viec tao ra cac sa oi ngay cang tien bo hn cho
mot thuat toan e sinh ra mot phien ban khac chay nhanh hn c goi la toi u
thuat toan. Khi toi u mot thuat toan ta thng da vao mot nguyen ly, o la
nguyen ly Profile : Tm iem mat thi gian nhieu nhat cua thuat toan .
Mot so ky thuat sau thng dung e toi u thuat toan :

1. Ky thuat toi u cac vong lap

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Nen vong lap trong co the bo i v co the tnh

xi
theo cong thc tren. Vay
i!

thuat toan co the viet lai nh sau :


S = 1;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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;
}

Gia thiet n chan v ta dung bc nhay 2

2. Toi u viec re nhanh


-

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

Tran Tuan Minh

gt (n)
if (n == 0 || n == 1)
return 1;
else
return (n * gt(n-1)) ;

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 32 -

T (n) 3T (n 1)48T (n 2) = 0, n > 1

1. T (0) = 1
T (1) = 2

T (n) = n + 4T ( ), n > 1
2.
2
T (1) = 1

T (n) = T (n 1) + T (n 2), n > 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 ...)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 33 -

CHNG 2 : PHNG PHAP CHIA E TR


(Divide - and - conquer)

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 .

II. Thuat toan tm kiem nh phan.


1. Phat bieu bai toan
Cho mang n phan t a c sap tang dan va mot phan t x. Tm x co
trong mang hay khong ? Neu co x trong mang th cho ket qua la 1, ngc lai cho
ket qua 0.
Giai bang thuat toan tm kiem nh phan .

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]

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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) ;
}

4. o phc tap thi gian cua thuat toan


a) Trng hp tot nhat : tng ng vi s tm c x trong lan so sanh au
tien, tc la : a[Gia] == a[n/2] == x ( x nam v tr gia mang ).
Ta co : Ttot (n) = O(1).
b) Trng hp xau nhat : o phc tap la O(lg n).
That vay, Neu goi T(n) la o phc tap cua thuat toan , th sau khi kiem tra
ieu kien ( x == a[gia]) va sai th goi e qui thuat toan nay vi d lieu giam na,
nen thoa man cong thc truy hoi :
T(n) = 1 + T[n/2] ; n 2 va T[1] = 0.

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);
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 35 -

III. Bai toan MinMax


1. Phat bieu bai toan
Tm gia tr Min, Max trong oan a[l..r] cua mang a[1..n].

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

Tm gia tr Min, Max trong oan a[2..7] cua mang a[1..7] .


Ky hieu :
MinMax(a,l,r,Min,Max) cho Min va Max trong oan a[l..r].
MinMax(a,2,7,Min,Max) Cho Min = 0 va Max = 15 trong oan a[2..7]

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;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 36 -

4. o phc tap thuat toan


Goi T(n) la so phep toan so sanh can thc hien. Khi o ta co :
T (n 2) + T (n 2) + 2 ; n > 2

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

Vay T(n) O(n).

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;
}
}

IV. Thuat toan QuickSort


Dung thuat toan QuickSort (QS) e sap xep cac gia tr trong mot mang cac
so theo mot th t, chang han tang dan.
Phng phap QuickSort (hay con goi la phan oan) la mot cai tien cua
phng phap sap xep oi cho trc tiep, do C.A.R. Hoare e xuat.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Ket qua phan hoach day thanh 3 phan :


ak x vi k = 1, ...,j (Day con thap);
am x vi m = i, ...,n (Day con cao);
ah = x vi h = j+1,...,i - 1.
(V the phng phap nay con goi la sap xep bang phan hoach).
ak
am
x
Tiep tuc phan hoach cho phan trai (day con thap nho hn x), cho phan phai (
ln hn x) . . . cho en khi cac phan hoach ch con lai mot phan t, la sap xep xong.
Thuat toan the hien y tng e qui va cach thiet ke chia e tr.

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++;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 38 -

j--;
}

}
while (i <= j);
if (l < j)
QS(a,l,j);
if (r > i )
QS(a,i,r);

3. o phc tap cua thuat toan


ieu tot nhat co the xay ra trong QuickSort la moi giai oan phan hoach
phan chia mang thanh 2 na. ieu nay khien cho so lan so sanh can thiet cua
QuickSort thoa man cong thuc truy hoi chia e tr sau ay :
Tn = 2T n + n nLg n.
2

2T n : Ph ton sap xep 2 mang con.


2

n : Ph ton kiem tra moi phan t.


Trng hp xau nhat ng cho viec chon phan t x lai co gia tr ln nhat
hoac nho nhat trong day. Gia s phan t ln nhat c chon ( phan t x ), khi o
moi bc chia se chia n phan t thanh n-1 phan t trai va 1 phan t phai. Ket qua
la can ti n phep chia ( thay cho lgn), va nh the o phc tap se la T(n) = O(n2 ).
Trong trng hp day nhap vao a co th t (thuan hay ngc), phan t ln
nhat c chon se nam cac bien ( phai hoac trai), cho nen thuat toan QuickSort
khong co hieu qua.
Trong trng hp trung bnh :
Cong thc truy hoi e tnh so lan so sanh ma QuickSort can e hoan v
ngau nhien n phan t la :
1
Tn = (n + 1) +
(Tk 1 + Tn k ) ; Vi n 2; C0 = C1 = 1.
n 1 k n
Gia tr n+1 bao ham chi ph so sanh phan t phan hoach vi moi phan t
con lai, tong con lai mang y ngha la moi phan t k co the la phan t phan hoach
1
vi xac suat
va sau o con lai cac mang con co kch thc k-1 va n-k.
k
2 n
Tn = n + 1 + Tk 1
n k =1
Thc hien lien tiep cac phep toan sau cho ca 2 ve : Nhan cho n va tr cho
(n-1)Cn-1 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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 :

nTn ( n 1)Tn 1 = n( n + 1) n( n 1) + 2Tn 1

Suy ra :

nTn = ( n + 1)Tn 1 + 2n

Chia ca 2 ve cho n(n+1) :


Tn
T
T
2
2
2
2
2
2 2 T
= n 1 +
= n2 + +
=
+ L+ + + 1
n +1
n
n +1 n 1 n n +1
n +1 n
4 3 2
=

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

Nh vay, o phc tap trung bnh la O(nlnn)

V. Thuat toan nhan Strassen nhan 2 ma tran


1. Bai toan
Cho 2 ma tran vuong a, b cap n, n la luy tha 2.
Dung thuat toan Strassen nhan 2 ma tran vuong cap n.

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 :

C11 = A11B11 + A12B21


C12 = A11B12 + A12B22
C21 = A21B11 + A22B21
C22 = A21B12 + A22B22
Neu theo cach nhan thong thng, th cach chia e tr nay dan en cong
thc truy hoi : T(n) = 8T(n/2) + (n2 ). ang tiec la ket qua nay cho li giai T(n)
(n3 ).
Nhng theo kham pha cua Strasen, ch can 7 phep nhan e qui n/2 x n/2 ma
tran va (n2 ) phep cong tr vo hng theo cong thc truy hoi :
T(n) = 7T(n/2) + 18(n/2)2 O(nlg7) = O(n2.81).

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

- au tien tnh 7 tch :


m1 = (a12 - a22 ) (b21 + b22 )
m2 = (a11 + a22 ) (b11 + b22 )
m3 = (a11 - a21 ) (b11 + b12 )
m4 = (a11 + a12 ) b22
m5 = a11 (b12 b22 )
m6 = a22 (b21 b11 )
m7 = (a21 + a22 ) b11
- sau o tnh cij theo cong thc :
c11 = m1 + m2 m4 + m6
c12 = m4 + m5
c21 = m6 + m7
c22 = m2 m3 + m5 m7

Thuat toan co the viet nh sau :


strass(a, b, c, n)
if ( n == 2 )
nhan2(a,b,c);
else
{
tach(a,a11,a12,a21,a22,n);
tach(b,b11,b12,b21,b22,n);
tach(c,c11,c12,c21,c22,n);
strass(a11,b11,d1,n/2);
strass(a12,b21,d2,n/2);
cong(d1,d2,c11,n/2);
strass(a11,b12,d1,n/2);
strass(a12,b22,d2,n/2);
cong(d1,d2,c12,n/2);
strass(a21,b11,d1,n/2);
strass(a22,b21,d2,n/2);
cong(d1,d2,c21,n/2);
strass(a21,b12,d1,n/2);

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 41 -

strass(a22,b22,d2,n/2);
cong(d1,d2,c22,n/2);
Hop(c11,c12,c21,c22,c,n);
}

VI. Bai toan hoan oi 2 phan trong 1 day


1. Phat bieu bai toan
a[1..n] la mot mang gom n phan t. Ta can chuyen m phan t au tien cua
mang vi phan con lai cua mang ( n-m phan t) ma khong dung mot mang phu .
Chang han, vi n = 8, a[8] = (1, 2, 3, 4, 5, 6, 7, 8)
Neu m = 3, th ket qua la : ( 4, 5, 6, 7, 8, 1, 2, 3)
Neu m = 5, th ket qua la : ( 6, 7, 8, 1, 2, 3, 4, 5)
Neu m = 4, th ket qua la : ( 5, 6, 7, 8, 1, 2, 3, 4)

2. Y tng
* Neu
* Neu
-

m = n m: Hoan oi cac phan t cua 2 na mang co o dai bang nhau :


mnm:
Neu m = n m :
Neu m < n m : hoan oi m phan t au vi m phan t cuoi cua phan con
lai. Sau o trong mang a[1..n-m] ta ch can hoan oi m phan t au vi
phan con lai.
Neu m > n m : hoan oi n-m phan t au tien vi n-m phan t cua phan
sau. Sau o trong mang a[n-m+1 . . n] ta hoan oi n-m phan t cuoi mang
vi cac phan t cua phan au.

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 43 -

- Exchange(a,1,4,2)
4

Hoan oi
- Exchange(a,3,5,1)
4

Hoan oi

- Exchange(a,3,4,1)
4

- Ket thuc thuat toan.

4. o phc tap thuat toan


K hieu : T(i, j) la so phan t can oi cho e hoan oi day i phan t va day j
phan t, ta co cong thc truy hoi sau :

i; neu i = j

T (i, j ) = j + T (i j , j ); neu i > j


i + T (i, j 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;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


else
{

- 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]);
}

VII. Tron hai ng trc tiep


1. Bai toan
Sap tang dan day cac so bang thuat toan tron hai ng trc tiep.

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 46 -

- Khi ong lai p : p = p*2;


}
Mo ta tren co the viet thanh ham :
//F,n,F1,F2 la cac bien toan cuc
void mergesort ()
{
p = 1;
while ( p <= n )
{
distribution (p);
merge(p);
p = p * 2;
}
}
Nh vay, thuat toan chu yeu c xay dng tren 2 thao tac :
- distribution (p) : Phan bo luan phien p phan t t day F vao cac day trung gian
F1, F2 trong khi cha het day F.
- merge(p) : Tron tng cap p phan t trong F1, va p phan t trong F2, ket qua lu
tr vao F, trong khi cha het day F1 va cha het day F2;
a) Thuat toan phan bo
Phan bo luan phien p phan t t day F vao cac day trung gian F1, F2 cho
en het day F.
a1) Thiet ke :
Input F;
Output F1,F2;
Mo ta
Thc hien
{
oc tng p phan t trong F va chep luan phien vao F1, F2;
}
Trong khi ( cha het day F);
Trong mo ta tren, co 2 thao tac con can phai lu y :
Thao tac 1 :
Lam the nao e x ly mot cach t ong viec chep luan phien vao F1 va F2.
Ta thc hien bang cach : Dung mot khoa k, vi k {1,2} va quy nh :
Neu k = 1 th chep vao F1;
Neu k = 2 th chep vao F2;
Gia s au tien cho k = 1 e quyet nh chep p phan t cua F vao F1 trc.
Sau moi lan chep xong p phan t, ta ch can khi ong lai gia tr k = 3-k .
Thao tac 2 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 47 -

oc p phan t cua F chep vao F1 nh the nao ? Ta oc tng phan t cua F


va chep phan t o vao F1; Viec oc chep tng phan t nay con c thc hien
trong khi cha u p phan t va cha het day F.
Vay thao tac phan bo co the mo ta chi tiet nh sau :
do
{
i = 1;
while ( i <= p && cha het day F )
{
oc phan t th i trong F;
if ( k == 1)
chep vao F1;
else
chep vao F2;
i++;
}
k = 3-k;
}
while ( cha het day F);
Thao tac phan bo cai at thanh mot ham nh sau :
//F, F1, F2, n, h1,h2 la cac bien toan cuc.
void distribute(int p)
{
int i, k=1, l = 1;
h1 = 0; h2 = 0;
do
{
i = 1;
while( i<=p && l <= n)
{
if(k==1)
{
h1++;
F1[h1] = F[l];
}
else
{
h2++;
F2[h2] = F[l];
}
i++;
l++;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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++;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 50 -

while(i2 <= h2)


{
h++;
b[h] = b2[i2];
i2++;
}
n = h;

4. o phc tap thuat toan


Ta nhan xet rang, trong phng phap sap xep bang tron hai ng trc tiep,
so lng cac bc sao chep cac phan t t day nay sang day kia con ln hn so
lng cac bc so sanh gia cac phan t : V ng vi mot lan so sanh th co mot
thao tac sao chep, nhng neu mot day nao o x ly can (het day) th phan uoi cua
day con lai c sao chep ma khong ng vi mot phep so sanh nao. V the, oi vi
phng phap nay, ta chon phep sao chep lam can c anh gia thi gian thc hien
cua thuat toan.
Trong moi lan phan bo va tron th toan bo n phan t c duyet qua, so sanh
va chep vao day ch (output). Nh vay thi gian chi ph cho moi bc co cap la
O(n).
V trong moi bc (bc th k) ta giai quyet c 2k = p gia tr va tien trnh
dng khi p n,nen
ta co lgn bc, do o cap thi gian chi ph cho phng phap
nay la O(nlgn).
Mot nhc iem cua phng phap sap xep bang kieu tron
hai ng trc
tiep la chi ph cho khong gian qua ln: no oi hoi cung cap vung nh 2n phan t,
gap oi so vi phng phap thong thng. Do o phng phap nay ch thch hp khi
ta thao tac tren cac tep.
Mat khac, phng phap sap xep kieu tron hai ng trc tiep co mot nhc
iem quan trong na la no t gii han so lng cac gia tr co nh la 1,2,4,..,2k,
trong o 2k < n.
Nh vay ta luon luon phai duyet qua k bc chia va tron. Neu
cho phep so lng cac phan t trong mot lan tron co kch thc khac th so cac bc
co the giam i va trong trng hp nay viec sap xep co kha nang ket thuc sm.

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)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 51 -

Kq = nhan(a,c)*10n + nhan(a,d)*10n/2 + nhan (b,c)*10n/2 + nhan(b,d);


Bai 2 :
Thuat toan nhan 2 so nguyen n bit.
Gia s x va y la 2 so nguyen n bit. Ky thuat chia e tr cho phep nhan
xy la tach x, y ra 2 so nguyen n/2 bit :
x

a
n/2 bit trai
c

b
n/2 bit phai
d

va tnh theo cong thc :


x*y = a*c*2n + ( (a-b)*(d-c) + a*c + b*d)*2n/2 + b*d
Ghi chu :
- Tach bit : Copy cac bit.
- Nhan 2n cho a : Dch chuyen trai a n bit.
Bai 3 :
Cho x, s, n Z+. Gia s

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.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


t 1
oi 1
2
2
1

t
1
2
3
4

Tran Tuan Minh

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

Thiet ke va anh gia thuat toan

- 53 -

CHNG 3 : PHNG PHAP QUAY LUI


(Back Tracking)
I. M au
1. Y tng
Net ac trng cua phng phap quay lui la cac bc hng ti li giai cuoi
cung cua bai toan hoan toan c lam th.
Tai moi bc, neu co mot la chon c chap nhan th ghi nhan lai la chon
nay va tien hanh cac bc th tiep theo. Con ngc lai khong co la chon nao thch
hp th lam lai bc trc, xoa bo s ghi nhan va quay ve chu trnh th cac la
chon con lai.
Hanh ong nay c goi la quay lui, thuat toan the hien phng phap nay
goi la quay lui.
iem quan trong cua thuat toan la phai ghi nh tai moi bc i qua e tranh
trung lap khi quay lui. De thay la cac thong tin nay can c lu tr vao mot ngan
xep, nen thuat toan the hien y thiet ke mot cach e quy.

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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 54 Ghi nhan trang thai mi;


if( i < n)
Try(i+1);
else
Ghi nhan nghiem;
Tra lai trang thai cu cho bai toan;

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.

II. Bai toan Nga i tuan


1. Phat bieu bai toan
Cho ban c co n x n o . Mot con nga c phep i theo luat c vua, au
tien c at o co toa o x0 , y0 .
Van e la hay ch ra cac hanh trnh (neu co) cua nga o la nga i qua
tat ca cac o cua ban c, moi o i qua ung mot lan .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 55 -

2. Thiet ke thuat toan


Cach giai quyet ro rang la xet xem co the thc hien mot nc i ke na hay
khong. S o au tien co the phat thao nh sau :
Try(i)
for ( j = 1 k)
If ( xi chap nhan c kha nang k)
{
Xac nh xi theo kha nang k;
Ghi nhan trang thai mi;
if( i < n2 )
Try(i+1);
else
Ghi nhan nghiem;
Tra lai trang thai cu cho bai toan;
}
e mo ta chi tiet thuat toan, ta phai qui nh cach mo ta d lieu va cac thao
tac, o la :
- Bieu dien ban c .
- Cac kha nang cho la cho xi ?
- Cach thc xac nh xi theo j.
- Cach thc gi nhan trang thai mi, tra ve trang thai cu.
- Ghi nhan nghiem.
. . .
* Ta se bieu dien ban c bang 1 ma tran vuong cap n : int h[n][n];
S d the hien moi o c bang 1 so nguyen thay cho gia tr boole (e anh
dau o a c i qua cha) la v ta muon lan do theo qua trnh di chuyen cua con
nga.
Ta qui c nh sau :
h[x][y] = 0 O <x,y> nga cha i qua;
h[x][y] = i O <x,y> nga a i qua bc th i (1 i n2 ).

* 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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


Toa
o
(a,b)
(-2,-1)

(-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
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

* Vi n = 5, cac toa o xuat phat sau khong co li giai : (2,3), (3,2)...

III. Bai toan 8 hau


1. Phat bieu bai toan
TAM QUAN HAU C AT LEN BAN C VUA
sao cho chung khong an c nhau .
Bai toan nay la mot v du noi tieng ve viec dung cac phng phap th va sai
va phng phap quay lui.

2. Thiet ke thuat toan


Mau chot cua thuat toan ro rang la xet xem co the at quan hau tiep theo
nh the nao. Theo luat c vua, mot quan hau co the an cac quan khac neu nam tren
cung 1 ng, ng nay co the la :
- Hang,
- Cot,
- Cac ng cheo (i qua toa o v tr cua hau).
Suy ra rang moi hang ch co the cha 1 va ch 1 quan hau. Nen viec chon v
tr cho quan hau th i co the gii han c hang th i. Nh the tham so i tr
thanh ch hang, va qua trnh chon v tr cho quan hau tien hanh tren toan gia tr co
the co cua cac cot j.
Ta quy c :
x[i]
// Ch quan hau th i : nam hang i.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 59 -

Con ieu kien an toan la o co toa o ( i, j ) nam hang va cac ng cheo


cha b chiem (c the hien bang tr True). Do o, co the c the hien bi bieu
thc logic :
a[ji ] && b[ i + j ] && c[ i - j ]
Try(i)
{
for (j = 1; j <= 8; j++)
if (a[j] && b[i+j] && c[i-j])
{
x[i] = j;
a[j] = 0;
b[i+j] = 0;
c[i-j] = 0;
if (i < 8 )
try (i+1);
else
Xuat(x);
/* Sau khi in 1 li giai xong,tra lai tnh trang ban au con trong cho hang
a[j],
ng cheo i+j va ng cheo i-j, e tm li giai khac */
a[ j ] = 1;
b[i+j] = 1;
c[i-j] = 1;
}
}
Ghi chu :
Thuat toan nay tm c tat ca 92 li giai. Thc ra la ch co 12 li giai
khac nhau that s, o la v thuat toan khong ghi nhan tnh oi xng.

IV. Bai toan liet ke cac day nh phan o dai n


1. Phat bieu bai toan
Liet ke cac day co chieu dai n di dang x1x2...xn , trong o xi { 0,1 }.

2. Thiet ke thuat toan


Ta co the s dung s o tm tat ca cac li giai cua bai toan.Ham Try(i) xac
nh xi, trong o xi ch co 1 trong 2 gia tr la 0 hay 1. Cac gia tr nay mac nhien
c chap nhan ma khong can phai thoa man ieu kien g. Nen Ham try(i) co the
viet nh sau :
Try ( i)
for (j = 0; j <= 1; j++)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

V. Bai toan liet ke cac hoan v


1. Phat bieu bai toan
Liet ke cac hoan v cua n so nguyen dng au tien.

2. Thiet ke thuat toan


Ta bieu dien cac hoan v di dang a1 ... an ; ai {1,..,n} va ai aj neu i
j. Vi moi i, ai chap nhan gia tr j neu j cha c s dung, va v vay ta can ghi
nh j a c s dung hay cha khi quay lui. e lam ieu nay ta dung mot day cac
bien logic bj vi quy c :
1; neu j cha s dung
j = 1, n : b j =
0; neu ngc lai.
Sau khi gan j cho ai , ta can ghi nh cho bj ( bj = 0) va phai tra lai trang thai
cu cho bj ( bj = True) khi thc hien viec in xong mot hoan v.
Ta chu y rang day cac bien bj se c khi ong bang 1
Thuat toan co the viet nh sau :
Try( i)
{
for ( j = 1; j <= n; j++)
if ( b[j])
{
a[i] = j;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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
}

VI. Bai toan liet ke cac to hp


1. Phat bieu bai toan
Liet ke cac to hp chap k trong n phan t.

2. Thiet ke thuat toan


Ta se bieu dien to hp di dang x1...xk ; Trong o :
1 x1 < x2 < . . < xk n.
Ta nhan xet rang vi moi j {1,..n}:
xi chap nhan j j { ci-1+1, . ., n-k+i}.
Cac gia tr j thoa ieu kien tren mac nhien c chap nhan, nen ta khong
can dung cac bien booole e ghi nh na.
Thuat toan co the viet nh sau :
Try( i)
for ( j = 1; j <= n ; j++)
if( x[i-1] + 1 <= j <= n - k + i )
{
x[i] = j;
if (i < k)
Try(i+1);
else
Xuat(x);
}

VII. Bai toan tm kiem ng i tren o th


1. Phat bieu bai toan
G = (V, U) la n o th (co hng hoac vo hng). V = {1,. ., n} la tap cac
nh, U la tap canh (cung). Vi s, t V, tm tat ca cac ng i t s en t.
Cac thuat toan tm kiem c ban :
Thut toan DFS : Tm kiem theo chieu sau.
Thut toan BFS : Tm kiem theo chieu rong.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 62 -

2. Thuat toan DFS ( Depth First Search)


a) Y tng
Thuat toan DFS tien hanh tm kiem trong o th theo chieu sau. Thuat toan
thc hien viec tham tat ca cac nh co the at c cho ti nh t t nh s cho
trc. nh c tham cang muon se cang sm c duyet xong (c che LIFO
Vao Sau Ra Trc). Nen thuat toan co the to chc bang mot thu tuc e quy quay
lui.
b) Mo ta thuat toan
Input G = (V,U), s, t
Output Tat ca cac ng i t s en t (neu co).
DFS ( int s)
for ( u = 1; u <= n; u++)
{
if (chap nhan c)
{
Ghi nhan no;
if (u t)
DFS(u);
else
In ng i;
bo viec ghi nhan;
}
}
c) Cai at
Ta can mo ta d lieu o th va cac menh e c phat bieu trong mo hnh.
Ma tran se c bieu dien bang ma tran ke :
1; (i, j ) U
aij =
0; (i, j ) U
Ghi nhan nh c tham e tranh trung lap khi quay lui bang cach anh
dau. Ta s dung mot mang mot chieu Daxet[] vi qui c :
Daxet[u] = 1 , u a c tham.
Daxet[u] = 0 , u cha c tham.
Mang Daxet[] luc au khi ong bang 0 tat ca.
ieu kien chap nhan c cho nh u chnh la u ke vi v (avu = 1) va u cha
c tham ( Daxet[u] = 0).
e ghi nhan cac nh trong ng i, ta dung mot mang mot chieu Truoc[ ],
vi qui c :
Truoc[u] = v v la nh ng trc nh u, va u ke vi v
Ta khi ong mang Truoc[ ] bang 0 tat ca.
Thuat toan co the viet lai nh sau :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


s = 1, t = 4
4 1
4 7 1

- 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

3. Thut toan BFS ( Breadth First Search)


a) Y tng
Thuat toan BFS tien hanh tm kiem tren o th theo chieu rong. Thuat toan
thc hien viec tham tat ca cac nh co the at c cho ti nh t t nh s cho
trc theo tng mc ke. nh c tham cang sm th se cang sm c duyet xong
(c che FIFO Vao Trc Ra Trc).
b) Mo ta thuat toan
Input G = (V,E),
s, t V;
Output
ng i t s en t.
Mo ta :
- Bc 0 : A0 = {s}.

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 :
-

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Trong thuat toan BFS, nh c tham cang sm se cang sm tr thanh


duyet xong, nen cac nh c tham se c lu tr trong hang i queue. Mot
nh se tr thanh duyet xong ngay sau khi ta xet xong tat ca cac nh ke cua no .
Ta dung mot mang logic Daxet[ ] e anh dau cac nh c tham, mang
nay c khi ong bang 0 tat ca e ch rang luc au cha nh nao c tham.
Mot mang truoc[ ] e lu tr cac nh nam tren ng i ngan nhat can tm
(neu co), vi y ngha Truoc[i] la nh ng trc nh i trong ng i. Mang
Truoc[ ] c khi ong bang 0 tat ca e ch rang luc au cha co nh nao.
o th G c bieu dien bang ma tran ke a= (auv)nxn
1; (u, v) E ;
auv =
trong o :
0; (u , v) E;
Hang i queue ta cai at bang mang . Thuat toan c cai at nh sau :
BFS(s)
int u, j, dauQ = 1, cuoiQ = 1;
queue[cuoiQ] = s;
Daxet[s] = 1;
while ( dauQ <= cuoiQ)
{
u = queue[dauQ];
dauQ++;
for ( j = 1; j <= n; j++)
if( a[u][j] == 1 && !Daxet[j] )
{
cuoiQ++;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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 :

Cho G = (V,E) la mot n o th, khong co trong so, trong o V= {1,.., n}


la tap nh, E la tap canh ( hay cung).
1. Xac nh so thanh phan lien thong cua G.
2. Xuat cac nh nam trong trong moi thanh phan lien thong.
Bai 10 :
Tren mot manh at hnh vuong, ta chia thanh n x n o, moi o ta ghi mot so la
0 hoac 1. O mang so 0 ta ao ao, mang so 1 ta trong co. Hai o trong co co canh lien
nhau c xem la cung nam trong bon co. Hay xac nh dien tch cua bon co ln
nhat ( theo ngha co so o nhieu nhat ).

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 69 -

CHNG 4: PHNG PHAP NHANH CAN


(Branch And Bound)
I. M au
1. Y tng
Phng phap quay lui, vet can co the giai cac bai toan toi u, bang cach la
chon phng an toi u trong tat ca cac li giai tm c. Nhng nhieu bai toan
khong gian cac li giai la qua ln, nen ap dung phng phap phap quay lui kho
am bao ve thi gian cung nh ky thuat. Cho nen ta can phai cai tien thuat toan
quay lui e han che bt viec duyet cac phng an. Co nhieu cach cai tien, trong o
co phng phap nhanh can.
Phng phap nhanh can la mot cai tien cua phng phap quay lui, dung e
tm li giai toi u cua bai toan. Y tng chnh cua no nh sau :
Trong qua trnh duyet ta luon gi lai mot phng an mau ( co the xem la li
giai toi u cuc bo chang han co gia nho nhat tai thi iem o ). anh gia nhanh
can la phng phap tnh gia cua phng an ngay trong qua trnh xay dng cac
thanh phan cua phng an theo hng ang xay dng co the tot hn phng an mau
hay khong. Neu khong ta la chon theo hng khac.

2. Mo hnh
Gia s bai toan toi u cho la :
Tm Min{f(x) : x D};
n

Vi X = a = (a1 , L, a n ) Ai : P( x) ; Ai < ; i = 1, n . P la mot tnh


i =1

chat tren

A .
i

i =1

Nghiem cua bai toan neu co se c bieu dien di dang :x = (x1,...,xn)


Trong qua trnh liet ke theo phng phap quay lui, ta xay dng dan cac
thanh phan cua nghiem.
Mot bo phan i thanh phan (x1, .., xi) se goi la mot li giai (phng an) bo
phan cap i. Ta goi Xi la tap cac li giai bo phan cap i, i = 1, n .
anh gia can la tm mot ham g xac nh tren cac Xi sao cho :
g ( x1 ,L, xi ) Min{ f (a) : a = (a1 ,L, a n ) X , xi = ai , i = 1, i}
Bat ang thc nay co ngha la gia tr g ( x1 , L , xi ) khong ln hn gia tr cua

cac phng an m rong t li giai bo phan ( x1 ,L, xi ) .

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}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

li giai toi u cua bai toan.


Thu tuc quay lui sa lai thanh thu tuc nhanh can nh sau :
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
}
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 ?

II. Bai toan ngui du lch


1. Bai toan
Mot ngui du lch muon tham quan n thanh pho T1,.., 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 1 lan roi quay tr lai thanh pho xuat phat.
Goi Cij la chi ph i t thanh pho Ti en Tj . Hay tm mot hanh trnh thoa yeu
cau bai toan sao cho chi ph la nho nhat.

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 71 -

Tm Min{f(a2,.., an ) : (a2,.., an ) la hoan v cua {2,..,n}}.


Vi f ( a1 , L , a n ) = C1,a2 + C a2 ,a3 + L + C an 1 ,an + C an 1
Cach giai bai toan se ket hp anh gia nhanh can trong qua trnh liet ke
phng an cua thuat toan quay lui.

3. Thiet ke
Input
Output

C = (Cij )
- x* = (x1,...,xn)
- f* = f(x*)

// Hanh trnh toi u


// Gia tr toi u

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

ieu kien chap nhan c cua j la thanh pho Tj cha i qua.


Ta dung mot mang logic Daxet[] e bieu dien trang thai nay
1; T j a c i qua
Daxet[ j ] =
0; T j cha c i qua
Mang Daxet[ ] phai c bang 0 tat ca.
Xac nh xi theo j bang cau lenh gan : xi = j

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 72 -

Cap nhat trang thai mi : Daxet[j] = 1.


Cap nhat lai chi ph sau khi tm c xi : S = S+ C xi 1xi

Try(i)

Cap nhat li giai toi u :


Tnh chi ph hanh trnh va tm c :
Tong = S + C xn 1 ;
Neu (Tong < f*) th
Lgtu = x;
f* = Tong;
Thao tac huy bo trang thai : Daxet[j] = 0.
Tra lai chi ph cu : S = S- C xi 1xi
Thu tuc nhanh can viet lai nh sau :

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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]];

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

}
else
{

- 74 -

if(Tong < Gttu)


{
Gan(Httu,x,n);
Gttu = Tong;
}

g = S + (n-i+1)*Cmin; //Danh gia can


if ( g < Gttu)
Try(i+1);

}
S = S - C[x[i-1]][x[i]];
Daxet[j] = 0;
}

Khi ong cac bien :


void Init()
{
int i, j;
Cmin = VC;//Chi phi nho nhat giua 2 thanh pho
for(i = 1; i <= n; i++)
Daxet[i] = 0;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
if(Cmin>C[i][j])
Cmin = C[i][j];
Gttu = VC;//Gia tri toi uu f*
S = 0;
x[1] = 1; // Xuat phat tu dinh 1
}

III. Bai toan cai tui xach


1. Bai toan
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.

2. Y tng

va :

at : D = u = (u1 , L, u n ) N n : u i wi m
i =1

+
f :DR

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 75 n

(u1 , L , u n ) a f (u1 , L , u n ) = u i vi ; (u1 ,L, u n ) D


i =1

Bai toan chiec tui xach chuyen ve bai toan sau :


Tm x* D : f* = f(x*) = { f (u ) : u D}
Cho nen ta se ket hp anh gia nhanh can trong qua trnh liet ke cac li giai
theo phng phap quay lui.

3. Thiet ke thuat toan


Mo hnh ban au co the s dung nh sau :
Try(i)
for(j = 1 t)
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 tren g;
if( g(x1,..., xi) f*)
Try(i+1);
}
Tra lai trang thai cu cho bai toan;
}
Cach chon vat :
v
v
Xet mang n gia : Dg = 1 , L, n
wn
w1
Ta chon vat theo n gia giam dan.
Khong mat tnh tong quat, ta gia s cac loai vat cho theo th t giam dan
cua n gia.
anh gia can tren :
Gia s a tm c li giai bo phan : (x1 ,L, xi ) . Khi o :
- Gia tr cua tui xach thu c : S =

x v
j =1

= S + xjvj.

- Tng ng vi trong lng cac vat a c xep vao chiec tui :


TL=

x w
j =1

= TL + xiwi .

- Do o, gii han trong lng cua chiec tui con lai la : m TL = m -

x w
j =1

Ta co :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Do o, can tren cho cac li giai bo phan cap i co the xac nh bi :


m
g ( x1 ,L, xi ) = S + vi +1 * i
wi +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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

}
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

Tran Tuan Minh

2
3
5

3
2
3

4
4
6

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Cat 2 nhanh nay v :

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
{

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

}
else
{

- 79 -

if(S > Gttu)


{
Gan();
Gttu = S;
}

g = S + v[i+1]*(m-Tl)/w[i+1]; //Danh gia can


if ( g > Gttu)
Try(i+1);

}
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 :

Cho 3 ky t A, B, C va n la mot so nguyen dng.


Xac nh chuoi thoa tao ra t 3 ky t tren, vi chieu dai n, thoa ieu kien
khong co 2 chuoi con lien tiep nao giong nhau va sao cho so ky t B la t nhat.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 81 -

CHNG 5: PHNG PHAP THAM LAM


(The greedy method)

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};
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 82 -

return S;

II. Bai toan ngi du lch


1. Bai toan
Mot ngui du lch muon tham quan n thanh pho T1,.., 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 1 lan roi quay tr lai thanh pho xuat phat.
Goi Cij la chi ph i t thanh pho Ti en Tj . Hay tm mot hanh trnh thoa yeu
cau bai toan sao cho chi ph la nho nhat.

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

Tran Tuan Minh

2
4

2
7

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 83 -

1. TOUR := 0; COST := 0; u := 1;
w = 2;

1
1

2. TOUR := <1,2>; COST := 1; u := 2;

w = 5;

1
5

3. TOUR := {<1,2>, <2,5>}


COST := 4; u := 5;
1

w = 3;

4. TOUR := {<1,2>, <2,5>,<5,3>}


COST := 6; u := 3;

2
3
1

w = 4;

1
5

3
2
3
4

5. TOUR := {<1,2>, <2,5>,<5,3>,<3,4>}


COST := 7; u = 1;
TOUR := {<1,2>, <2,5>,<5,3>,<3,4>,<4,1>}
COST := 14

4. o phc tap cua thuat toan


Thao tac chon nh thch hp trong n nh c to chc bang mot vong lap
e duyet. Nen chi ph cho thuat toan xac nh bi 2 vong lap long nhau, nen
T(n) O(n2).

5. Cai at
int GTS (mat a, int n, int TOUR[max], int Ddau)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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;

III. Thuat toan Dijkstra -Tm ng i ngan nhat trong o th co


trong so
1. Bai toan
Cho G = (V,E) la n o th lien thong (vo hng hoac co hng) co trong
so
,
V = {1,.., n} la tap cac nh , E la tap cac canh (cung).

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 85 -

Cho s0 E. Tm ng i ngan nhat i t s0 en cac nh con lai.


Giai bai toan tren bang thuat toan Dijkstra .

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)};

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 86 -

- Tm s2 S va ke vi s1 hoac s0 sao cho :


L(s2 ) = Min{L(v) : v S};
( Khi o : d(s,s2 ) = L(s2) ); //0 = d(s0,s1) d(s0,s2)
Neu L(s2) = Min{L(sj), L(sj) + m(sj,s2)} th ng i t s en s2 i qua nh
sj la ngan nhat, va sj la nh ng ke trc s2.
- S = S {s2}; // S = {s0, s1, s2 } ; //s2 co nhan chnh thc
...
Bc i:
- Tnh lai nhan tam thi L(v), v S :
Neu v ke vi si-1 th
L(v) = Min{L(v), L(si-1) + m(si-1,v)};
- Tm si S va ke vi sj, j = 0, i 1 sao cho :
L(si ) = Min{L(v) : v S };
//0 = d(s,s1) d(s,s2) . . d(s,si)
( d(s,si ) = L(si) );
Neu L(si) = Min{L(sj), L(sj) + m(sj,si)} th ng i ngan nhat t s en si i
qua nh sj, va sj la nh ng ke trc si.
- S = S {si}; // S = {s0,s1,..,si }; //si co nhan chnh thc
Thuat toan dng khi i = n-1;
Khi thuat toan ket thuc, ta co : 0 = d(s0,s0) d(s0,s1) d(s0,s2) . . d(s0,sn1)
Neu ch tm ng i ngan nhat t s0 en t, th thuat toan dng khi co t S.

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

ng i ngan nhat t nh s = 1 en cac nh con lai :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Chieu dai cua ng i ngan nhat


t nh s (=1) en cac nh khac : tsnn[]
1
2
3
4
5
6

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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];
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 90 -

cout<<s;
}

5. o phc tap cua thuat toan


Thuat toan mo ta bi 2 vong lap long nhau, nen T(n) O(n2).

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


1

- 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

Cac canh chon


(2,1)
(3,2)
(4,1)
(5,4)
(7,4)
(6,7)

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 .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


)

- 92 )

Trong so (i, j ); Ne u (i, j ) to n tai;

c[i ][ j ] = 0; i = j
; Ne) u (i, j ) kho)ng to) n tai;

Khi tm canh co trong so nho nhat noi 1 nh trong U va mot nh ngoai U


tai moi bc, ta se dung 2 mang e lu tr :
- Mang closest [ ] : // == U
Vi i V\U th closest[i] U la nh ke gan i nhat.
- Mang lowcost[i] cho trong so cua canh (i, closest[i]) .
Tai moi bc, ta duyet mang lowcost e tm nh closest[k] U sao cho
trong so (k,closest[k]) = lowcost[k] la nho nhat. Khi tm c, Ta in canh
(closest[k], k), cap nhat vao cac mang closest va lowcost ,va co k a them vao U.
Khi ma ta tm c mot nh k cho cay bao trum, ta cho lowcost[k] = , la mot gia
tr rat ln, ln hn bat ky trong so cua canh nao cua o th, nh vay nh nay se
khong c keo dai trong U.
void Prim (Mat c)
{
double Lowcost[MAX];
int Closest[MAX];
int i,j,k,Min;
for (i=2;i<=n;i++)
{
Lowcost[i] = c[1][i];
Closest[i] = 1;
}
for (i=2;i<=n;i++)
{
Min = Lowcost[2];
k = 2;
for ( j=3; j<=n; j++) // Chon k
if (Lowcost[j] < Min )
{
Min = Lowcost[j];
k = j;
}
cout<<endl<<k<<closest[k];
lowcost[k] = ;
// Khi ong lai Closest[], Lowcost[]
for ( j=2; j<=n; j++)
if ( (c[k][ j] < lowcost[j]) && (lowcost[j] < ))
{
lowcost[j] = c[k][j];
closest[j] = k;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 93 -

}
}

5. o phc tap thuat toan


Ta co the thay la o phc tap trong thuat toan Prim la O(n2 ).

V. Bai toan ghi cac bai hat


1. Phat bieu bai toan
Co n bai hat, dung lng hoac chieu dai phat c ghi trong mang :
a = (a1 , a2 , . . . , an ).
- Tan suat phat la nh nhau, tm va phat tuan t.
- Goi la tap hp cac hoan v tren tap {1,..,n}.
Vi K = (k1, k2 , . . ., kn ) , ta at :
j
n
D ( K ) = a ; a la dung lng bai hat th
k
k
j = 1i = 1 i
i

ki .

Tm b sao cho D(b) = Min{ D(k) : k }


Minh hoa :
Vi n = 3; a = (5,10, 3).
i 1
a[i] 5
b
(1,2,3)
(1,3,2)
(2,1,3)
(2,3,1)
(3,1,2)
(3,2,1)

2
10

3
3

So hieu bai hat


Dung lng

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

Ta co : D(b) = d((3,1,2)) = Min{ D(k) : k }.


Mot cach n gian e tm li giai tren la vet can cac hoan v, nhng khi o
chi ph thi gian la qua ln. Ta se xac nh trc mot trat t va x ly d lieu theo
trat t nay.

2. Thiet ke
Input :
Output :

(a1, a2, . . ., an)


Hoan v b = (k1,..,kn) ,
min = D(b) = Min {D(K) : K };

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

con con lai cua a .


nh hng cho thuat toan tham lam trong trng hp nay la cac Tj c
tnh theo trat t tang dan cua a, phan t ai c chon trong moi bc them vao
chnh la min cua {ai,..,an}. Khi o, li giai tm c se la li giai toi u. Thuat toan
tham lam co the mo ta nh sau :
record_greedy(a,b,n)
* Khi ong b[i] = i,i; min = 0;t = 0;
* for (i = 1 n)
- Chon j = arcmin(a,n,i); // a[j] = min{a[i],..a[n]};
- b[i] b[j]; // oi cho
- a[i] a[j];
- Cap nhat lai gia tr min;
t = t + a[i];
min = min + t;
* return min;

3. o phc tap cua thuat toan


Thuat toan chon min c s dung chnh la chon trc tiep, Ta de thay o
phc tap cua thuat toan trong cac trng hp la O(n2).

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;
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 95 -

VI. Bai toan chiec tui xach (Knapsack)


1. Phat bieu bai toan
Co n vat, moi vat i , i{1,..,n} c ac trng bi trong lng wi (kg) va
gia tr vi (US). Co mot chiec tui xach co kha nang mang m kg. Gia s wi, vi, m
N*
,
i {1,..,n}.
Hay chon vat xep vao ba lo sao cho ba lo thu c co gia tr nhat.
Cac trong lng wi cua n vat co the bieu dien bi mang :
w = ( w1, w2, . . , wn );
Va gia tr tng ng cua cac vat :
v = ( v1, v2 ,. . .,vn );
Cac vat chon c c lu tr trong mang [ ], vi qui c :
[i] = 1 Vat i c chon.
Bai toan tr thanh :
n
i vi max
i =1
n
i wi m
i =1
{0,1}; i = 1, n
i

2. Thiet ke thuat toan


gia ).
Input

Output

Thuat toan tham lam cho bai toan chon vat co gia tr giam dan (theo n

w = ( w1, w2, . . . ,wn ); // Trong lng


v = ( v1, v2 ,. . .,vn ); // Gia tr
m = Sc cha chiec ba lo.

[1..n] ; // anh dau cac vat c chon


Vmax : Gia tr ln nhat cua ba lo.
Mo ta :
Knap_Greedy(w,v,Chon, n, m)
* Khi ong b[i] = i, i = 1, n ; //Lu tr ch so lam cho mang n gia giam
dan.
* Khi ong [i] = 0, i = 1, n ; Khi ong Vmax = 0;
w
* Tnh n gia : d = i ; i {1,.., n}
i v
i
* for (i = 1; i <= n && m > 0 ; i++)
{
- Chon j = arcmax(d,n,i); // d[j] = Max{d[i],..,d[n]};

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

3. o phc tap cua thuat toan


Thuat toan chon Max c s dung chnh la chon trc tiep, nen o phc tap
cua thuat toan trong cac trng hp la O(n2).

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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;
}

VII. Phng phap tham lam va Heuristic


Trong khi thiet ke giai cac bai toan ta co the co th theo moi phng an e
tm li giai toi u. Nhng khong phai luc nao cung c nh vay, v co rat nhieu
trng hp ton ph rat nhieu thi gian. Nen thay v tm li giai toi u, ta tm mot li
giai tot theo ngha :
- No ap ng c yeu cau, trong mot thi gian ma thc te chap nhan c.
Mot thuat toan tot nh vay ( khong phai la toi u ) goi la thuat toan
Heuristic.
Thuat toan Heuristic thng c the hien trong phng phap tham lam. Ta
co gan cho mot trat t nao o roi x ly theo trat t a cho.
Ta xet bai toan To mau o th sau :
To mau cho mot o th vi so mau t nhat co the.
To mau cho o th la gan mau cho moi nh cua o th sao cho khong co 2
nh ke nao cung mot mau.
Bai toan to mau o th c nghien cu trong nhieu thap ky nay, no thuoc
vao mot lp kha rong bai toan, c goi la bai toan N-P ay u , ma oi vi
chung th nhng li giai hien co chu yeu thuoc loai co het moi kha nang.
Neu o th nho ta co the co th moi phng an, e co the i ti mot li giai
toi u. Nhng vi o th ln th cach lam nay la khong the. Mot li giai tot co
c t thuat toan Heuristic la cach tiep can cua ta cho trng hp nay.
Thuat toan Heuristic hp ly cho bai toan to mau o th c the hien bi
cach thiet ke tham lam :
- Ta co to mau cho cac nh, trc het bang mot mau, khong the c na
mi dung ti mau th hai, th ba . . .
Thuat toan c mo ta nh sau :
1. Chon mot nh cha c to mau, va to no bang mau mi.
2. Tm trong cac nh cha c to mau, vi moi nh o xac nh xem co
phai la nh ke cua 1 nh a c to mau mi cha. Neu cha th to nh o bang
mau mi.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 98 -

minh hoa :
4
1

2
3

- To xanh cho nh (1), theo th t o to xanh cho (2).


- Khi o, (3) va (4) phai to khac mau, chang han o.
- Khi o , (5] lai phai to mot mau th 3, chang han vang.
Cach tiep can nay the hien ro y tham lam. No thc hien to mau mot nh
nao o ma no co the to c, khong he chu y en tnh huong bat li co the xay ra
(khi theo trat t a xac nh trc).
Can nhac hn, vi o th tren ta ch can 2 mau e to, chang han :
- To xanh cho (1), (3) va (4).
- To o cho (2) va(5).

BAI TAP
Bai 1 :

Cho mot li hnh vuong cap n, moi o c gan vi mot so t nhien.


Tai mot o co the di chuyen en o khac theo cac hng : len tren, xuong
di, re trai, re phai ( 4 o ke canh ).
Tm ng i t o au tien (1,1) en o ( m, m) sao cho tong cac o i qua la
nho nhat. ( 1 m n ).
Bai 2 :

Cho n thiet b (pi )1 i n va m cong viec (wi )1 i m .


Cac thiet b co the lam viec ong thi va lam viec nao cung c. Moi viec
a lam thiet b nao th lam en cung. Thi gian lam cong viec wi la ti , i
{1,..,m}.
Can xay dng mot lch bieu la th t thc hien cac cong viec sao cho tong
thi gian hoan thanh la nhanh nhat .
Bai 3 :
Cho m cong viec (wi )1 i m tng ng thi gian thc hien (ti )1 i m va tap
cac thiet b cung chc nang .
Vi thi gian T0 cho trc co nh, e hoan thanh m cong viec th can bo
tr cac cong viec tren cac thiet b sao cho so thiet b at min.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 100 -

CHNG 6 : PHNG PHAP QUY HOACH ONG


(Dynamic Programming)
I. Phng phap tong quat
oi vi nhieu thuat toan, phng phap chia e tr thng ong vai tro chu
ao trong viec thiet ke thuat toan. Trong phng phap quy hoach ong lai cang tan
dung phng phap nay : Khi khong biet can phai giai bai toan con nao, ta giai tat
ca cac bai toan con va lu tr nhng li giai nay ( e khoi phai tnh toan lai ) nham
s dung lai chung e giai bai toan ln hn.
Phng phap nay to chc tm kiem li giai theo kieu t di len (bottom
up). Xuat phat t cac bai toan con nho va n gian nhat, to hp cac li giai cua
chung e co li giai cua bai toan con ln hn...va c nh the e tm li giai cua bai
toan ban au.
Khi s dung phng phap quy hoach ong e giai quyet van e, ta co the
gap 2 kho khan sau :
1. So lng li giai cua cac bai toan con co the rat ln khong chap nhan
c .
2. Khong phai luc nao s ket hp li giai cua cac bai toan con cung cho ra
li giai cua bai toan ln hn.
e giai quyet nhng trng hp nh vay, phng phap quy hoach ong da
vao mot nguyen ly, goi la nguyen ly toi u (The principle of optimality) cua
Bellman :
Neu li giai cua bai toan la toi u th li giai cua cac bai toan con cung toi
u .
Trong thuat toan quy hoach ong thng dung cac thao tac :
- Xay dng mot ham quy hoach ong ( hoac phng trnh quy hoach ong ).
- Lap bang lu lai cac gia tr cua ham.
- Truy xuat li giai toi u cua bai toan t bang lu.
...
Trong chng nay ta gii thieu mot so bai toan co the dung quy hoach ong
giai quyet mot cach hieu qua. Nhng van e nay eu lien quan en bai toan tm
phng an toi u e thc hien mot cong viec nao o, va chung co chung mot tnh
chat la ap an tot nhat cho mot bai toan con van c duy tr khi bai toan o tr
thanh mot phan trong mot bai toan ln.

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 .

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

i,j {1,..,n} : aij = 0; 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.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Hoat ong cua thuat toan Floyd :


b1
d1

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

Tran Tuan Minh

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

Thiet ke va anh gia thuat toan

- 103 -

Can c vao ma tran d, ta ch ra khoang cach ng i ngan nhat t i en j,


va da vao p co the xac nh cac nh nam tren ng i ngan nhat nay.
Chang han, vi i = 1, j = 3.
Theo d, d13 = 15. Nen ng i ngan nhat t 1 en 3 co khoang cach la 15.
Theo p, ng i ngan nhat t nh 1 en nh 3 i qua nh trung gian p13
= 4, ng i ngan nhat t nh 1 en nh 4 i qua nh trung gian p14 = 2, ng
i ngan nhat t nh 1 en nh 2 khong i qua nh trung gian nao ( p12 = 0).
Vay ng i ngan nhat t nh 1 en nh 3 la : 1 2 4 3.

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);

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 104 -

}
}

5. o phc tap cua thuat toan


T(n) O(n3).

III. Nhan to hp nhieu ma tran


1. Bai toan
Xet tch cac ma tran : A = A1... An , vi gia thiet phep nhan co ngha .
Do tnh ket hp cua phep nhan ma tran, cac ma tran Ai co the nhom lai theo
nhieu cach khac nhau, ma ma tran ket qua A khong oi. Tuy nhien co s khac biet
ve chi ph khi thay oi cac to hp cac ma tran Ai.Ta lu y rang tch 2 ma tran cap
(mn) va (np) se co chi ph la mnp.
Van e la tm trnh t thc hien cac ma tran sao cho co chi ph t nhat.
Cho cac ma tran, vi cac kch thc tng ng :
A
301

B
140

C
4010

D
1025

Nhan cac ma tran tren vi cac th t sau :


Th t
((AB)C)D
(A(B(CD))
(AB)(CD)
A((BC)D)

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 106 -

Kch thc cua cac ma tran ta lu tr trong mang 1 chieu d : Ai la ma tran


co di-1 hang , di cot. Thuat toan co the viet nh sau :
Input d = (d0,d1,...,dn) ;
Output
M = (Mij) ,
O = (Oij);
Mo ta :
MO(d,n,O,M)
int i, j, k, diag;
* 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;
+ M ij = Min {M ik + M k +1, j + d i 1 d k d j };
i k j 1

+ O[i][j] = k; // vi Mij at min


* return m[1][n];
Ket qua cua thuat toan, vi d0 = 30; d1 = 1; d2 = 40; d3 = 10; d4 = 25 :

M =

1200
0

700
400
0

1400

650
; O=

10000

1
2

1
3
3

4. o phc tap cua thuat toan


T(n) O(n3)

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] ))

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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];

Ham xuat trnh t to hp cac ma tran :


void MOS(int i, int j, mat O)
{
int k;
if (i == j)
cout<<'A'<<i;
else
{
k = O[i][j];
cout<<'(';
MOS(i,k,O);
cout<<'*';
MOS (k+1,j,O);
cout<<')';
}
}

IV. Cay nh phan tm kiem toi u (Optimal Binary Search Tree)


Ta thng to chc cay nh phan tm kiem tren gia thiet la cac khoa tm kiem
co ong kha nang ve truy xuat. Tuy nhien co nhng trng hp ma ta co thong tin
ve xac suat truy xuat cac khoa. Chang han qua trnh phan tch cua trnh bien dch
e xac nh xem mot t co phai la t khoa hay khong ? Trong trng hp nay, viec
thong ke hang tram chng trnh (c bien dch) co the cho thong tin kha chnh
xac ve tan so xuat hien tng oi cua cac khoa.
Gia s trong cay nh phan tm kiem, xac suat truy xuat cua khoa Ki la pi :
P{X = Ki } = pi.
Bay gi ta muon to chc cay nh phan tm kiem sao cho tong so cac
bc tm kiem la nho nhat. Chi ph tm kiem ac trng bi so lng
cac phep toan so sanh can thiet khi tm kiem tren cay, nen ta phai
chu y en o dai ng i tren cay. ay ta cung da vai khai niem

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

Vi pi la xac suat e khoa Ki xuat hien. hi la mc cua nut tng ng Ki .


Muc ch cua bai toan ta muon at ra la : Cc tieu hoa o dai ng i co
trong so vi phan phoi xac suat cho trc. Noi cach khac, Xac nh cay nh phan
tm kiem sao cho P co gia tr nho nhat.
Mot cach t nhien ta co the thay xac suat truy xuat cua cac khoa bang tan
suat cua cac khoa, bai toan co the phat bieu lai nh sau :

1. Phat bieu bai toan


Cho trc tap cac khoa Ki , i 1, n , sao cho : K1 < K2 < < Kn .
Xac nh cay nh phan tm kiem vi tap cac khoa tren sao cho bieu thc P
sau ay co gia tr nho nhat :
n

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

3. Thiet ke thuat toan


Cach tiep can quy hoach ong e giai quyet bai toan nay la tm nghiem toi
u theo cach phat trien cay ln len t la ti goc, tc la tm kiem phng an toi u
xay dng cay con gom cac khoa Ki,..., Kj va lu tr lai ap an.
Neu goi Kk la goc cua cay Tij tng ng vi cac khoa lien nhau Ki,..., Kj th
cac nut Ki,..., Kk-1 phai nam tren cay con trai va cac nut Kk+1,..., Kj phai nam tren
cay con phai, va ta phai sap toi u cho 2 cay con nay. V ta khong biet phai chon
nut nao lam goc cho tot nhat nen ta phai chon th tat ca cac nut va cc tieu hoa cac
cach chon nay.
Ta co the thay o dai ng i co trong so cua cay Tij se bang tong o dai
ng i co trong so cua 2 cay con Ti,k-1 va Tk+1,j va so lan mot phep tm kiem
duyet qua cac nut t la en goc ( o chnh la o dai ng i co trong so cua cay
Tij).
Kk

Ki,...,Kk-1
at :

Kk+1,...,Kj

Mij = o dai ng i co trong so cua cay nh phan tm kiem toi u


tng ng vi cac khoa Ki <...< Kj , vi 1 i j n .
Khi o Mij c xac nh theo cong thc :
j
k 1

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

= Min{M i ,k 1 + M k +1, j }+ a q ; vi i < j.


j

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.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 110 -

j
1
2

Mij

0 a1
0 a2
0 a3
0

0
0 an
0
n

n+1
0 1

Thuat toan co the mo ta nh sau


input a[1..n], //cha tan suat cac khoa
n; //so khoa
output root[][]// bang cac khoa cua cay nh phan tm kiem toi u.
minOBST;//trong so cua cay nh phan tm kiem toi u.
obst(a, n, root, M)
double m[][];
* for (i=1n) //Khi ong
{
M[i][i] = p[i];
M[i][i-1] = 0;
root[i][i] = i;
}
M[n+1][n] = 0;
* for (diag = 1n-1)
for (i=1 n-diag)
{
j = i + diag;
j

M [i][ j ] = Min( M [i ][k 1] + M [k + 1][ j ]) + a[q] ;


ik j

q =i

root[i][j] = k;//Ch so gia tr nho nhat m[i][j]


}
* minOBSST = M[1][n];
* return minOBSST;

4. o phc tap cua thuat toan


T(n) O(n3)

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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];
}

V. Day chung dai nhat cua 2 day so


1. Bai toan
Cho cac day so nguyen : a = (a1,, am ), b = (b1, , bn ) .
Tm mot day dai nhat c nhan c t a va b nh sau : trong a xoa i mot so
phan t, trong b xoa i mot so phan t ( cac phan t b xoa i trong a va b khong
nhat thiet la trung ch so ).
Ta noi c la day con chung dai nhat nhan c t a va b.
V du :
Vi cac day a, b cho nh sau :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan


i
a
b

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

Day con chung dai nhat c la :


i
c

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

Mau chot cua thuat toan la tnh cac Lij .


au tien ta xet trong trng hp day a co 1 phan t, hoac day b co 1 phan
t.

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

Tong quat, vi i >1, j > 1 :


Xet 2 trng hp sau :
TH1 : ai = bj .
Suy ra rang Lij = Li-1,j-1 + 1;

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}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 113 -

1; Neu a i = b j
trong o : x =
0; Ngc lai

Ta co the xem L la mot m n ma tran : (Lij)mxn.Ta tnh va lam ay cac


phan t cua ma tran nayco the xem
Tnh Lij, can phai biet Li , j 1 , Li 1, j , Li 1, j 1 . Ta tnh cac phan t cua ma tran
L t goc ben trai lan lt theo cac ng cheo song song vi ng cheo ngc

...

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} ;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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)

4. o phc tap cua thuat toan


T(n) O(n2 ).

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;

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

VI. Bai toan ngi du lch


Bai toan ngi du lch ta a giai bang cac phng phap :
- Tham lam : Li giai tm c khong chac toi u.
- Nhanh can : Li giai tm c toi u.
Trong phan nay, ta tiep can cach giai bai toan nay bang phng phap quy
hoach ong.
n thanh pho c anh so t 1 en n. ng i t thanh pho i en thanh pho
j xem nh la cung i t nh i en nh j cua n o th co hng. Chi ph i t i en
j la trong so m(i,j) cua cung (i,j).
Vay bai toan ngui du lch co the xem la tm mot chu trnh xuat phat t nh
i nao o cua n o th co hng co trong so G=(V,E), i qua moi nh ung 1 lan
sao cho co trong so nho nhat.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

2. Thiet ke thuat toan

Bieu dien G bang ma tran ke : C = (C ij )nn , vi :


m(i, j ) > 0; (i, j ) E

C ij = 0; i = j
; (i, j ) E

Xet tap S V\{1} va i (V\{1})\S. Ta goi :


d(i,S) = Trong so cua ng i ngan nhat i t nh i en nh 1
i qua moi nh trong S ung 1 lan.
Vay vi 2 i n :
- Neu S = , ro rang la :
d(i, ) = C i1 ;
- Neu S :
d (i, S ) = Min{C ik + d (k , S \ {k})}
kS

Khi o, trong so cua chu trnh ngan nhat i t 1 en 1 se la :

d (1, V \ {1}) = Min{C1k + d (k ,V \ {1, k})}


2 k n

e tnh d (1,V \ {1}) ta can co d (k ,V \ {1, k}) , vi 2 k n.


Tong quat, ta can tnh cac d (i, S ) , S V\{1} va i (V\{1})\S .
au tien ta tnh va lu tr d(i, ) ; d(i, S) vi S ch co 1 phan t ; d(i, S)
vi S co 2 phan t , . . .cho en khi tnh c cac d (k , V \ {1, k}) vi 2 k n.
Input : C
Output : d (1,V \ {1})
Mo ta:
Bc 0 :
- Khi tao : d(i, ) = Ci1 ; 2 i n
Bc 1 :
- Vi S V\{1} va S= 1; i 1 va i S :
d (i, S ) = Min{C ik + d (k , S \ {k})}
kS

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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})

= Min{ C12 + d(2, {3,4}), C13 + d(3,{2,4}),, C14 + d(4,{2,3})}


= Min{10+25, 15+25, 20+23}
= Min{35, 40, 43} = 35.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 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

3. o phc tap cua thuat toan


-

Ta xet thi gian thc hien T(n) cua d(i,S) :


i co n-1 la chon.
i=2,..,n : So cac tap S co k phan t khac 1,i la C nk 2 .

Do o :
n2

T (n) = (n 1)C nk 2 = (n 1)2 n 2


k =0

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 :

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 119 -

Cai at ham Ackerman :

n + 1; m = 0, n N ;

A(m, n) = A(m 1,1); m N * , n = 0;


A(m 1, A(m, n 1)); m, 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 :

Tnh cac so Catalan :


n 1

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.

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

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

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 121 -

3. Ham chuyen d lieu t tep van ban vao ma tran vuong.


//oc d lieu t tep f, roi ghi vao ma tran a.
void Tep_Mat(char *f, mat a, int &n)
{
ifstream in(f);
if(!in)
{
cout<<"\nKhong mo duoc tep "<<f;
getch();
exit(1) ;
}
in>>n ;
int i, j;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
in>>a[i][j];
in.close();
}

Tran Tuan Minh

Khoa Toan-Tin

Thiet ke va anh gia thuat toan

- 122 -

TAI LIEU THAM KHAO


ALFRED V. AHO & JOHN E.HOPCROFT & JOHN D. ULMANN
Data structures and algorithms, Addison Wesley, 1983.
C.FROIDEVAUX & M-C GAUDEL & M. SORIA
Types de donnees et algorithmes , Ediscience, 1994
D. BEAUQUIER & J.BERSTEL & Ph.CHRETIENNE,
Element dalgorithmique., Masson, 1992.
DONALD KNUTH, The art of computer programming,
vol 1 : Fundamental algorithms;
vol 3 : Sorting and searching ,
Addition Wesley Publishing company,1973.
ELLIS HOROWITHZ & SARTAJ SAHANI:
Fundamentals of computeur algorithms,
computer Science Press INC, 1978.
G. BRASSARD & P. BRATLEY ,
Algorithmique - conception et analyse, Masson, Paris , 1987.
J .P. BARTHELEMY & G. COHEN & A . LOBSTEIN ,
Complexcite algorithmique et problemes de communications
Masson, Paris , 1992.
NGUYEN XUAN HUY , Thuat toan , Nha xuat ban Thong ke,
Ha Noi, 1988
NIKLAUS WIRTH , Algorithms + data structures = Programs,
Prentice-Hall INC,1976
S.E.GOODMAN & S.T. HEDETNIEMI ,
Introduction to the design and analysis of algorithms,
Mcgraw-Hill.1977.
TRNG CH TN, giao trnh Cau truc d lieu va thuat toan 1,
ai hoc a lat, 2002.

Tran Tuan Minh

Khoa Toan-Tin

You might also like