You are on page 1of 83

Collected by The_Wall (11/10/2005)

1. M c tiêu
2. Ki n th c c b n c n có h c ch ng này
3. Tài li u tham kh o có liên quan n ch ng
4. N i dung:
I.1 - S c n thi t ph i phân tích gi i thu t.
I.2 - Th i gian th c hi n c a gi i thu t.
I.3 - T su t t ng và ph c t p c a gi i thu t.
I.4 - Cách tính ph c t p.
I.5 - Phân tích các ch ng trình quy.
5. V n nghiên c u c a trang k ti p

Trong ch ng này chúng ta s nghiên c u các v n sau:

· S c n thi t ph i phân tích các gi i thu t.

· Th i gian th c hi n c a ch ng trình.

· T su t t ng và ph c t p c a gi i thu t.

· Tính th i gian th c hi n c a ch ng trình.

· Phân tích các ch ng trình quy.

I.1- S C N THI T PH I PHÂN TÍCH GI I THU T


Trong khi gi i m t bài toán chúng ta có th có m t s gi i thu t khác nhau, v n là c n ph i
ánh giá các gi i thu t ó l a ch n m t gi i thu t t t (nh t). Thông th ng thì ta s c n c vào các
tiêu chu n sau:
1.- Gi i thu t úng n.

2.- Gi i thu t n gi n.

3.- Gi i thu t th c hi n nhanh.

V i yêu c u (1), ki m tra tính úng n c a gi i thu t chúng ta có th cài t gi i thu t ó


và cho th c hi n trên máy v i m t s b d li u m u r i l y k t qu thu c so sánh v i k t qu ã
bi t. Th c ra thì cách làm này không ch c ch n b i vì có th gi i thu t úng v i t t c các b d li u
chúng ta ã th nh ng l i sai v i m t b d li u nào ó. V l i cách làm này ch phát hi n ra gi i thu t
sai ch ch a ch ng minh c là nó úng. Tính úng n c a gi i thu t c n ph i c ch ng minh
ng toán h c. T t nhiên u này không n gi n và do v y chúng ta s không c p n ây.

Khi chúng ta vi t m t ch ng trình s d ng m t vài l n thì yêu c u (2) là quan tr ng nh t.


Chúng ta c n m t gi i thu t d vi t ch ng trình nhanh chóng có c k t q a , th i gian th c hi n
ch ng trình không c cao vì dù sao thì ch ng trình ó c ng ch s d ng m t vài l n mà thôi.

Tuy nhiên khi m t ch ng trình c s d ng nhi u l n thì thì yêu c u ti ït ki m th i gian


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 1
Collected by The_Wall (11/10/2005)

th c hi n ch ng trình l i r t quan tr ng c bi t i v i nh ng ch ng trình mà khi th c hi n c n d


li u nh p l n do ó yêu c u (3) s c xem xét m t cách k càng. Ta g i nó là hi u qu th i gian th c
hi n c a gi i thu t.

I.2- TH I GIAN TH C HI N C A GI I THU T


I.2.1- Th i gian th c hi n ch ng trình.
I.2.2- n v o th i gian th c hi n.
I.2.3- Th i gian th c hi n trong tr ng h p x u nh t.
M t ph ng pháp xác nh hi u qu th i gian th c hi n c a m t gi i thu t là l p trình nó và o
ng th i gian th c hi n c a ho t ng trên m t máy tính xác nh i v i t p h p c ch n l c các
li u vào.

Th i gian th c hi n không ch ph thu c vào gi i thu t mà còn ph thu c váo t p các ch th


a máy tính, ch t l ng c a máy tính và k x o c a ng i l p trình. S thi hành c ng có th u
ch nh th c hi n t t trên t p c bi t các d li u vào c ch n. v t qua các tr ng i này, các
nhà khoa h c máy tính ã ch p nh n tính ph c t p c a th i gian c ti p c n nh m t s o l ng c
n s th c thi c a gi i thu t. Thu t ng tính hi u qu s c p n s o l ng này và c bi t i
i s ph c t p th i gian trong tr ng h p x u nh t.

I.2.1- Th i gian th c hi n ch ng trình.


Th i gian th c hi n m t ch ng trình là m t hàm c a kích th c d li u vào, ký hi u T(n) trong ó n
là kích th c ( l n) c a d li u vào.

Ví d 1-1: Ch ng trình tính t ng c a n s có th i gian th c hi n là T(n) = cn trong ó c là


t h ng s .

Th i gian th c hi n ch ng trình là m t hàm không âm, t c là T(n) ≥0 ∀n≥0.

I.2.2- n v o th i gian th c hi n.
n v c a T(n) không ph i là n v o th i gian bình th ng nh gi , phút giây... mà th ng
c xác nh b i s các l nh c th c hi n trong m t máy tính lý t ng.

Ví d 1-2: Khi ta nói th i gian th c hi n c a m t ch ng trình là T(n) = cn thì có ngh a là


ch ng trình y c n cn ch th th c thi.

I.2.3- Th i gian th c hi n trong tr ng h p x u nh t.


Nói chung thì th i gian th c hi n ch ng trình không ch ph thu c vào kích th c mà còn
ph thu c vào tính ch t c a d li u vào. Ngh a là d li u vào có cùng kích th c nh ng th i gian th c
hi n ch ng trình có th khác nhau. Ch ng h n ch ng trình s p x p dãy s nguyên t ng d n, khi ta
cho vào dãy có th t thì th i gian th c hi n khác v i khi ta cho vào dãy ch a có th t , ho c khi ta
cho vào m t dãy ã có th t t ng thì th i gian th c hi n c ng khác so v i khi ta cho vào m t dãy ã
có th t gi m.

Vì v y th ng ta coi T(n) là th i gian th c hi n ch ng trình trong tr ng h p x u nh t trên


li u vào có kích th óc n, t c là: T(n) là th i gian l n nh t th c hi n ch ng trình i v i m i d
li u vào có cùng kích th c n.
I.3- T SU T T NG VÀ PH C T P C A GI I THU T

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 2


Collected by The_Wall (11/10/2005)

I.3.1- T su t t ng
I.3.2- Khái ni m ph c t p c a gi i thu t

I.3.1- T su t t ng
Ta nói r ng hàm không âm T(n) có su t t ng (growth rate) f(n) n u t n t i các h ng s c
và n0 sao cho T(n) f(n) v i m i n n0.

Ta có th ch ng minh c r ng “Cho m t hàm không âm T(n) b t k , ta luôn tìm ct


su t t ng f(n) c a nó”.

Ví d 1-3: Gi s T(0) = 1, T(1) = 4 và t ng quát T(n) = (n+1)2. t n0 = 1 và c = 4 thì v i m i


n 1 chúng ta d dàng ch ng minh r ng T(n) = (n+1)2 4n2 v i m i n 1, t c là t su t t ng c a T(n)
là n2.

Ví d 1-4: T su t t ng c a hàm T(n) = 3n3 + 2n2 là n3. Th c v y, cho n0 = 0 và c = 5 ta d


dàng ch ng minh r ng v i m i n 0 thì 3n3 + 2n2 5n3

I.3.2- Khái ni m ph c t p c a gi i thu t


Gi s ta có hai gi i thu t P1 và P2 v i th i gian th c hi n t ng ng là T1(n) = 100n2 (v i t
su t t ng là n2) và T2(n) = 5n3 (v i t su t t ng là n3). Gi i thu t nào s th c hi n nhanh h n? Câu tr
i ph thu c vào kích th c d li u vào. V i n < 20 thì P2 s nhanh h n P1 (T2<T1), do h s c a 5n3
nh h n h s c a 100n2 (5<100). Nh ng khi n > 20 thì ng c l i do s m c a 100n2 nh h n s m
a 5n3 (2<3). ây chúng ta ch nên quan tâm n tr ng h p n>20 vì khi n<20 thì th i gian th c
hi n c a c P1 và P2 u không l n và s khác bi t gi a T1 và T2 là không áng k ..

Nh v y m t cách h p lý là ta xét t su t t ng c a hàm th i gian th c hi n ch ng trình thay


vì xét chính b n thân th i gian th c hi n.

Cho m t hàm T(n), T(n) g i là có ph c t p f(n) n u t n t i các h ng c, N0 sao cho T(n)


cf(n) v i m i n N0 (t c là T(n) có t su t t ng là f(n)) và kí hi u T(n) là O(f(n)) ( c là “ô c a f(n)”)

Ví d 1-5: T(n)= (n+1)2 có t su t t ng là n2 nên T(n)= (n+1)2 là O(n2)

Chú ý: O(c.f(n))=O(f(n)) v i c là h ng s . c bi t O(c)=O(1)

Nói cách khác ph c t p tính toán c a gi i thu t là m t hàm ch n trên c a hàm th i gian. Vì
ng nhân t c trong hàm ch n trên không có ý ngh a nên ta có th b qua vì v y hàm th hi n ph c
p có các d ng th ng g p sau: log2n, n, nlog2n, n2, n3, 22, n!, nn. Ba hàm cu i cùng ta g i là d ng
hàm m , các hàm khác g i là hàm a th c. M t gi i thu t mà th i gian th c hi n có ph c t p là m t
hàm a th c thì ch p nh n c t c là có th cài t th c hi n, còn các gi i thu t có ph c t p
hàm m thì ph i tìm cách c i ti n gi i thu t.
Khi nói n ph c t p c a gi i thu t là ta mu n nói n hi u qu c a th i gian th c hi n c a
ch ng trình nên ta có th xem vi c xác nh th i gian th c hiên c a ch ng trình chính là xác nh
ph c t p c a gi i thu t.

I.4- CÁCH TÍNH PH C T P


I.4.1- Qui t c c ng
I.4.2- Qui t c nhân
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 3
Collected by The_Wall (11/10/2005)

I.4.3- Qui t c t ng quát phân tích m t ch ng trình


I.4.4- ph c t p c a ch ng trình có g i ch ng trình con không qui

Cách tính ph c t p c a m t gi i thu t b t k là m t v n không n gi n. Tuy nhiên ta có


th tuân theo m t s nguyên t c sau:

I.4.1- Qui t c c ng:


N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1 và P2; và
T1(n)=O(f(n)), T2(n)=O(g(n) thì th i gian th c hi n c a n hai ch ng trình ó i ti p nhau là
T(n)=O(max(f(n),g(n)))

Ví d 1-6: L nh gán x:=15 t n m t h ng th i gian hay O(1)

L nh c d li u READ(x) t n m t h ng th i gian hay O(1)

V y th i gian th c hi n c hai l nh trên n i ti p nhau là O(max(1,1))=O(1)

I.4.2- Qui t c nhân:


N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1và P2 và T1(n) =
O(f(n)), T2(n) = O(g(n) thì th i gian th c hi n c a n hai n ch ng trình ó ng nhau là T(n) =
O(f(n).g(n))

I.4.3- Qui t c t ng quát phân tích m t ch ng trình:


- Th i gian th c hi n c a m i l nh gán, READ, WRITE là O(1)

- Th i gian th c hi n c a m t chu i tu n t các l nh c xác nh b ng qui t c c ng. Nh


y th i gian này là th i gian thi hành m t l nh nào ó lâu nh t trong chu i l nh.

- Th i gian th c hi n c u trúc IF là th i gian l n nh t th c hi n l nh sau THEN ho c sau ELSE


và th i gian ki m tra u ki n. Th ng th i gian ki m tra u ki n là O(1).

- Th i gian th c hi n vòng l p là t ng (trên t t c các l n l p) th i gian th c hi n thân vòng


p. N u th i gian th c hi n than vòng l p không i thì th i gian th c hi n vòng l p là tích c a s l n
p v i th i gian th c hi n thân vòng l p.

Ví d 1-7: Tính th i gian th c hi n c a n ch ng trình

procedure Bubble (var a: array[1..n] of integer);


var i,j,temp: integer;
begin
{1} for i:=1 to n-1 do
{2} for j:=n downto i+1 do
{3} if a[j-1]>a[j] then begin
{ i ch a[i], a[j] }
{4} temp:=a[j-1];
{5} a[j-1]:=a[j];
{6} a[j]:=temp; end;
end;

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 4


Collected by The_Wall (11/10/2005)

C ba l nh i ch {4} {5} {6} t n O(1) th i gian, do ó l nh {3} t n O(1).

Vòng l p {2} th c hi n (n-i) l n, m i l n O(1) do ó vòng l p {2} t n O((n-i).1)=O(n-i).

Vòng l p {1} l p (n-1) l n v y ph c t p c a gi i thu t là:

I.4.4- ph c t p c a ch ng trình có g i ch ng trình con không qui


N u chúng ta có m t ch ng trình v i các ch ng trình con không quy, tính th i gian
th c hi n c a ch ng trình, tr c h t chúng ta tính th i gian th c hi n c a các ch ng trình con không
i các ch ng trình con khác. Sau ó chúng ta tính th i gian th c hi n c a các ch ng trình con ch
i các ch ng trình con mà th i gian th c hi n c a chúng ã c tính. Chúng ta ti p t c quá trình
ánh giá th i gian th c hi n c a m i ch ng trình con sau khi th i gian th c hi n c a t t c các
ch ng trình con mà nó g i ã c ánh giá. Cu i cùng ta tính th i gian cho ch ng trình chính.

Gi s ta cô m t h th ng các ch ng trình g i theo s sau:

Ch ng trình A g i hai ch ng trình con là B và C, ch ng trình B g i hai ch ng trình con là


B1 và B2, ch ng trình B1 g i hai ch ng trình con là B11 và B12.

tính th i gian th c hi n c a A, ta tính theo các b c sau:

- Tính th i gian th c hi n c a C, B2, B11 và B12.

- Tính th i gian th c hi n c a B1.

- Tính th i gian th c hi n c a B.

- Tính th i gian th c hi n c a A.

Ví d 1-8: Ta có th vi t l i ch ng trình s p x p bubble nh sau:

procedure Swap (var x, y: integer);


var temp: integer;
begin
temp := x;
x := y;
y := temp;
end;

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 5


Collected by The_Wall (11/10/2005)

procedure Bubble (var a: array[1..n] of integer);


var i,j :integer;
begin
{1} for i:=1 to n-1 do
{2} for j:=n downto i+1 do
{3} if a[j-1]>a[j] then Swap(a[j-1], a[j]);
end;

Trong cách vi t trên, ch ng trình Bubble g i ch ng trình con Swap, do ó tính th i gian
th c hi n c a Bubble, tr c h t ta c n tính th i gian th c hi n c a Swap. D th y th i gian th c hi n
a Swap là O(1) vì nó ch bao g m 3 l nh gán.

Trong Bubble, l nh {3} g i Swap nên ch t n O(1), l nh {2} th c hi n n-i l n, m i l n t n


O(1) nên t n O(n-i). L nh {1} th c hi n n-1 l n nên

I.5- PHÂN TÍCH CÁC CH NG TRÌNH QUY


I.5.1- Thành l p ph ng trình quy
I.5.2- Gi i ph ng trình quy
V i các ch ng trình có g i các ch ng trình con quy, ta không th áp d ng cách tính nh
a trình bày trong m c I.4.4 b i vì m t ch ng trình quy s g i chính b n thân nó.

V i các ch ng trình quy, tr c h t ta c n thành l p các ph ng trình quy, sau ó gi i


ph ng trình quy, nghi m c a ph ng trình quy s là th i gian th c hi n c a ch ng trình
quy.

I.5.1- Thành l p ph ng trình quy


Ph ng trình quy là m t ph ng trình bi u di n m i liên h gi a T(n) và T(k), trong ó
T(n) là th i gian th c hi n ch ng trình v i kích th c d li u nh p là n, T(k) th i gian th c hi n
ch ng trình v i kích th c d li u nh p là k, v i k < n. thành l p c ph ng trình quy, ta
ph i c n c vào ch ng trình quy.

Ví d 1-9: Xét hàm tính giai th a vi t b ng gi i thu t quy nh sau:

function Giai_thua(n:integer): integer;


begin
if n=0 then Giai_thua :=1
else Giai_thua := n* Giai_thua(n-1);
end;

i T(n) là th i gian th c hi n vi c tính n giai th a, thì T(n-1) là th i gian th c hi n vi c tính


n-1 giai th a. Trong tr ng h p n=0 thì ch ng trình ch th c hi n m t l nh gán Giai_thua:=1, nên t n
O(1), do ó ta có T(0) = C1. Trong tr ng h p n>0 ch ng trình ph i g i quy Giai_thua(n-1), vi c
i quy này t n T(n-1), sau khi có k t qu c a vi c g i quy, ch ng trình ph i nhân k t qu ó
i n và gán cho Giai_thua. Th i gian th c hi n phép nhân và phép gán là m t h ng C2. V y ta có

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 6


Collected by The_Wall (11/10/2005)

ây là ph ng trình quy tính th i gian th c hi n c a ch ng trình quy Giai_thua.

Ví d 1-10: Chúng ta xét th t c MergeSort m t cách phác th o nh sau:

function MergeSort (L:List ; n:integer) : List;


var
L1,L2 : List;
begin
if n = 1 then return(L)
else
begin
Chia L thành 2 n a L1 và L2 , m i m t n a có dài n/2;
return(Merge(MergeSort (L1 , n/2), MergeSort(L2, n/2)));
end;
end;

Ch ng h n s p x p danh sách L g m 8 ph n t 7, 4, 8, 9, 3, 1, 6, 2 ta có mô hình minh h a


a MergeSort nh sau:

Hàm MergeSort nh n m t danh sách có dài n và tr v m t danh sách ã c s p x p. Th


c Merge nh n hai danh sách ã c s p L1 và L2 m i danh sách có dài n/2, tr n chúng l i v i
nhau c m t danh sách g m n ph n t có th t . Gi i thu t chi ti t c a Merge ta s bàn sau,
chúng ta ch ý r ng th i gian Merge các danh sách có dài n/2 là O(n).

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 7


Collected by The_Wall (11/10/2005)

G i T(n) là th i gian th c hi n MergeSort m t danh sách n ph n t thì T(n/2) là th i gian th c


hi n MergeSort m t danh sách n/2 ph n t , ta có th vi t ph ng trình quy nh sau:

Trong ó c1 là th i gian ph i t n khi L có dài 1. Trong tr ng h p n > 1, th i gian c a


MergeSort c chia làm hai ph n. Ph n g i quy MergeSort m t danh sách có dài n/2 là T(n/2)
do ó ta có 2T(n/2). Ph n th hai bao g m phép th n >1, chia danh sách L thành hai n a b ng nhau và
Merge. Ba thao tác này l y th i gian không i i v i phép th ho c t l v i n i v i ng t và
Merge. Nh v y h ng c2 c ch n và c2n là th i gian t ng làm các vi c ó ngo i tr g i quy.

I.5.2- Gi i ph ng trình quy

Có ba ph ng pháp gi i ph ng trình quy:

1.- Ph ng pháp truy h i

2.- Ph ng pháp oán nghi m.

3.- L i gi i t ng quát c a m t l p các ph ng trình quy.

Ph ng pháp truy h i

Dùng quy thay th b t k T(m) v i m < n vào phía ph i c a ph ng trình cho n khi t t
T(m) v i m > 1 c thay th b i bi u th c c a các T(1). Vì T(1) luôn là h ng nên chúng ta có công
th c c a T(n) ch a các s h ng ch liên quan n n và các h ng s .
Gi i ph ng trình.

Ví d 1-10: Gi i ph ng trình:

Ta có:

Gi s n = 2k, quá trình suy r ng s k t thúc khi i =k, khi ó ta có:

T(n) = 2kT(1) + kC2n

Vì 2k = n nên k = logn và v i T(1) =C1 nên ta có

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 8


Collected by The_Wall (11/10/2005)

T(n) = C1n + C2nlogn

Hay T(n) là O(nlogn).

oán nghi m

Ta oán m t nghi m f(n) và dùng ch ng minh quy n p ch ng t r ng T(n) f(n) v i m i n.

Thông th ng f(n) là m t trong các hàm quen thu c nh logn, n, nlogn, n2, n3, 2n, n!, nn.

ôi khi chúng ta ch oán d ng c a f(n) trong ó có m t vài tham s ch a xác nh (ch ng h n


2
f(n) = an v i a ch a xác nh) và trong quá trình ch ng minh quy n p ta s suy di n ra giá tr thích
p c a các tham s .

Ví d 1-11: Gi i ph ng trình quy

Gi s chúng ta oán f(n) = anlogn. V i n = 1 ta th y r ng cách oán nh v y không cb i


vì anlog n có giá tr 0 không ph thu c vào giá tr c a a. Vì th ta th ti p theo f(n) = anlogn + b.

V i n = 1 ta có, T(1) = C1 và f(1) = b, mu n T(1) f(1) thì b C1 (*)

Gi s r ng T(k) aklogk + b v i m i k < n (I.2).Ta s ch ng minh T(n) anlogn + b

Gi s n 2, t (I.1) ta có T(n) = 2T(n/2) + C2n

Áp d ng (I.2) v i k = n/2 < n ta có:

T(n) = 2T(n/2) + C2n 2[an/2log(n/2) + b] + C2n

T(n) anlogn - an + 2b + C2n

T(n) (anlogn + b) + [b + (C2 - a)n] . N u l y a C2 + b (**) ta c

T(n) (anlogn + b) + [b +(C2 - C2 - b )n ]

T(n) (anlogn + b) + (1-n) b

T(n) an logn + b.

N u ta l y a và b sao cho c (*) và (**) u tho mãn thì T(n) an logn + b v i m i n.

D dàng ta có b = C1 và a= C1 +C2 ta c T(n) (C1 + C2)nlogn + C1 v i m i n.


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................ Trang 9
Collected by The_Wall (11/10/2005)

Hay nói cách khác T(n) là O(nlogn).

i gi i t ng quát cho m t l p các ph ng trình quy


gi i bài toán kích th c n, ta chia bài toán ã cho thành a bài toán con, m i bài tóan con có
kích th c n/b. Gi i các bài toán con này và t ng h p k t qu l i c k t qu c a bài toán ã cho.
i các bài toán con chúng ta c ng làm nh v y. K thu t này s d n chúng ta n m t ch ng trình
quy.

Gi thi t r ng m i bài toán con kích th c 1 l y m t n v th i gian và th i gian chia bài


toán kích th c n thành các bài toán con kích th c n/b và t ng h p k t qu t các bài toán con
c l i gi i c a bài toán ban u là d(n). (Ch ng h n i v i thí d MergeSort, chúng ta có a = b = 2,
và d(n) = C2n/C1. Xem C1 là m t n v ).

G i T(n) là th i gian gi i bài toán kích th c n thì ta có ph ng trình quy:

Ta s d ng ph ng pháp truy h i gi i ph ng trình này

Gi s n = bk ta c: T(n/bk) = T(1) = 1. Thay vào trên v i i = k ta có:

Hàm ti n tri n, nghi m thu n nh t và nghi m riêng


Trong ph ng trình quy (I.1) hàm th i gian d(n) c g i là hàm ti n tri n (driving
function)

Trong công th c (I.2), ak = nlogba c g i là nghi m thu n nh t (homogeneous solutions).

Nghi m thu n nh t là nghi m chính xác khi d(n) = 0 v i m i n. Nói m t cách khác, nghi m
thu n nh t bi u di n th i gian gi i t t c các bài toán con.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 10


Collected by The_Wall (11/10/2005)

Trong công th c (I.2), c g i là nghi m riêng (particular solutions).

Nghi m riêng bi u di n th i gian ph i tr t o ra các bài toán con và t ng h p các k t qu


a chúng. Nhìn vào công th c ta th y nghi m riêng ph thu c vào hàm ti n tri n, s l ng và kích
th c các bài toán con.

Khi tìm nghi m c a ph ng trình (I,1), chúng ta ph i tìm nghi m riêng và so sánh v i nghi m
thu n nh t. N u nghi m nào l n h n, ta l y nghi m ó làm nghi m c a ph ng trình (I,1).

Vi c xác nh nghi m riêng không n gi n chút nào, tuy v y, chúng ta c ng tìm cm tl p


các hàm ti n tri n có th d dàng xác nh nghi m riêng.

Hàm nhân
M t hàm f(n) c g i là hàm nhân (multiplicative function) n u f(m.n) = f(m).f(n) v i m i
nguyên d ng m và n.

Ví d 1-12: Hàm f(n) = nk là m t hàm nhân, vì f(m.n) = (m.n)k = mk.nk = f(m) f(n)

u d(n) trong (I.1) là m t hàm nhân thì theo tính ch t c a hàm nhân ta có

d(bk-j) = (d(b))k-j và nghi m riêng c a (I.2) là:

Xét ba tr ng h p sau:

1.- N u a > d(b) thì nghi m riêng là O(ak) = O(nlogba). Nh v y nghi m riêng và nghi m thu n
nh t b ng nhau do ó T(n) là O(nlogba).

Ta c ng th y th i gian th c hi n ch ph thu c vào a, b mà không ph thu c vào hàm ti n tri n


d(n). Vì v y c i ti n gi i thu t ta c n gi m a ho c t ng b.

2.- N u a < d(b) thì nghi m riêng là O(d(b)k) = O(nlogbd(b)). Trong tr ng h p này nghi m riêng
n h n nghi m thu n nh t nên T(n) = O(nlogbd(b)).

c i ti n gi i thu t chúng ta c n ý n c d(n), a và b cùng m c nh nhau.

Tr ng h p c bi t quan tr ng khi d(n) = n . Khi ó d(b) = b và logb(b ) = . Vì th nghi m


riêng là O(n ) và do v y T(n) là O(n ).

3.- N u a = d(b) thì công th c (I.5) không xác inh nên ta tính tr c ti p nghi m riêng:

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 11


Collected by The_Wall (11/10/2005)

Vì a= d(b) nên nghi m riêng là nlogbalogbn và nghi m này l n g p logbn l n nghi m thu n nh t.
Do ó T(n) = O(nlogbalogbn).

Trong tr ng h p c bi t d(n) = n ta c T(n) = O(n logn).

Chú ý khi gi i m t ph ng trình quy c th , ta ph i xem ph ng trình ó có thu c d ng


ph ng trình t ng quát hay không. N u có thì ph i xét xem hàm ti n tri n có ph i là hàm nhân không.
u có thì ta xác nh a, d(b) và d a vào s so sánh gi a a và d(b) mà v n d ng m t trong ba tr ng
p nói trên.

Ví d 1-13: Gi i các ph ng trình quy sau v i T(1) = 1 và

1/- T(n) = 4T(n/2) + n

2/- T(n) = 4T(n/2) + n2

3/- T(n) = 4T(n/2) + n3

Trong m i tr ng h p, a=4, b=2 và nghi m thu n nh t là n2. V i d(n) = n ta có d(b) = 2 vì a =


4 > d(b) nên nghi m riêng c ng là n2 và T(n) = O(n2) trong ph ng trình (1).

Trong ph ng trình (3), d(n) = n3, d(b) = 8 và a < d(b). Vì v y nghi m riêng là O(nlogbd(b)) =
O(n ) và T(n) c a (3) là O(n3).
3

Trong ph ng trình (2) chúng ta có d(b) = 4 = a nên T(n) = O(n2logn).

Các hàm ti n tri n khác


Ta xét hai tr ng h p d i d ng hai ví d , tr ng h p 1 là t ng quát hóa c a hàm b t k là tích
a m t hàm nhân v i m t h ng l n h n ho c b ng 1. Tr ng h p th hai là hàm ti n tri n không ph i
là m t hàm nhân.

Ví d 1-14: Gi i pg ng trình quy sau :

T(1) = 1

T(n) = 3T(n/2) + 2n1.5

ây, 2n1.5 không ph i là hàm nhân nh ng n1.5 là hàm nhân. t U(n) = T(n)/2 v i m i n thì

U(1) = 1/2

U(n) = 3U(n/2) + n1.5

Nghi m thu n nh t khi U(1) = 1 là nlog3 = n1.59; vì U(1) = 1/2 nên nghi m thu n nh t là n1.59/2 là
1.59
O(n ). Vì a = 3 và b = 2 và b1.5 = 2.82 < a, nghi m riêng c ng là O(n1.59) và do ó U(n) = O(n1.59) . Vì

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 12


Collected by The_Wall (11/10/2005)

T(n) = 2U(n) nên T(n) = O(n1.59) hay T(n) = O(nlog3).

Ví d 1-15: Gi i ph ng trình quy sau :

T(1) = 1

T(n) = 2T(n/2) + nlogn

Vì a = b = 2 nên nghi m thu n nh t là n. Tuy nhiên, d(n) = nlogn không ph i là hàm nhân ta
ph i tính nghi m riêng b ng cách xét tr c ti p:

Vì k = logn chúng ta có nghi m riêng là O(nlog2n), nghi m này l n h n nghi m thu n nh t và


T(n) = O(nlog2n).

Bài 1: Tính th i gian th c hi n c a các n ch ng trình sau:

a) Tính t ng c a các s

Sum := 0;
for i:=1 to n do begin
readln(x);
Sum := Sum + x;
end;

b) Tính tích hai ma tr n vuông c p n C = A*B:

for i := 1 to n do
for j := 1 to n do begin
c[i,j] := 0;
for k := 1 to n do c[i,j] := c[i,j] + a[i,k] * b[k,j];
end;

Bài 2: Gi i các ph ng trình quy sau v i T(1) = 1 và

a) T(n) = 3T(n/2) + n

b) T(n) = 3T(n/2) + n2

c) T(n) = 8T(n/2) + n3

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 13


Collected by The_Wall (11/10/2005)

Bài 3: Gi i các ph ng trình quy sau v i T(1) = 1 và

a) T(n) = 4T(n/3) + n

b) T(n) = 4T(n/3) + n2

c) T(n) = 9T(n/3) + n2

Bài 4: Gi i các ph ng trình quy sau v i T(1) = 1 và

a) T(n) = T(n/2) + 1

b) T(n) = 2T(n/2) + logn

c) T(n) = 2T(n/2) + n

d) T(n) = 2T(n/2) + n2

Bài 5: Gi i các ph ng trình quy sau b ng ph ng pháp oán nghi m:

a) T(1) = 2 và T(n) = 2T(n-1) + 1 v i ∀ n 2

b) T(1) = 1 và T(n) = 2T(n-1) + n v i ∀ n 2

Bài 6: Cho m t m ng n s nguyên c s p th t t ng. Vi t hàm tìm m t s nguyên trong


ng ó, n u tìm th y thì tr v TRUE, ng c l i tr v FALSE.

d ng hai ph ng pháp tìm ki m tu n t và tìm ki m nh phân. V i m i ph ng pháp hãy vi t m t


hàm tìm và tính th i gian th c hi n c a hàm ó.

Bài 7: Tính th i gian th c hi n c a gi i thu t quy gi i bài toán Tháp Hà n i v i n t ng?

Bài 8: Xét nh ngh a s t h p ch p k c a n nh sau:

a) Vi t m t hàm quy tính s t h p ch p k c a n.

Tính th i gian th c hi n c a gi i thu t nói trên.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 14


Collected by The_Wall (11/10/2005)

1. M c tiêu
2. Ki n th c c b n c n có h c ch ng này
3. Tài li u tham kh o có liên quan n ch ng
4. N i dung:
II.1 - Bài toán s p x p.
II.2 - Các ph ng pháp s p x p n gi n
II.3 - Quicksort.
II.4 - Heapsort.
II.5 - Binsort.
5. V n nghiên c u c a trang k ti p

Trong ch ng này chúng ta s nghiên c u các v n sau:

· Bài toán s p x p.

· M t s gi i thu t s p x p n gi n.

· QuickSort

· HeapSort

· BinSort

II.1- BÀI TOÁN S P X P


II.1.1 T m quan tr ng c a bài toán s p x p
II.1.2 S p x p trong và s p x p ngoài
II.1.3 T ch c d li u và ngôn ng cài t

II.1.1 T m quan tr ng c a bài toán s p x p


S p x p m t danh sách các i t ng theo m t th t nào là m t bài toán th ng cv n
ng trong các ng d ng tin h c. Ví d ta c n s p x p danh sách thí sinh theo tên v i th t Alphabet,
ho c s p x p danh sách sinh viên theo m trung bình v i th t t cao n th p. M t ví d khác là
khi c n tìm ki m m t i t ng trong m t danh sách các i t ng b ng gi i thu t tìm ki m nh phân
thì danh sách các i t ng này ph i c s p x p tr c ó.

Tóm l i s p x p là m t yêu c u không th thi u trong khi thi t k các ph n m m.

II.1.2 S p x p trong và s p x p ngoài


S p x p trong là s s p x p d li u c t ch c trong b nh trong cu máy tính, ó ta có
th s d ng kh n ng truy nh p ng u nhiên c a b nh và do v y s th c hi n r t nhanh.

S p x p ngoài là s s p x p c s d ng khi s l ng i t ng c s p x p l n không th


u tr trong b nh trong mà ph i l u tr î trên b nh ngoài. C th là ta s s p x p d li u cl u
tr trong các t p tin.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 15
Collected by The_Wall (11/10/2005)

Ch ng này t p trung gi i quy t v n s p x p trong còn s p x p ngoài s c nghiên c u


trong ch ng IV.

II.1.3 T ch c d li u và ngôn ng cài t


Các i t ng c n c s p x p là các m u tin g m m t ho c nhi u tr ng. M t trong các
tr ng c g i là khóa (key), ki u c a nó là m t ki u có quan h th t (nh các ki u s nguyên, s
th c, chu i ký t ...).

Danh sách các i t ng c n s p x p s là m t m ng c a các m u tin v a nói trên. M c ích


a vi c s p x p là t ch c l i các m u tin sao cho các khóa c a chúng c s p th t t ng ng v i
quy lu t s p x p.

trình bày các ví d minh h a chúng ta s dùng PASCAL làm ngôn ng th hi n và s d ng


khai báo sau:

const N = 100;
type
KeyType = integer;
OtherType = real;

RecordType = Record
Key : KeyType;
OtherFields : OtherType;
end;
var
a : array[1..N] of RecordType;

procedure Swap(var x,y:RecordType);


var
temp : RecordType;
begin
temp := x;
x := y;
y := temp;
end;

n th y r ng th t c Swap l y O(1) th i gian vì ch th c hi n 3 l nh gán n i ti p nhau.


II.2- CÁC PH NG PHÁP S P X P N GI N
II.2.1- S p x p ch n
II.2.2- S p x p xen
II.2.3- S p x p n i b t

Các gi i thu t n gi n th ng l y O(n2) th i gian s px pn it ng và các gi i thu t này


th ng ch dùng s p các danh sách có ít i t ng.

V i m i gi i thu t chúng ta s nghiên c u các ph n: gi i thu t, ví d , ch ng trình và phân tích


ánh giá.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 16
Collected by The_Wall (11/10/2005)

II.2.1- S p x p ch n (Selection Sort)


Gi i thu t
ây là ph ng pháp s p x p n gi n nh t c ti n hành nh sau:

· u tiên ch n ph n t có khóa nh nh t trong n ph n t t a[1] n a[n] và hoán v nó


i ph n t a[1].

· Ch n ph n t có khóa nh nh t trong n-1ph n t t a[2] n a[n] và hoán v nó v i a[2].

· T ng quát b c th i, ch n ph n t có khoá nh nh t trong n-i+1 ph n t t a[i] n


a[n] và hoán v nó v i a[i].

· Sau n-1 b c này thì m ng ã c s p x p.

Ph ng pháp này c g i là ph ng pháp ch n b i vì nó l p l i quá trình ch n ph n t nh


nh t trong s các ph n t ch a c s p.

Ví d 2-1: S p x p m ng g m 10 m u tin có khóa là các s nguyên: 5, 6, 2, 2, 10, 12, 9, 10, 9


và 3

Khoá
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
c
Ban u 5 6 2 2 10 12 9 10 9 3
c1 2 6 5 2 10 12 9 10 9 3
c2 2 5 6 10 12 9 10 9 3
c3 3 6 10 12 9 10 9 5
c4 5 10 12 9 10 9 6
c5 6 12 9 10 9 10
c6 9 12 10 9 10
c7 9 10 12 10
c8 10 12 10
c9 10 12
t qu 2 2 3 5 6 9 9 10 10 12

Hình 2-1: S p x p ch n

Ch ng trình:
procedure SelectionSort;
var
i,j,LowIndex: integer;
LowKey: KeyType;
begin
(1) for i := 1 to n-1 do begin
(2) LowIndex := i;
(3) LowKey := a[i].key;
(4) for j := i+1 to n do
(5) if a[j].key < LowKey then
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 17
Collected by The_Wall (11/10/2005)

begin
(6) LowKey := a[j].key;
(7) LowIndex := j;
end;
(8) Swap(a[i] , a[LowIndex]);
end;
end;

ánh giá: Ph ng pháp s p x p ch n l y O(n2) s p x p n ph n t .

Tr c h t ta có th t c Swap l y m t h ng th i gian nh ã nói m c II.1.3.

Các l nh (2), (3) u l y O(1) th i gian. Vòng l p for (4) - (7) th c hi n n-i l n, vì j ch y t
i+1 n n, m i l n l y O(1), nên l y O(n-i) th i gian. Do ó th i gian t ng c ng là:

II.2.2- S p x p xen (Insertion Sort)


Gi i thu t
Tr c h t ta xem ph n t a[1] là m t dãy ã có th t .

·B c 1, xen ph n t a[2] vào danh sách ã có th t a[1] sao cho a[1], a[2] là m t danh
sách có th t .

· B c 2, xen ph n t a[3] vào danh sách ã có th t a[1], a[2] sao cho a[1], a[2], a[3] là
t danh sách có th t .

· T ng quát, b c i, xen ph n t a[i+1] vào danh sách ã có th t a[1],a[2],..a[i] sao cho


a[1], a[2],.. a[i+1] là m t danh sách có th t .

· Ph n t ang xét a[j] s c xen vào v trí thích h p trong danh sách các ph n t ã
c s p tr c ó a[1],a[2],..a[j-1] b ng cách so sánh khoá c a a[j] v i khoá c a a[j-1] ng ngay
tr c nó. N u khoá c a a[j] nh h n khoá c a a[j-1] thì hoán i a[j-1] và a[j] cho nhau và ti p t c so
sánh khoá c a a[j-1] (lúc này a[j-1] ch a n i dung c a a[j]) v i khoá c a a[j-2] ng ngay tr c nó...

Ví d 2-2: S p x p m ng g m 10 m u tin ã cho trong ví d 2-1.

Khoá
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
c
Ban u 5 6 2 2 10 12 9 10 9 3
c1 5 6
c2 2 5 6
c3 2 2 5 6
c4 2 2 5 6 10
c5 2 2 5 6 10 12
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 18
Collected by The_Wall (11/10/2005)

c6 2 2 5 6 9 10 12
c7 2 2 5 6 9 10 10 12
c8 2 2 5 6 9 9 10 10 12
c9 2 2 3 5 6 9 9 10 10 12

Hình 2-2: S p x p xen

Ch ng trình
procedure InsertionSort;
var
i,j: integer;
begin
{1} for i := 2 to n do begin
{2} J := i;
{3} while (j>1) and (a[j].key < a[j-1].key) do begin
{4} swap(a[j], a[j-1]);
{5} j := j-1;
end;
end;
end;

ánh giá: Ph ng pháp s p x p ch n l y O(n2) s p x p n ph n t .


Ta th y các l nh (4) và (5) u l y O(1). Vòng l p (3) ch y nhi u nh t i-1 l n, m i l n t n
O(1) nên (3) l y i-1 th i gian. L nh (2) và (3) là hai l nh n i ti p nhau, l nh (2) l y O(1) nên c hai
nh này l y i-1.

Vòng l p (1) có i ch y t 2 n n nên n u g i T(n) là th i gian s p n ph n t thì ta có

II.2.3- S p x p n i b t (Bubble Sort)


Gi i thu t
Chúng ta t ng t ng r ng các m u tin c l u trong m t m ng d c, qua quá trình s p, m u
tin nào có khóa “nh ” s c n i lên trên. Chúng ta duy t tòan m ng, t d i lên trên. N u hai ph n
c nh nhau mà không úng th t t c là n u ph n t “nh h n” l i n m d i thì ph i cho nó “n i
lên” b ng cách i ch hai ph n t này cho nhau. C th là:

· B c 1: Xét các ph n t t a[n] n a[2], v i m i ph n t a[j], so sánh khoá c a nó v i


khoá c a ph n t a[j-1] ng ngay tr c nó. N u khoá c a a[j] nh h n khoá c a a[j-1] thì hoán i
a[j] và a[j-1] cho nhau.

·B c 2: Xét các ph n t t a[n] n a[3], và làm t ng t nh trên.

· T ng quát b c th i, ta s xét các ph n t t a[n] n a[i+1].

Sau n b c ta thu c m ng có th t

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 19


Collected by The_Wall (11/10/2005)

Ví d 2-3: S p x p m ng g m 10 m u tin ã cho trong ví d 2-1.

Khoá
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
c
Ban u 5 6 2 2 10 12 9 10 9 3
c1 2 5 6 2 3 10 12 9 10 9
c2 2 5 6 3 9 10 12 9 10
c3 3 5 6 9 9 10 12 10
c4 5 6 9 9 10 10 12
c5 6 9 9 10 10 12
c6 9 9 10 10 12
c7 9 10 10 12
c8 10 10 12
c9 10 12
t qu 2 2 3 5 6 9 9 10 10 12

Hình 2-3: S p x p n i b t

Ch ng trình
procedure BubbleSort;
var
i,j: integer;
begin
(1) for i := 1 to n-1 do
(2) for j := n downto i+1 do
(3) if a[j].key < a[j-1].key then
(4) Swap(a[j],a[j-1]);
end;

ánh giá: Ph ng pháp s p x p n i b t l y O(n2) s p n ph n t .


Dòng l nh (3) l y m t h ng th i gian. Vòng l p (2) th c hi n (n-i) b c, m i b c l y O(1)
nên l y O(n-i) th i gian. Nh v y i v i toàn b ch ng trình ta có:

II.3- QUICKSORT
II.3.1- Ý t ng
II.3.2- Thi t k gi i thu t
II.3.3- Cài t gi i thu t
II.3.4- Th i gian th c hi n c a QuickSort

Trong ph n này chúng ta s nghiên c u m t gi i thu t s p x p c dùng m t cách ph bi n là


Quick Sort do A.R. Hoare phát minh vào n m 1960. Quick Sort c ánh giá t t nh vào s phân tích
toán h c và các kh ng nh v kh n ng c a nó. Quick Sort ã c c i ti n tr thành ph ng pháp
c ch n trong các ng d ng s p x p th c t khác nhau.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 20
Collected by The_Wall (11/10/2005)

II.3.1- Ý t ng
Chúng ta v n xét m ng a các m u tin a[1]..a[n]. Gi s v là 1 giá tr khóa mà ta g i là ch t
(pivot). Ta phân ho ch dãy a[1]..a[n] thành hai m ng con "bên trái" và "bên ph i". M ng con "bên trái"
bao g m các ph n t có khóa nh h n ch t, m ng con "bên ph i" bao g m các ph n t có khóa l n h n
ho c b ng ch t.

S p x p m ng con “bên trái” và m ng con “bên ph i” thì m ng ã cho s c s p b i vì t t c


các khóa trong m ng con “bên trái “ u nh h n các khóa trong m ng con “bên ph i”.

Vi c s p x p các m ng con “bên trái” và “bên ph i” c ng c ti n hành b ng ph ng pháp


nói trên.

M t m ng ch g m m t ph n t ho c g m nhi u ph n t có khóa b ng nhau thì xem nh ã có


th t .

II.3.2- Thi t k gi i thu t


n ch n ch t
Ch n khóa l n nh t trong hai ph n t có khóa khác nhau u tiên k t trái qua. N u m ng ch
m m t ph n t hay g m nhi u ph n t có khóa b ng nhau thì không có ch t.

n ph n ho ch

phân ho ch m ng ta dùng 2 "con nháy" L và R trong ó L t bên trái và R t bên ph i, ta


cho L ch y sang ph i cho t i khi g p ph n t có khóa ch t và cho R ch y sang trái cho t i khi g p
ph n t có khóa < ch t. T i ch d ng c a L và R n u L<R thì hoán v a[L],a[R]. L p l i quá trình d ch
sang ph i, sang trái c a 2 "con nháy" L và R cho n khi L>R. Khi ó L s là m phân ho ch, c th
là a[L] là ph n t u tiên c a m ng con “bên ph i”.

Gi i thu t QuickSort

s p x p m ng a[i]..a[j] ta ti n hành các b c sau:

· Xác nh ch t,

· Phân ho ch m ng ã cho thành hai m ng con a[i]..a[k-1] và a[k]..a[j].

· S p x p m ng a[i]..a[k-1] ( quy).

· S p x p m ng a[k]..a[j] ( quy).

Quá trình quy s d ng khi không còn tìm th y ch t.

Ví d 2-4: Ta c n s p m t m ng mà khóa là các s nguyên ã c trình bày trong ví d 2-1.


Hai ph n t u tiên có khóa khác nhau là 5 và 6, ta ch n 6 làm ch t và ti n hành phân ho ch m ng
ban u làm hai m ng con và quy cho hai m ng con này.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 21


Collected by The_Wall (11/10/2005)

II.3.3- Cài t gi i thu t


Hàm FindPivot
Ta thi t k hàm FindPivot xác nh trong dãy a[i]..a[j] xem có hay không hai ph n t có
khóa khác nhau. N u không tìm th y hai ph n t có khóa khác nhau thì tr v giá tr 0 (không tìm th y
ch t), ng c l i hàm tr v giá tr là ch s c a ph n t có khóa l n h n trong hai ph n t có khóa khác
nhau u tiên. Khóa l n h n này s tr thành ph n t ch t mà ta s xác nh trong th t c QuickSort.

ti n so sánh ta s d ng bi n FirstKey l u gi khóa c a ph n t u tiên trong m ng


a[i]..a[j] (FirstKey chính là a[i].key).

Ta s dùng m t ch s k dò tìm trong m ng a[i]..a[j], k t v trí i+1 n h t m ng, m t ph n


a[k] mà a[k].key <> FirstKey. N u không tìm th y m t a[k] nh th thì ho c là m ng ch g m m t
ph n t ho c g m nhi u ph n t có khóa b ng nhau. Trong tr ng h p ó thì không tìm th y ch t và
hàm FindPivot s tr v 0. Ng c l i ta s ph i xét xem a[k].key có l n h n FirstKey hay không, n u
úng nh th thì ch t s là khóa c a a[k] và hàm FindPivot s tr v k, n u không thì hàm FindPivot s
tr v i.

Function FindPivot(i,j:integer): integer;


var
FirstKey : KeyType;
k : integer;
begin
k := i+1;
FirstKey := a[i].key;
while (k<=j) and (a[k].key = FirstKey) do k:= k+1;
if k > j then FindPivot := 0
else
if a[k].key > FirstKey then FindPivot := k
else FindPivot := i;
end;

Hàm Partition
Hàm Partition nh n vào ba tham s i, j và Pivot th c hi n vi c phân ho ch theo m ng
a[i]..a[j] theo ch t Pivot và tr v giá tr l là ch s u tiên c a m ng “bên ph i”.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 22


Collected by The_Wall (11/10/2005)

Hai con nháy L, R s c s d ng th c hi n vi c phân ho ch nh ã trình bày trong ph n


II.3.2.

Function Partition(i,j:integer; pivot :KeyType):integer ;


var l,r : integer;
begin
l := i; { t con nháy L ì bên trái}
r := j; { t con nháy R ì bên ph i}
while l <= r do begin
{L ti n sang ph i}
while a[l].key < pivot do l := l+1;
{R ti n sang trái}
while a[r].key >= pivot do r := r-1;
if l <r then Swap(a[l],a[r]);
end;
Partition :=l;
end;

QuickSort
Bây gi chúng ta trình bày th t c cu i cùng có tên là QuickSort và chú ý r ng s px p
ng A các record g m n ph n t c a ki u Recordtype ta ch c n g i QuickSort(1,n).

Ta s s d ng bi n PivotIndex l u gi k t qu tr v c a hàm FindPivot, n u bi n


PivotIndex nh n c m t giá tr khác 0 thì m i ti n hành phân ho ch m ng. Bi n Pivot s cs
ng l u gi giá tr ch t và bi n k l u gi giá tr c a m phân ho ch do hàm Partition tr v .
Sau khia ã phân ho ch xong ta s g i quy QuickSort cho m ng con “bên trái” a[i]..a[k-1] và m ng
con “bên ph i” a[k]..a[j].

procedure Quicksort(i,j:integer);
var
Pivot : KeyType;
PivotIndex, k : integer;
begin
(1) PivotIndex := FindPivot(i,j);
(2) if PivotIndex <> 0 then
begin
(3) Pivot := a[PivotIndex].key;
(4) k := Partition(i,j,Pivot);
(5) QuickSort(i,k-1);
(6) QuickSort(k,j);
end;
end;

II.3.4- Th i gian th c hi n c a QuickSort


QuickSort l y O(nlogn) th i gian s p x p n ph n t trong tr ng h p t t nh t và O(n2).
trong tr ng h p x u nh t.

Hàm Partition l y th i gian t l v i s ph n t c a m ng. Nh v y n u m ng có n ph n t thì


Partition l y P(n)= n n v th i gian.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 23
Collected by The_Wall (11/10/2005)

G i T(n) là th i gian th c hi n c a QuickSort thì T(n) ph i là t ng c a P(n) và th i gian


QuickSort quy cho hai m ng con.

Gi s các giá tr khóa c a m ng khác nhau. Trong tr ng h p x u nh t là ta luôn ch n ph i


ph n t có khóa l n nh t làm ch t, lúc b y gi vi c phân ho ch b l ch t c là m ng bên ph i ch g m
t ph n t ch t, còn m ng bên trái g m n-1 ph n t còn l i. Khi ó ta có th thành l p ph ng trình
quy nh sau:

Gi i ph ng trình này b ng ph ng pháp truy h i

Ta có T(n) = T(n-1) + T(1) +n = T(n-1) + (n+1)

= [T(n-2) + T(1) +(n-1)] + (n+1) = T(n-2) + n + (n+1)

= [T(n-3) + T(1) +(n-2)] + n + (n+1) = T(n-3) +(n-1) + n + (n+1)

.................

= T(n-i) + (n-i+2) + (n-i+3) + ... + n + (n+1) = T(n-i) +


Quá trình trên k t thúc khi i=n-1, khi ó ta có

Trong tr ng h p t t nh t khi ta ch n c ch t sao cho hai m ng con có kích th c b ng


nhau và b ng n/2. Lúc ó ta có ph ng trình quy nh sau:

Gi i ph ng trình quy này (xem I.4.2) ta c T(n) = O(nlogn).

Ng i ta c ng ch ng minh c r ng trong tr ng h p trung bình QuickSort l y T(n) =


O(nlogn).
II.4- HEAPSORT
II.4.1- Heap
II.4.2- Ý t ng
II.4.3- Thi t k và cài t gi i thu t
II.4.4- Phân tích HeapSort

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 24


Collected by The_Wall (11/10/2005)

II.4.1- Heap
Cây s p th t b ph n hay còn g i là heap là cây nh phân mà giá tr t i m i nút (khác nút lá)
u không l n h n giá tr c a các con c a nó.

Ta có nh n xét r ng nút g c a[1] c a cây s p th t b ph n có giá tr nh nh t.

Ví d 2-5: Cây sau là m t heap.

II.4.2- Ý t ng
(1) Xem m ng ban u là m t cây nh phân. M i nút trên cây l u tr m t ph n t m ng,
trong ó a[1] là nút g c và m i nút không là nút lá a[i] có con trái là a[2i] và con ph i là a[2i+1]. V i
cách t ch c này thì cây nh phân thu c s có các nút trong là các nút a[1],..,a[n DIV 2]. T t c các
nút trong u có 2 con, ngo i tr nút a[n DIV 2] có th ch có m t con trái (trong tr ng h p n là m t
ch n).

(2) S p x p cây ban u thành m t heap c n c vào giá tr khoá c a các nút.

(3) Hoán i a[1] cho cho ph n t cu i cùng.

(4) p l i cây sau khi ã b i ph n t cu i cùng nó tr thành m t heap m i.

L p l i quá trình (3) và (4) cho t i khi cây r ng ta s c m ng s p theo th t gi m.

II.4.3- Thi t k và cài t gi i thu t


Th t c PushDown

Gi s a[first],..,a[last] ã úng v trí (giá tr khoá t i m i nút nh h n ho c b ng giá tr khoá


i các nút con c a nó) ngo i tr a[first]. PushDown dùng y ph n t a[first] xu ng úng v trí c a
nó trong cây (và có th gây ra vi c y xu ng các ph n t khác).

Xét a[first], có hai kh n ng có th x y ra:

· N u a[first] có khoá l n h n con trái c a nó (a[first].key > a[2*first].key) và khoá c a


con trái không l n h n khoá c a con ph i (a[2*first].key a[2*first+1].key) thì hoán i a[first] cho
con trái a[2*first] c a nó, vi c này có th gây ra tình tr ng con trái s không úng v trí nên ph i xem
xét l i con trái.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 25


Collected by The_Wall (11/10/2005)

· Ng c l i, n u a[first] có khoá l n h n khoá c a con ph i c a nó (a[first].key >


a[2*first+1].key ) và khoá c a con ph i nh h n khoá c a con trái (a[2*first+1].key < a[2*first].key)
thì hoán i a[first] cho con ph i a[2*first+1] c a nó, vi c này có th gây ra tình tr ng con ph i s
không úng v trí nên ph i ti p t c xem xét con ph i.

· N u c hai tr ng trên u không x y ra thì a[first] ã úng v trí.

· Nh trên ta th y vi c y a[first] xu ng có th gây ra vi c y xu ng m t s ph n t


khác, nên t ng quát là ta s xét vi c y xu ng c a m t ph n t a[r] b t k , b t u t a[first].

procedure PushDown(first,last:integer);
var r:integer;
begin
r:= first; {Xét nút a[first] tr c h t}
while r <= last div 2 do
{Trong khi a[r] còn là nút trong}
if last = 2*r then begin {nút r ch có con trái }
if a[r].key > a[last].key then swap(a[r],a[last]);
r:=last;
end
else
if (a[r].key>a[2*r].key)and(a[2*r].key a[2*r+1].key)then begin
swap(a[r],a[2*r]);
r := 2*r ; {Xét ti p nút con trái }
end
else
if (a[r].key > a[2*r+1].key) and (a[2*r+1].key < a[2*r].key) then begin
swap(a[r],a[2*r+1]);
r := 2*r+1 ; {Xét ti p nút con ph i }
end
else
r := last; {Nút r ã úng v trí }
end;

Th t c HeapSort
· Vi c s p x p cây ban u thành m t heap c ti n hành b ng cách s d ng th t c
PushDown y t t c các nút trong ch a úng v trí xu ng úng v trí c a nó, kh i u t nút a[n
DIV 2], l n ng c t i g c.

· L p l i vi c hoán i a[1] cho a[i], s p x p cây a[1]..a[i-1] thành heap, i ch y t n n 2.

procedure HeapSort;
var
i:integer;
begin
(1) for i := (n div 2) downto 1 do
(2) PushDown(i,n);
(3) for i := n downto 2 do begin
(4) swap(a[1],a[i]);
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 26
Collected by The_Wall (11/10/2005)

(5) pushdown(1,i-1);
end;
end;

Ví d 2-6: S p x p m ng bao g m 10 ph n t có khoá là các s nguyên nh trong các ví d


tr c:

Khoá a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
Ban u 5 6 2 2 10 12 9 10 9 3

M ng này c xem nh là m t cây nh phân ban u nh sau:

Trong cây trên, giá tr ghi trong các nút là khoá c a các phân t m ng, giá tr ghi bên ngoài các
nút là ch s c a các ph n t m ng.

Vi c s p x p cây này thành m t heap s b t u t vi c y xu ng nút a[5] (vì 5 = 10 DIV 2)

Xét nút 5 ta th y a[5] ch có m t con trái và giá tr khóa t ng ng c a nó l n h n con trái c a


nó nên ta i hai nút này cho nhau và do con trái c a a[5] là a[10] là m t nút lá nên vi c y xu ng c a
a[5] k t thúc.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 27


Collected by The_Wall (11/10/2005)

Nút 4 và nút 3 ã úng v trí nên không ph i th c hi n s hoán i. T i nút 2, giá tr khóa c a
nó l n h n khoá con trái và khoá c a con trái nh h n khoá c a con ph i nên ta hóan i nút 2 cho con
trái c a nó (nút 4), sau khi hoán i, ta xét l i nút 4, th y nó v n úng v trí nên k t thúc vi c y
xu ng c a nút 2.

Cu i cùng ta xét nút 1, ta th y giá tr khoá c a nút 1 l n h n khoá c a con trái và con trái có
khoá b ng khoá c a con ph i nên hóan i nút 1 cho con trái c a nó (nút 2).

Sau khi th c hi n phép hóan i nút 1 cho nút 2, ta th y nút 2 có giá tr khoá l n h n khoá c a
con ph i c a nó (nút 5) và con ph i có khoá nh h n khoá c a con trái nên ph i th c hi n phép hoán
i nút 2 cho nút 5. Xét l i nút 5 thì nó v n úng v trí nên ta c cây m i trong hình 2-9.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 28


Collected by The_Wall (11/10/2005)

Cây này là m t heap t ng ng v i m ng

Khoá a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
Heap 2 3 2 6 5 12 9 10 9 10

T heap ã có trên, hoán i a[1] cho a[10] ta có a[10] là nút có khóa nh nh t, c t b nút
a[10] ra kh i cây. Nh v y ph n cu i m ng ch g m m t ph n t a[10] ã c s p.

Th c hi n vi c y a[1] xu ng úng v trí c a nó trong cây a[1]..a[9] ta c cây:

Hoán i a[1] cho a[9] và c t a[9] ra kh i cây. Ta c ph n cu i m ng bao g m hai ph n t


a[9]..a[10] ã c s p. Th c hi n vi c y a[1] xu ng úng v trí c a nó trong cây a[1]..a[8] ta c
cây

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 29


Collected by The_Wall (11/10/2005)

Ti p t c quá trình trên ta s c m t m ng có th t gi m.

II.4.4- Phân tích HeapSort


Th i gian th c hi n c a HeapSort là O(n logn)

Trong th t c PushDown m i l n l p, r có ít nh t 2 giá tr , vì r b t u b ng first nên sau i l n


p, chúng ta có r first * 2i. Th t c d ng khi r > last/2 do v y khi th t c d ng thì ta có first*2i >
last/2 hay 2i+1 > last/first. Suy ra i > log(last/first) - 1 t c là s l n l p nhi u nh t c a th t c PushDown
là log(last/first).

Vì first 1 và last n trong m i l n g i PushDown c a th t c HeapSort t i dòng (2) ho c (5)


nên s l n l p logn, m i b c l p l y m t th i gian O(1) nên th i gian th c hi n c a PushDown là
O(logn).

Trong th t c HeapSort dòng l nh (1)-(2) l p n/2 l n mà m i l n l y O(logn) nên th i gian


th c hi n (1)-(2) là O(n logn). Vòng l p (3)-(4)-(5) l p n-1 l n, m i l n l y O(logn) nên th i gian th c
hi n (3)-(4)-(5) là O(n logn). Tóm l i th i gian th c hi n HeapSort là O(n logn)
II.5- BINSORT
II.5.1- Gi i thu t
II.5.2- Phân tích Bin Sort
II.5.3- S p x p t p giá tr có khoá l n

II.5.1- Gi i thu t
Nói chung các gi i thu t ã trình bày trên u có ph c t p là O(n2) ho c O(nlogn). Tuy
nhiên khi ki u d li u c a tr ng khoá là m t ki u c bi t , vi c s p x p có th ch chi m O(n) th i
gian. Sau ây ta s xét m t s tr ng h p.

Tr ng h p n gi n: Gi s ta ph i s p x p m t m ng A g m n ph n t có khoá là các s
nguyên có giá tr khác nhau và là các giá tr t 1 n n. Ta s d ng B là m t m ng cùng ki u v i A và
phân ph i vào ph n t b[j] m t ph n t a[i] mà a[i].key = j. Khi ó m ng B l u tr k t qu ã cs p
p c a m ng A.

Ví d 2-7: S p x p m ng A g m 10 ph n t có khoá là các s nguyên có giá tr là các s 4, 5,

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 30


Collected by The_Wall (11/10/2005)

2, 1, 7, 8, 10, 9, 6 và 3

Ta s d ng m ng B có cùng ki u v i A và th c hi n vi c phân ph i a[1] vào b[4] vì a[1].key =


4, a[2] vào b[5] vì a[2].key = 5, a[3] vào b[2] vì a[3].key = 2,...

th c hi n vi c phân ph i này ta ch c n m t l nh l p:

for i:=1 to n do B[A[i].key] := A[i]

ây c ng là l nh chính trong ch ng trình s p x p. L nh này l y O(n) th i gian.

Các ph n t b[j] c g i là các bin và ph ng pháp s p x p này c g i là bin sort.

Tr ng h p t ng quát: Là tr ng h p có th có nhi u ph n t có chung m t giá tr khóa,


ch ng h n s p m t m ng A có n ph n t mà các giá tr khóa c a chúng là các s nguyên l y giá tr
trong kho ng 1..m v i m n. Trong tr ng h p này ta không th s d ng các ph n t c a m ng B làm
bin c vì n u có hai ph n t c a m ng A có cùng m t khoá thì không th l u tr trong cùng m t bin.

gi i quy t s ng này ta chu n b m t c u trúc có m bin, m i bin có th l u tr nhi u


n m t ph n t . C th là bin th j s l u các ph n t có khóa là j (1 j m) sau ó ta s n i các bin
i v i nhau c m t dãy các ph n t c s p.

Cách t t nh t là ta thi t k m i bin là m t danh sách liên k t c a các ph n t mà m i ph n t


có ki u RecordType. Ta s g i ki u c a danh sách này là ListType.

Ta có th t o ki u ListType b ng cách ghép RecordType v i m t con tr tr t i ph n t k


ti p.

L y B là m t m ng ki u Array[KeyType] of ListType. Nh v y B là m ng các bin, m i bin là


t danh sách. B c ánh ch s b i KeyType, nh th có ít nh t m t bin cho m i giá tr khoá.

Ta v n s phân ph i ph n t a[i] vào bin b[j] n u j = a[i]key. D nhiên m i bin b[j] có th ch a


nhi u ph n t c a m ng A. Các ph n t m i s c a vào cu i danh sách b[j].

Sau khi t t c các ph n t c a m ng A ã c phân ph i vào trong các bin, công vi c cu i


cùng là ta ph i n i các bin l i v i nhau, ta s c m t danh sách có th t . Ta s dùng th t c
concatenate(L1,L2) n i hai danh sách L1, L2. Nó thay th danh sách L1 b i danh sách n i L1L2. Vi c
is c th c hi n b ng cách g n con tr c a ph n t cu i cùng c a L1 vào u c a L2. Ta bi t r ng
n c ph n t cu i cùng c a danh sách liên k t L1 ta ph i duy t qua t t c các ph n t c a nó.
cho có hi u qu , ta thêm m t con tr n a, tr n ph n t cu i cùng c a m i danh sách, u này
giúp ta i th ng t i ph n t cu i cùng mà không ph i duy t qua toàn b danh sách.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 31


Collected by The_Wall (11/10/2005)

Hình 2-13 minh h a vi c n i hai danh sách.

Sau khi n i thì header và end c a danh sách L2 không còn tác d ng n a.

Ví d 2-8: S p x p m ng A g m 10 ph n t có khoá là các s nguyên có giá tr là các s 2, 4,


1, 5, 4, 2, 1, 4, 1, 5.

A a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]
Khoá c a A 2 4 1 5 4 2 1 4 1 5

Ta th y các giá tr khoá n m trong kho ng 1..5. Ta t ch c m t m ng B g m 5 ph n t , m i


ph n t là m t con tr , tr n m t danh sách liên k t .

Ch ng trình s d ng c u trúc danh sách liên k t làm các bin

VAR
A: array[1..n] of RecordType;
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 32
Collected by The_Wall (11/10/2005)

B: array[keytype] of ListType;
{Ta gi thi t keytype là ki u mi n con 1..m }
procedure BinSort;
var
i:integer;
j: KeyType;
begin
{1}for i:=1 to n do
INSERT(A[i], END(B[A[i].key]), B[A[i}.key]);
{2}for j:= 2 to m do
CONCATENATE(B[1], B[j]);
end;

II.5.2- Phân tích Bin Sort


Bin sort l y O(n) th i gian s p x p m ng g m n ph n t .

Tr c h t th t c INSERT c n m t th i gian O(1) xen m t ph n t vào trong danh sách. Do


cách t ch c danh sách có gi con tr n ph n t cu i cùng nên vi c n i hai danh sách b ng th t c
CONCATENATE c ng ch m t O(1) th i gian. Ta th y vòng l p {1} th c hi n n l n, m i l n t n O(1)
= 1 nên l y O(n) n v th i gian. Vòng l p {2} th c hi n m-1 l n, m i l n O(1) nên t n O(m) n v
th i gian. Hai l nh {1} và {2} n i ti p nhau nên th i gian th c hi n c a BinSort là T(n) = O(max(n,m))
= O(n) vì m n.

II.5.3- S p x p t p giá tr có khoá l n


N u m s các khoá không l n h n n s các ph n t c n s p x p, khi ó O(max(n,m)) th c s là
O(n). N u gi s m = n2 khi ó O(max(n, n2)) là O(n2) nh v y Bin sort l y O(n2) th i gian.

Tuy nhiên ta v n có th t ng quát hoá k thu t bin sort nó v n l y O(n) th i gian.

Gi s ta c n s p x p n ph n t có các giá tr khoá thu c 0..n2-1.

Ta s s d ng n bin B[0], B[1],...B[n-1] và ti n hành vi c s p x p trong hai k .

K 1: Phân ph i ph n t a[i] vào bin B[j] mà j = a[i].key MOD n.

K 2: Phân ph i các phân t trong danh sách k t qu c a k 1 vào các bin. Ph n t a[i] s c
phân ph i vào bin B[j] mà j = a[i].key DIV n.

Chú ý r ng trong c hai k , ta xen các ph n t m i c phân ph i vào cu i danh sách.

Ví d 2-9: C n s p x p m ng g m 10 ph n t có khoá là các s nguyên: 36, 9, 0, 25, 1, 49, 64,


16, 81 và 4.

Ta s d ng 10 bin c ánh s t 0 n 9. K m t ta phân ph i ph n t a[i] vào bin có ch s


a[i].key MOD 10. N i các bin l i v i nhau ta c danh sách có khóa là: 0 1 81 64 4 25 36 16 9 49. K
hai s d ng k t qu c a k 1 s p ti p. Phân ph i ph n t a[i] vào bin có ch s a[i].key DIV 10. N i
các bin l i v i nhau ta c danh sách có th t .

1 K 2
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 33
Collected by The_Wall (11/10/2005)

Bin Bin
0 0 0 0 1 4 9
1 1 81 1 16
2 2 25
3 3 36
4 64 4 4 49
5 25 5
6 36 16 6 64
7 7
8 8 81
9 9 49 9

Hình 2-13: S p x p theo hai k

Theo s phân tích gi i thu t Bin Sort thì m i k l y O(n) th i gian, hai k này n i ti p nhau
nên th i gian t ng c ng là O(n).

Ch ng minh gi i thu t úng


th y tính úng n c a gi i thu t ta xem các các giá tr khóa nguyên t 0 n n2-1 nh các
có hai ch s trong h m c s n. Xét hai s k = sn + t và l = un + v trong ó s, t, u, v là các s
0..n-1. Gi s k < l, ta c n ch ng minh r ng sau 2 k s p thì k ph i ng tr c l.

Vì k < l nên s u. N u s < u thì k ng tr c l trong danh sách k t q a vì k c s p vào bin


b[s] và l c s p vào bin b[u] mà b[s] ng tr c b[u]. N u s=u thì t<v. Sau k 1 thì k ng tr c l, vì
k c s p vào trong bin b[t] và l trong bin b[v]. n k 2 m c dù c k và l u c s p vào trong bin
b[s], nh ng k c xen vào tr c l nên k t qu là k ng tr c l.

Chú ý ch ng minh trên ta th y s p các ph n t có khóa là các s nguyên (h mc s


10) t 0 n 99 ta dùng 10 bin có ch s t 0 n 9. s p các ph n t có khóa là các s nguyên t 0
n 999 ta dùng 100 bin có ch s t 0 n 99...

Bài 1: S p x p m ng g m 12 ph n t có khóa là các s nguyên : 5, 15, 12, 2, 10, 12, 9, 1, 9, 3, 2, 3


ng cách s d ng:

a) S p x p ch n.

b) S p x p xen.

c) S p x p n i b t.

d) QuickSort.

e) HeapSort.

Bài 2: Có m t bi n th c a s p x p ch n nh sau: Trong b c th i ta ch n m t ph n t có

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 34


Collected by The_Wall (11/10/2005)

khóa nh nh t và m t ph n t có khóa l n nh t trong a[i]...a[n-i+1] và hóan i ph n t nh nh t


cho a[i] và ph n t l n nh t cho a[n-i+1]. Hãy vi t th t c s p x p ch n theo gi i thu t này và tính
th i gian th c hi n.

Bài 3: Vi t th t c s p x p tr n (xem gi i thu t thô trong ch ng 1).

Bài 4: Có m t bi n th c a QuickSort nh sau: Ch n ch t là khóa c a ph n t nh nh t


trong hai ph n t có khóa khác nhau u tiên. M ng con bên trái g m các ph n t có khóa nh h n
ho c b ng ch t, m ng con bên ph i g m các ph n t có khóa l n h n ch t. Hãy vi t l i các th t c
n thi t cho bi n th này.

Bài 5: M t bi n th khác c a QuickSort là ch n khóa c a ph n t u tiên làm ch t. Hãy


vi t l i các th t c c n thi t cho bi n th này.

Bài 6: Hãy vi t l i th t c PushDown trong HeapSort có th s p x p theo th t t ng.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 35


Collected by The_Wall (11/10/2005)

1. M c tiêu
2. Ki n th c c b n c n có h c ch ng này
3. Tài li u tham kh o có liên quan n ch ng
4. N i dung:
III.1 - Gi i thu t chia tr
III.2 - Quy ho ch ng
III.3 - K thu t "tham n"
III.4 - K thu t quay lui
III.5 - K thu t tìm ki m a ph ng
5. V n nghiên c u c a trang k ti p

Nói chung khi thi t k m t gi i thu t chúng ta th ng d a vào m t s k thu t nào ó. Ch ng


này s trình bày m t s k thu t quan tr ng thi t k gi i thu t nh : Chia tr (Divide-and-
Conquer), quy ho ch ng (dynamic programming), k thu t tham n (greedy techniques), quay lui
(backtracking) và tìm ki m a ph ng (local search). Các k thu t này c áp d ng vào m t l p
ng các bài toán, trong ó có nh ng bài toán n i ti ng nh bài toán tìm ng i ng n nh t c a ng i
giao hàng, bài toán cây ph t i ti u...

III.1- GI I THU T CHIA TR


III.1.1- N i dung k thu t
III.1.2- Nhìn nh n l i gi i thu t MergeSort và QuickSort
III.1.3- Bài toán nhân các s nguyên l n
III.1.4- X p l ch thi u th thao
III.1.5- Bài toán con cân b ng

III.1.1- N i dung k thu t


Có th nói r ng k thu t quan tr ng nh t, c áp d ng r ng rãi nh t thi t k các gi i thu t
có hi u qu là k thu t "chia tr " (divide and conquer). N i dung c a nó là: gi i m t bài toán
kích th c n, ta chia bài toán ã cho thành m t s bài toán con có kích th óc nh h n. Gi i các bài
toán con này r i t ng h p k t qu l i c l i gi i c a bài toán ban u. i v i các bài toán con,
chúng ta l i s d ng k thu t chia tr có c các bài toán kích th c nh h n n a. Quá trình trên
d n n nh ng bài toán mà l i gi i chúng là hi n nhiên ho c dàng th c hi n, ta g i các bài toán
này là bài toán c s .

Tóm l i k thu t chia tr bao g m hai quá trình: Phân tích bài toán ã cho thành các bài
toán c s và ng h p k t qu t bài toán c s có l i gi i c a bài toán ban u. Tuy nhiên i v i
t s bài toán, thì quá trình phân tích ã ch a ng vi c t ng h p k t qu do ó n u chúng ta ã gi i
xong các bài toán c s thì bài toán ban u c ng ã c gi i quy t. Ng c l i có nh ng bài toán mà
quá trình phân tích thì n gi n nh ng vi c t ng h p k t qu l i r t khó kh n. Trong các ph n ti p sau
ta s trình bày m t s ví d th y rõ h n u này.

thu t này s cho chúng ta m t gi i thu t quy mà vi c xác nh ph c t p c a nó s


ph i gi i m t ph ng trình quy nh trong ch ng I ã trình bày.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 36


Collected by The_Wall (11/10/2005)

III.1.2 Nhìn nh n l i gi i thu t MergeSort và QuickSort


Hai gi i thu t s p x p ã c trình bày trong các ch ng tr c (MergeSort trong ch ng I và
QuickSort trong ch ng II) th c ch t là ã s d ng k thu t chia tr .

i MergeSort, s p m t danh sách L g m n ph n t , chúng ta chia L thành hai danh sách


con L1 và L2 m i danh sách có n/2 ph n t . S p x p L1, L2 và tr n hai danh sách ã c s p này
c m t danh sách có th t . Quá trình phân tích ây là quá trình chia ôi m t danh sách, quá trình
này s d n n bài toán s p x p m t danh sách có daì b ng 1, ây chính là bài toán c s vì vi c s p
p danh sách này là “không làm gì c ”. Vi c t ng h p các k t qu ây là “tr ün 2 danh sách ã
cs p c m t danh sách có th t ”.

i QuickSort, s p x p m t danh sách g m n ph n t , ta tìm m t giá tr ch t và phân ho ch


danh sách ã cho thành hai danh sách con “bên trái” và “bên ph i “. S p x p “bên trái” và “bên ph i”
thì ta c danh sách có th t . Quá trình phân chia s d n n các bài toán s p x p m t danh sách ch
m m t ph n t ho c g m nhi u ph n t có khoá b ng nhau, ó chính là các bài toán c s , vì b n
thân chúng ã có th t r i. ây chúng ta c ng không có vi c t ng h p k t qu m t cách t ng
minh, vì vi c ó ã c th c hi n trong quá trình phân ho ch.

III.1.3- Bài toán nhân các s nguyên l n


Xét bài toán nhân hai s nguyên n ch s X và Y. Theo gi i thu t nhân hai s thông th ng thì
n n phép nhân và n phép c ng nên t n O(n2) th i gian. Áp d ng k thu t "chia tr " vào phép nhân
2

các s nguyên, ta chia m i s nguyên X và Y thành các s nguyên có n/2 ch s . n gi n ta gi s


n là lu th a c a 2

X = A10n/2 + B

Y = C10n/2 + D

Trong ó A, B, C, D là các s nguyên có n/2 ch s .

Ch ng h n v i X = 1234 thì A = 12 và B = 34 b i vì X = 12 *102 + 34.

Tích c a X và Y có th c vi t thành: XY = AC10n+(AD + BC)10n/2 + BD (III.1)

i m i s có n/2 ch s , chúng ta l i ti p t c phân tích theo cách trên, quá trình phân tích s
n n bài toán c s là nhân các s nguyên ch g m m t ch s mà ta d dàng th c hi n. Vi c t ng
p k t qu chính là th c hi n các phép toán theo công th c (III.1).

Theo (III.1) thì chúng ta ph i th c hi n 4 phép nhân các s nguyên n/2 ch s (AC, AD, BC,
BD), sau ó t ng h p k t qu b ng 3 phép c ng các s nguyên n ch s và 2 phép nhân v i 10n và
10n/2.

Các phép c ng các s nguyên n ch s d nhiên ch c n O(n). Phép nhân v i 10n có th th c


hi n m t cách n gi n b ng cách thêm vào n ch s 0 và do ó c ng ch l y O(n). G i T(n) là th i
gian nhân hai s nguyên, m i s có n ch s thì t (III.1) ta có:

T(1) = 1

T(n) = 4T(n/2) + cn (III.2)


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 37
Collected by The_Wall (11/10/2005)

Gi i (III.1) ta c T(n) = O(n2). Nh v y thì ch ng c i ti n c chút nào so v i gi i thu t


nhân hai s bình th ng. c i thi n tình hình, chúng ta có th vi t l i (III.1) thành d ng:

XY = AC10n + [(A-B)(D-C) + AC + BD] 10n/2+ BD (III.3)

Công th c (III.3) ch òi h i 3 phép nhân c a các s nguyên n/2 ch s là: AC, BD và (A-
B)(D-C), 6 phép c ng tr và 2 phép nhân v i 10n. Các phép toán này u l y O(n) th i gian. T (III.3)
ta có ph ng trình quy:

T(1) = 1

T(n) = 3T(n/2) + cn

Gi i ph ng trình quy này ta c nghi m T(n) = O(nlog3) = O(n1.59). Gi i thu t này rõ ràng
ã c c i thi n r t nhi u.

Gi i thu t thô nhân hai s nguyên (d ng ho c âm) n ch s là:

function Mult(x,y:integer; n:integer) : integer;


var
m1,m2,m3,A,B,C,D: integer;
s:integer;{L u tr d u c a tích xy}
begin
s := sign(x)*sign(y);
{Hàm sign có giá tr 1 n u x d ng và –1 n u x âm}
x := ABS(x);{L y tr tuy t i c a x}
y := ABS(y);
if n = 1 then mult:=x*y*s
else begin
A := left( x, n DIV 2);
B := right(x, n DIV 2);
C := left(y, n DIV 2);
D := right(y, n DIV 2);
m1 := mult(A,C, n DIV 2);
m2 := mult(A-B,D-C, n DIV 2);
m3 := mult(B,D, n DIV 2);
mult := (s * (m1 * 10n + (m1+m2+m3)* 10 n DIV 2 + m3));
end
end;

III.1.4- X p l ch thi u th thao


K thu t chia tr không nh ng ch có ng d ng trong thi t k gi i thu t mà còn trong nhi u
nh v c khác c a cu c s ng. Ch ng h n xét vi c x p l ch thi u th thao theo th th c u vòng tròn 1
t cho n c u th . M i c u th ph i u v i các c u th khác, và m i c u th ch u nhi u nh t m t
tr n m i ngày. Yêu c u là x p m t l ch thi u sao cho s ngày thi u là ít nh t. Ta d dàng th y r ng
ng s tr n u c a toàn gi i là n(n-1)/2. Nh v y n u n là m t s ch n thì ta có th s p n/2 c p thi u
trong m t ngày và do ó c n ít nh t n-1 ngày. Ng c l i n u n là m t s l thì n-1 là m t s ch n nên ta
có th s p (n-1)/2 c p thi u trong m t ngày và do ó ta c n n ngày. Gi s n = 2k thì n là m t s ch n
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 38
Collected by The_Wall (11/10/2005)

và do ó c n t i thi u n-1 ngày.

L ch thi u là m t b ng n dòng và n-1 c t. Các dòng c ánh s t 1 n n và các c t c


ánh s t 1 n n-1, trong ó dòng i bi u di n cho c u th i, c t j bi u di n cho ngày thi u j và ô(i,j)
ghi c u th ph i thi u v i c u th i trong ngày j.

Chi n l c chia tr xây d ng l ch thi u nh sau: s p l ch cho n c u th , ta s s p l ch


cho n/2 c u th , s p l ch cho n/2 c u th , ta s s p l ch cho n/4 c u th ... Quá trình này s d n n
bài toán c s là s p l ch thi u cho 2 c u th . Hai c u th này s thi u m t tr n trong m t ngày, l ch
thi u cho h th t d s p. Khó kh n chính là ch t các l ch thi u cho hai c u th , ta t ng h p l i
c l ch thi u c a 4 c u th , 8 c u th , ...

Xu t phát t l ch thi u cho hai c u th ta có th xây d ng l ch thi u cho 4 c u th nh sau:


ch thi u cho 4 c u th s là m t b ng 4 dòng, 3 c t. L ch thi u cho 2 c u th 1 và 2 trong ngày
th 1 chính là l ch thi u c a hai c u th (bài toán c s ). Nh v y ta có Ô(1,1) = “2” và Ô(2,1) = “1”.
ng t ta có l ch thi u cho 2 c u th 3 và 4 trong ngày th 1. Ngh a là Ô(3,1) =”4” và Ô(4,1) =
“3”. (Ta c th th y r ng Ô(3,1) = Ô(1,1) + 2 và Ô(4,1) = Ô(2,1) + 2 ). Bây gi hoàn thành l ch thi
u cho 4 c u th , ta l y góc trên bên trái c a b ng l p vào cho góc d i bên ph i và l y góc d i bên
trái l p cho góc trên bên ph i.

L ch thi u cho 8 c u th là m t b ng g m 8 dòng, 7 c t. Góc trên bên trái chính là l ch thi u


trong 3 ngày u c a 4 c u th t 1 n 4. Các ô c a góc d i bên trái s b ng các ô t ng ng c a góc
trên bên trái c ng v i 4. ây chính là l ch thi u cho 4 c u th 5, 6, 7 và 8 trong 3 ngày u. Bây gi
chúng ta hoàn thành vi c s p l ch b ng cách l p y góc d i bên ph i b i góc trên bên trái và góc trên
bên ph i b i góc d i bên trái.

III.1.5- Bài toán con cân b ng (Balancing Subproblems)


i v i k thu t chia tr , nói chung s t t h n n u ta chia bài toán c n gi i thành các bài toán
con có kích th c g n b ng nhau. Ví d , s p x p tr n (MergeSort) phân chia bài toán thành hai bài
toán con có cùng kích th c n/2 và do ó th i gian c a nó ch là O(nlogn). Ng c l i trong tr ng h p
u nh t c a QuickSort, khi m ng b phân ho ch l ch thì th i gian th c hi n là O(n2).

Nguyên t c chung là chúng ta tìm cách chia bài toán thành các bài toán con có kích th c x p x b ng
nhau thì hi u su t s cao h n.
III.2- QUY HO CH NG

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 39


Collected by The_Wall (11/10/2005)

III.2.1- N i dung k thu t


III.2.2- Bài toán tính s t h p

III.2.1- N i dung k thu t


Nh trong III.1 chúng ta ã nói, k thu t chia tr th ng d n chúng ta t i m t gi i thu t
quy. Trong các gi i thu t ó, có th có m t s gi i thu t th i gian m . Tuy nhiên, th ng ch có m t s
a th c các bài toán con, u ó có ngh a là chúïng ta ã ph i gi i m t s bài toán con nào ó trong
nhi u l n. tránh vi c gi i d th a m t s bài toán con, chúng ta t o ra m t b ng l u t t c k t qu
a các bài toán con và khi c n chúng ta ch c n tham kh o t i k t qu ã c l u trong b ng mà
không c n ph i gi i l i bài toán ó. L p y b ng k t qu các bài toán con theo m t quy lu t nào ó
nh n c k t qu c a bài toán ban u (c ng ã c l u trong m t ô nào ó c a b ng) c g i là
quy ho ch ng.

III.2.2- Bài toán tính s t h p


M t bài toán khá quen thu c v i chúng ta là tính s t h p ch p k c a n theo công th c:

Ckn = 1 n u k=0 ho c k = n

Ckn = Ck-1n-1 + Ckn-1 n u 0 < k < n

Công th c trên ã g i ý cho chúng ta m t gi i thu t quy nh sau:

function Comb(n,k : integer) : Integer;


begin
if (k=0) or (k=n) then Comb := 1
else Comb := Comb(n-1, k-1) + Comb(n-1,k);
end;

G i T(n) là th i gian tính s t h p ch p k c a n, thì ta có ph ng trình quy:

T(1) = C1

T(n) = 2T(n-1) + C2

Gi i ph ng trình này ta c T(n) = O(2n), nh v y là m t gi i thu t th i gian m , trong khi


ch có m t a th c các bài toán con. u ó ch ng t r ng có nh ng bài toán con c gi i nhi u l n.

Ch ng h n tính Comb(4,2) ta ph i tính Comb(3,1) và Comb(3,2). tính Comb(3,1) ta ph i


tính Comb(2,0) và Comb(2,1). tính Comb(3,2) ta ph i tính Comb(2,1) và Comb(2,2). Nh v y
tính Comb(4,2) ta ph i tính Comb(2,1) hai l n. Hình 3-2 sau minh ho rõ u ó.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 40


Collected by The_Wall (11/10/2005)

Áp d ng k thu t quy ho ch ng kh c ph c tình tr ng trên, ta xây d ng m t b ng g m n+1


dòng (t 0 n n) và n+1 c t (t 0 n n) và n giá tr cho O(i,j) theo quy t c sau: (Quy t c tam giác
Pascal):

O(0,0) = 1;

O(i,0) =1;

O(i,i) = 1 v i 0 < i ( n;

O(i,j) = O(i-1,j-1) + O(i-1,j) v i 0 < j < i £ n.

Ch ng h n v i n = 4 ta có b ng bên.

O(n,k) chính là Comb(n,k) và ta có gi i thu t nh sau:

function Comb(n, k : Integer) : Integer


var C: array[0..n, 0..n] of integer;
i,j : integer;
begin
{1} C[0,0] := 1;
{2} for i := 1 to n do begin
{3} C[i,0] := 1;
{4} C[i,i] := 1;
{5} for j := 1 to i-1 do C[i,j] := C[i-1,j-1] + C[i-1,j];
end;
{6} Comb := C[n,k];
end;

Vòng l p {5} th c hi n i-1 l n, m i l n O(1). Vòng l p {2} có i ch y t 1 n n, nên n u g i


T(n) là th i gian th c hi n gi i thu t thì ta có:

III.3- K THU T "THAM N"


III.3.1- Bài toán t i u t h p
III.3.2- N i dung k thu t tham n
III.3.3- Bài toán ng i c a ng i giao hàng
III.3.4- Bài toán cái ba lô
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 41
Collected by The_Wall (11/10/2005)

III.3.1- Bài toán t i u t h p


Là m t d ng c a bài toán t i u, nó có d ng t ng quát nh sau:

· Cho phi m hàm xác nh trên m t t p h u h n các ph n t D. Hàm


f(X) c g i là hàm m c tiêu.

· M i ph n t X D có d ng X= (x1, x2, .. xn) c g i là m t ph ng án.

· C n tìm m t ph ng án X D sao cho hàm f(X) t min (max). Ph ng án X nh th c


i là ph ng án t i u.

Ta có th tìm th y ph ng án t i u b ng ph ng pháp “vét c n” ngh a là xét t t c các


ph ng án trong t p D (h u h n) xác inh ph ng án t t nh t. M c dù t p h p D là h u h n nh ng
tìm ph ng án t i u cho m t bài toán kích th c n b ng ph ng pháp “vét c n” ta có th c n m t
th i gian m .

Các ph n ti p theo c a ch ng này s trình bày m t s k thu t gi i bài toán t i u t h p mà


th i gian có th ch p nh n c.

III.3.2- N i dung k thu t tham n

K thu t tham n th ng c v n d ng gi i bài toán t i u t h p b ng cách xây d ng m t


ph ng án X. Ph ng án X c xây d ng b ng cách l a ch n t ng thành ph n xi c a X cho n khi
hoàn ch nh ( n thành ph n). V i m i xi , ta s ch n xi t i u. V i cách này thì có th b c cu i
cùng ta không còn gì ch n mà ph i ch p nh n m t giá tr cu i cùng còn l i.

Áp d ng k thu t tham n s cho m t gi i thu t th i gian a th c, tuy nhiên nói chung chúng
ta ch t c m t ph ng án t t ch không ph i là t i u.

Có r t nhi u bài toán mà ta có th gi i b ng k thu t này, sau ây là m t s ví d .

III.3.3- Bài toán ng i c a ng i giao hàng

Chúng ta s xét m t bài toán r t n i ti ng có tên là bài toán tìm ng i c a ng i giao


hàng (TSP - Traveling Salesman Problem): Có m t ng i giao hàng c n i giao hàng t i n thành ph .
Xu t phát t m t thành ph nào ó, i qua các thành ph khác giao hàng và tr v thành ph ban
u. M i thành ph ch n m t l n, kho ng cách t m t thành ph n các thành ph khác là xác nh
c. Kho ng cách gi a hai thành ph có th là kho ng cách a lý, có th là c c phí di chuy n ho c
th i gian di chuy n. Ta g i chung là dài. Hãy tìm m t chu trình (m t ng i khép kín th a mãn
u ki n trên) sao cho t ng dài các c nh là nh nh t. Hay còn nói là tìm m t ph ng án có giá nh
nh t. Bài toán này c ng c g i là bài toán ng i du l ch.

V i ph ng pháp vét c n ta xét t t c các chu trình, m i chu trình tính t ng dài các c nh
a nó r i ch n m t chu trình có t ng dài nh nh t. Tuy nhiên chúng ta c n xét t t c là chu
trình. Th c v y, do m i chu trình u i qua t t c các nh (thành ph ) nên ta có th c nh m t nh.
nh này ta có n-1 c nh t i n-1 nh khác, nên ta có n-1 cách ch n c nh u tiên c a chu trình. Sau
khi ã ch n c c nh u tiên, chúng ta còn n-2 cách ch n c nh th hai, do ó ta có (n-1)(n-2) cách

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 42


Collected by The_Wall (11/10/2005)

ch n hai c nh. C lý lu n nh v y ta s th y có (n-1)! cách ch n m t chu trình. Tuy nhiên v i m i chu


trình ta ch quan tâm n t ng dài các c nh ch không quan tâm n h ïng i theo chi u d ng
hay âm vì v y có t t c ph ng án. ó là m t gi i thu t th i gian m !!!.

thu t tham n áp d ng vào ây là:

1. Tính dài c a t t c các c nh (có t t c nh).

2. Xét các c nh có dài t nh nl n a vào chu trình.

3. M t c nh s c a vào chu trình n u c nh ó th a mãn hai u ki n sau:

· Không t o thành m t chu trình thi u (không i qua n nh)

· Không t o thành m t nh có c p 3 (t c là không c có nhi u h n hai c nh xu t phát


m t nh, do yêu c u c a bài toán là m i thành ph ch c n m t l n: m t l n n và m t l n i)

4. L p l i b c 3 cho n khi xây d ng c m t chu trình.

V i k thu t này ta ch c n n(n-1)/2 phép ch n nên ta có m t gi i thu t c n O(n2) th i gian.

Ví d 3-1: Cho bài toán TSP v i 6 nh c cho b i các t a nh sau:

Do có 6 nh nên có t t c 15 c nh. ó là các c nh: ab, ac, ad, ae, af, bc, bd, be, bf, cd, ce, cf,
de, df và ef. dài các c nh ây là kho ng cách Euclide. Trong 15 c nh này thì de = 3 là nh nh t,
nên de c ch n vào chu trình. K n là 3 c nh ab, bc và ef u có dài là 5. C 3 c nh u th a
mãn hai u ki n nói trên, nên u c ch n vào chu trình. C nh có dài nh k ti p là ac = 7.08,
nh ng không th a c nh này vào chu trình vì nó s t o ra chu trình thi u (a-b-c-a). C nh df c ng b
lo i vì lý do t ng t . C ûnh be c xem xét nh ng r i c ng b lo i do t o ra nh b và nh e có c p
3. T ng t chúng ta c ng lo i bd. cd là c nh ti p theo c xét và c ch n. Cu i cùng ta có chu
trình a-b-c-d-e-f-a v i t ng dài là 50.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 43


Collected by The_Wall (11/10/2005)

ây ch là m t ph ng án t t.

Ph ng án t i u là chu trình a-c-d-e-f-b-a v i t ng dài là 48.39.

Gi i thu t s b nh sau:

procedure TSP;
begin
{E là t p các c nh }
{S p x p các c nh trong E theo th t t ng c a dài }
Chu_Trinh := F;
Gia := 0.0;
while E <> F do begin
if c nh e có th ch n then begin
Chu_Trinh := Chu_Trinh + e ;
Gia := Gia + dài c a e;
end;
E := E-e;
end ;
end;

M t cách ti p c n khác c a k thu t tham n vào bài toán này là:

1. Xu t phát t m t nh b t k , ch n m t c nh có dài nh nh t trong t t c các c nh i ra t


nh ó n nh k ti p.

2. T nh k ti p ta l i ch n m t c nh có dài nh nh t i ra t nh này tho mãn hai u


ki n nói trên i n d nh k ti p.

3. L p l i b c 2 cho n khi i t i nh n thì quay tr v nh xu t phát.

III.3.4- Bài toán cái ba lô

Cho m t cái ba lô có th ng m t tr ng l ng W và n lo i v t, m i v t
i có m t tr ng l ng gi và m t giá tr vi. T t c các lo i v t u có s l ng không h n ch . Tìm
t cách l a ch n các v t ng vào ba lô, ch n các lo i v t nào, m i lo i l y bao nhiêu sao cho
ng tr ng l ng không v t quá W và t ng giá tr là l n nh t.

Theo yêu c u c a bài toán thì ta c n nh ng v t có giá tr cao mà tr ng l ng l i nh sao


cho có th mang c nhi u “ quý”, s là h p lý khi ta quan tâm n y u t “ n giá” c a t ng lo i
v t t c là t l giá tr /tr ng l ng. n giá càng cao thì càng quý. T ó ta có k thu t greedy áp
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 44
Collected by The_Wall (11/10/2005)

ng cho bài toán này là:

1. Tính n giá cho các lo i v t.

2. Xét các lo i v t theo th t n giá t l n n nh .

3. V i m i v t c xét s l y m t s l ng t i a mà tr ng l ng còn l i c a ba lô cho


phép.

4. Xác nh tr ng lu ng còn l i c a ba lô và quay l i b c 3 cho n khi không còn có th


ch n c v t nào n a.

Ví d 3-2: Ta có m t ba lô có tr ng l ng làì 37 và 4 lo i v t v i tr ng l ng và giá tr


ng ng c cho trong b ng (hình 3-6)

T b ng ã cho ta tính n giá cho các lo i v t và s p x p các lo i v t này theo th t


n giá gi m d n ta có b ng (hình 3-7).

Theo ó thì th t u tiên ch n v t là là B, A, D và cu i cùng là C.

V tB c xét u tiên và ta ch n t i a 3 cái vì m i cái vì tr ng l ng m i cái là 10 và ba lô


có tr ng l ng 37. Sau khi ã ch n 3 vât lo i B, tr ng l ng còn l i trong ba lô là 37 - 3*10 = 7. Ta xét
n v t A, vì A có tr ng l ng 15 mà tr ng l ng còn l i c a balô ch còn 7 nên không th ch n v t A.
Xét v t D và ta th y có th ch n 1 v t D, khi ó tr ng l ng còn l i c a ba lô là 7-4 = 3. Cu i cùng ta
ch n c m t v t C.

Nh v y chúng ta ã ch n 3 cái lo i B, m t cái lo i D và 1 cái lo i C. T ng tr ng l ng là


3*10 + 1*4 + 1*2 = 36 và t ng giá tr là 3*25+1*6+1*2 = 83.

Chú ý có m t s bi n th c a bài toán cái ba lô nh sau:

1. M i v t i ch có m t s l ng si. V i bài toán này khi l a ch n v t i ta không cl y


t s l ng v t quá si.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 45


Collected by The_Wall (11/10/2005)

2. M i v t ch có m t cái. V i bài toán này thì v i m i v t ta ch có th ch n ho c


không ch n.
III.4- K THU T QUAY LUI
III.4.1- nh tr cây bi u th c s h c
III.4.2- K thu t c t t a Alpha-Beta
III.4.3- K thu t nhánh c n

K thu t quay lui (backtracking) nh tên g i c a nó, là m t quá trình phân tích i xu ng. T i
i b c phân tích chúng ta ch a gi i quy t c v n do còn thi u c li u nên c ph i phân tích
cho t i các m d ng, n i chúng ta xác nh c l i gi i c a chúng ho c là xác nh c là không
th (ho c không nên) ti p t c theo h ng này. T các m d ng này chúng ta quay ng c tr l i theo
con ng mà chúng ta ã i qua gi i quy t các v n còn t n ng và cu i cùng ta s gi i quy t
c v n ban u.

ây chúng ta s xét 3 k thu t quay lui: “vét c n” là k thu t ph i i t i t t c các m d ng


i m i quay lui. “C t t a Alpha-Beta” và “Nhánh-C n” là hai k thu t cho phép chúng ta không c n
thi t ph i i t i t t c các m d ng, mà ch c n i n m t s m nào ó và d a vào m t s suy
lu n có th quay lui s m. Các k thu t này s c trình bày thông qua m t s bài toán c th sau.

III.4.1- nh tr cây bi u th c s h c
Trong các ngôn ng l p trình u có các bi u th c s h c, vi c d ch các bi u th c này òi h i
ph i ánh giá ( nh tr ) chúng. làm c u ó c n ph i có m t bi u di n trung gian cho bi u
th c. M t trong các bi u di n trung gian cho bi u th c là cây bi u th c.

Cây bi u th c s h c là m t cây nh phân, trong ó các nút lá bi u di n cho các toán h ng, các
nút trong bi u di n cho các toán t .

Ví d 3-3: Bi u th c 5 + 2 * 3 - 4 s c bi u di n b i cây trong hình 3-8:

Tr c a m t nút lá chính là tr c a toán h ng mà nút ó bi u di n. Tr c a m t nút trong có


c b ng cách l y toán t mà nút ó bi u di n áp d ng vào các con c a nó.

Tr c a nút g c chính là tr c a bi u th c.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 46


Collected by The_Wall (11/10/2005)

Nh v y nh tr cho nút g c, chúng ta ph i nh tr cho hai con c a nó, i v i m i con ta


xem nó có ph i là nút lá hay không, n u không ph i ta l i ph i xét hai con c a nút ó. Quá trình c ti p
c nh v y cho t i khi g p các nút lá mà giá tr c a chúng ã c bi t, quay lui nh tr cho các
nút cha c a các nút lá và c nh th mà nh tr cho t tiên c a chúng. ó chính là k thu t quay lui vét
n, vì chúng ta ph i l n n t t c các nút lá m i nh tr c cho các nút trong và do th m i nh tr
c cho nút g c.

Ví d 3-4: V i cây bi u th c trong ví d 3-3. nh tr cho nút - chúng ta ph i nh tr cho


nút + và nút 4. Nút 4 là nút lá nên giá tr c a nó là 4. nh tr cho nút + ta ph i nh tr cho nút 5 và
nút *. Nút 5 là nút lá nên giá tr c a nó là 5. nh tr cho nút *, ta ph i nh tr cho nút 2 và nút 3. C
hai nút này u là lá nên giá tr c a chúng t ng ng là 2 và 3. Quay lui l i nút *, l y toán t * áp d ng
cho hai con c a nó là 2 và 3 ta c tr c a nút * là 6. Quay lui v nút +, l i áp d ng toán t + vào hai
con c a nó là 5 và 6 c tr c a nút + là 11. Cu i cùng quay v nút -, áp d ng toán t - vào hai con
a nó là 11 và 4 ta c tr c a nút - (nút g c) là 7. ó chính là tr c a bi u
th c. Trong hình 3-9, m i tên nét t minh h a quá trình i tìm nút lá và m i
tên nét li n minh h a quá trình quay lui nh tr cho các nút, các s bên ph i
i nút là tr c a nút ó.

Gi i thu t s b nh tr m t nút b t k nh sau:

function Eval(n : node): real;


begin
if n là lá then return (tr c a toán h ng trong n)
else return (Toán t trong n (Eval (Con trái c a n), Eval (Con ph i c a n)) );
end;

Mu n nh tr cho cây bi u th c T, ta g i Eval(ROOT(T)).

III.4.2- K thu t c t t a Alpha-Beta


Cây trò ch i

Xét m t trò ch i trong ó hai ng i thay phiên nhau i n c c a mình nh


vua, c t ng, carô,... Trò ch i có m t tr ng thái b t u và m i n c i s bi n i tr ng thái hi n
hành thành m t tr ng thái m i. Trò ch i s k t thúc theo m t quy nh nào ó, theo ó thì cu c ch i s
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 47
Collected by The_Wall (11/10/2005)

n n m t tr ng thái ph n ánh có m t ng i th ng cu c ho c m t tr ng thái mà c hai u th không


th phát tri n c n c i c a mình, ta g i nó là tr ng thái hòa c . Ta tìm cách phân tích xem t m t
tr ng thái nào ó s d n n u th nào s th ng v i u ki n c hai u th u có trình nh
nhau.

M t trò ch i nh v y có th c bi u di n b i m t cây, g i là cây trò ch i. M i m t nút c a


cây bi u di n cho m t tr ng thái. Nút g c bi u di n cho tr ng thái b t u c a cu c ch i. M i nút lá
bi u di n cho m t tr ng thái k t thúc c a trò ch i (tr ng thái th ng thua ho c hòa). N u tr ng thái x
c bi u di n b i nút n thì các con c a n bi u di n cho t t c các tr ng thái k t qu c a các n c i có
th xu t phát t tr ng thái x.

Ví d 3-5: Xét trò ch i carô có 9 ô. Hai ng i thay phiên nhau i X ho c O. Ng i nào i


c 3 ô th ng hàng (ngang, d c, xiên) thì th ng cu c. N u ã h t ô i mà ch a phân th ng b i thì hai
u th hòa nhau. M t ph n c a trò ch i này c bi u di n b i cây sau:

Trong cây trò ch i trên, các nút lá c tô n n và vi n khung ôi d phân bi t v i các nút
khác. Ta có th gán cho m i nút lá m t giá tr ph n ánh tr ng thái th ng thua hay hòa c a các u
th . Ch ng h n ta gán cho nút lá các giá tr nh sau:

· 1 n u t i ó ng i i X ã th ng,

· -1 n u t i ó ng i i X ã thua và
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 48
Collected by The_Wall (11/10/2005)

· 0 n u hai u th ã hòa nhau.

Nh v y t m t tr ng thái b t k , n l t mình, ng i i X s ch n cho mình m t n c i sao


cho d n n tr ng thái có giá tr l n nh t (trong tr ng h p này là 1). Ta nói X ch n n c i MAX, nút
mà t ó X ch n n c i c a mình c g i là nút MAX. Ng i i O n l t mình s ch n m t n c
i sao cho d n n tr ng thái có giá tr nh nh t (trong tr ng h p này là -1, khi ó X s thua và do ó
O s th ng). Ta nói O ch n n c i MIN, nút mà t ó O ch n n c i c a mình c g i là nút MIN.
Do hai u th luân phiên nhau i n c c a mình nên các m c trên cây trò ch i c ng luân phiên nhau
là MAX và MIN. Cây trò ch i vì th còn có tên là cây MIN-MAX. Ta có th a ra m t quy t c nh
tr cho các nút trên cây ph n ánh tình tr ng th ng thua hay hòa và kh n ng th ng cu c c a hai u
th .

N u m t nút là nút lá thì tr c a nó là giá tr ã c gán cho nút ó. Ng c l i, n u nút là nút


MAX thì tr c a nó b ng giá tr l n nh t c a t t c các tr c a các con c a nó. N u nút là nút MIN thì tr
a nó là giá tr nh nh t c a t t c các tr c a các con c a nó.

Quy t c nh tr này c ng g n gi ng v i quy t c nh tr cho cây bi u th c s h c, m khác


bi t ây là các toán t là các hàm l y max ho c min và m i nút có th có nhi u con. Do v y ta có th
dùng k thu t quay lui nh tr cho các nút c a cây trò ch i.

cài t ta có m t s gi thi t sau:

· Ta có m t hàm Payoff nh n vào m t nút lá và cho ta giá tr c a nút lá ó.

· Các h ng và - t ng ng là các tr Payoff l n nh t và nh nh t.

· Khai báo ki u ModeType = (MIN, MAX) xác nh nh tr cho nút là MIN hay MAX.

· M t ki u NodeType c khai báo m t cách thích h p bi u di n cho m t nút trên cây


ph n ánh m t tr ng thái c a cu c ch i.

· Ta có m t hàm is_leaf xác nh xem m t nút có ph i là nút lá hay không?

· Hàm max và min t ng ng l y giá tr l n nh t và giá tr nh nh t c a hai giá tr .

Gi i thu t vét c n nh tr cây trò ch i


Hàm Search nh n vào m t nút n và ki u mode c a nút ó (MIN hay MAX) tr v giá tr c a
nút.

N u nút n là nút lá thì tr v giá tr ã c gán cho nút lá. Ng c l i ta cho n m t giá tr t m
value là - ho c tùy thu c n là nút MAX hay MIN và xét con c a n. Sau khi m t con c a n có giá tr
V thì t l i value = max(value,V) n u n là nút MAX và value = min(value,V) n u n là nút MIN. Khi
t c các con c a n ã c xét thì giá tr t m value c a n tr thành giá tr c a nó.

function Search(n : NodeType; mode: ModeType): real;


var C : NodeType ; { C là m t nút con c a nút n}
Value : real;
{Lúc u ta cho value m t giá tr t m, sau khi ã xét h t t t c các con c a nút n thì value là giá
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 49
Collected by The_Wall (11/10/2005)

tr c a nút n }
begin
if is_leaf(n) then return ( Payoff(n) )
else begin
{Kh i t o giá tr t m cho n }
if mode = MAX then value := - else value := ;

{Xét t t c các con c a n, m i l n xác nh c giá tr c a m t nút con, ta ph i t l i giá tr


m value. Khi ã xét h t t t c các con thì value là giá tr c a n}

for v i m i con C c a n do
if mode = MAX then
Value := max(Value, Search(C, MIN) )
else Value := min(Value, Search(C, MAX) );
return (value);
end;
end;

thu t c t t a Alpha-Beta (Alpha-Beta Pruning)

Trong gi i thu t vét c n trên, ta th y nh tr cho m t nút nào ó, ta ph i nh tr cho t t c


các nút con cháu c a nó, và mu n nh tr cho nút g c ta ph i nh tr cho t t c các nút trên cây. S
ng các nút trên cây trò ch i tuy h u h n nh ng không ph i là ít. Ch ng h n trong cây trò ch i ca rô
nói trên, n u ta có bàn c bao g m n ô thì có th có t i n! nút trên cây (trong tr ng h p trên là 9!).
i v i các lo i c khác nh c vua ch ng h n, thì s l ng các nút còn l n h n nhi u. Ta g i là m t
bùng n t h p các nút.

Chúng ta c g ng tìm m t cách sao cho khi nh tr m t nút thì không nh t thi t ph i nh tr
cho t t c các nút con cháu c a nó. Tr c h t ta có nh n xét nh sau:

N u P là m t nút MAX và ta ang xét m t nút con Q c a nó (d nhiên Q là nút MIN). Gi s


Vp là m t giá tr t m c a P, Vq là m t giá tr t m c a Q và n u ta có Vp Vq thì ta không c n xét các
con ch a xét c a Q n a. Vì n u có xét thì giá tr c a Q c ng s nh h n ho c b ng Vq và do ó không
nh h ng gì n Vp. T ng t n u P là nút MIN (t t nhiên Q là nút MAX) và Vp Vq thì ta c ng
không c n xét n các con ch a xét c a Q n a. Vi c không xét ti p các con ch a c xét c a nút Q
i là vi c c t t a Alpha-Beta các con c a nút Q.

Trên c s nh n xét ó, ta nêu ra quy t c nh tr cho m t nút không ph i là nút lá trên cây nh
sau:

1. Kh i u nút MAX có giá tr t m là - và nút MIN có giá tr t m là .

2. N u t t c các nút con c a m t nút ã c xét ho c b c t t a thì giá tr t m c a nút ó tr


thành giá tr c a nó.

3. N u m t nút MAX n có giá tr t m là V1 và m t nút con c a nó có giá tr là V2 thì t giá tr


m m i c a n là max (V1,V2). N u n là nút MIN thì t giá tr t m m i c a n là min (V1,V2).

4. V n d ng quy t c c t t a Alpha-Beta nói trên h n ch s l ng nút ph i xét.


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 50
Collected by The_Wall (11/10/2005)

function cat_tia(Q: NodeType; mode: ModeType; Vp: real): real;


var C : NodeType ; { C là m t nút con c a nút Q}
Vq : real;
{Vq là giá tr t m c a Q, sau khi t t c các con c a nút Q ã xét ho c b c t t a thì Vq là giá tr
a nút Q}
begin
if is_leaf(Q) then return ( Payoff(Q) )
else begin
{ Kh i t o giá tr t m cho Q }
if mode = MAX then Vq := - else Vq := ;
{Xét các con c a Q, m i l n xác nh c giá tr c a m t nút con c a Q, ta ph i t l i giá tr
m Vq và so sánh v i Vp có th c t t a hay không}
Xét C là con trái nh t c a Q;
while C là con c a Q DO
if mode = MAX then begin
Vq:= max(Vq, Cat_tia(C, MIN, Vq));
if Vp Vq then return(Vq);
end
else begin Vq := min(Vq, Cat_tia(C, MAX, Vq));
if Vp Vq then return(Vq);
end;
return (Vq);
end;
end;

Ví d 3-6: V n d ng quy t c trên nh tr cho nút A trong cây trò ch i trong ví d 3-5.

A là nút MAX, lúc u nó có giá tr t m là - , xét B là con c a A, B là nút lá nên giá tr c a nó


là giá tr ã c gán 1, giá tr t m c a A bây gi là max (- ,1) = 1. Xét con C c a A, C là nút MIN,
giá tr t m lúc u c a C là . Xét con E c a C, E là nút MAX, giá tr t m c a E là - . Xét con I c a E,
I là nút lá nên giá tr c a nó là 0. Quay lui l i E, giá tr t m c a E bây gi là max (- ,0) = 0. Vì E ch có
t con là I ã xét nên giá tr t m 0 tr thành giá tr c a E. Quay lui l i C, giá tr t m m i c a C là min
,0) = 0. A là nút MAX có giá tr t m là 1, C là con c a A, có giá tr t m là 0, 1>0 nên ta không c n
xét con F c a C n a. Nút C có hai con là E và F, trong ó E ã c xét, F ã b c t, v y giá tr t m 0
a C tr thành giá tr c a nó. Sau khi có giá tr c a C, ta ph i t l i giá tr t m c a A, nh ng giá tr
m này không thay i vì max (1,0) = 1. Ti p t c xét nút D, D là nút MIN nên giá tr t m là , xét nút
con G c a D, G là nút MAX nên giá tr t m c a nó là - , xét nút con J c a G. Vì J là nút lá nên có giá
tr 0. Quay lui l i G, giá tr t m c a G bây gi là max (- ,0) = 0 và giá tr t m này tr thành giá tr c a
G vì G ch có m t con J ã xét. Quay lui v D, giá tr t m c a D bây gi là min ( ,0) = 0. Giá tr t m
này c a D nh h n giá tr t m c a nút A MAX là cha c a nó nên ta c t t a con H ch a c xét c a D
và lúc này D có giá tr là 0. Quay lui v A, giá tr t m c a nó v n không thay i, nh ng lúc này c 3
con c a A u ã c xét nên giá tr t m 1 tr thành giá tr c a A. K t qu c minh h a trong hình
sau:

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 51


Collected by The_Wall (11/10/2005)

III.4.3-K thu t nhánh c n


V i các bài toán tìm ph ng án t i u, n u chúng ta xét h t t t c các ph ng án thì m t r t
nhi u th i gian, nh ng n u s d ng ph ng pháp tham n thì ph ng án tìm c ch a h n ã là
ph ng án t i u. Nhánh c n là k thu t xây d ng cây tìm ki m ph ng án t i u, nh ng không xây
ng toàn b cây mà s d ng giá tr c n h n ch b t các nhánh.

Cây tìm ki m ph ng án có nút g c bi u di n cho t p t t c các ph ng án có th có, m i nút


lá bi u di n cho m t ph ng án nào ó. Nút n có các nút con t ng ng v i các kh n ng có th l a
ch n t p ph ng án xu t phát t n. K thu t này g i là phân nhánh.

V i m i nút trên cây ta s xác nh m t giá tr c n. Giá tr c n là m t giá tr g n v i giá c a các


ph ng án. V i bài toán tìm min ta s xác nh n d i còn v i bài toán tìm max ta s xác nh n
trên. C n d i là giá tr nh h n ho c b ng giá c a ph ng án, ng c l i c n trên là giá tr l n h n
ho c b ng giá c a ph ng án.

d hình dung ta s xét hai bài toán quen thu c là bài toán TSP và bài toán cái ba lô.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 52


Collected by The_Wall (11/10/2005)

Bài toán ng i c a ng i giao hàng


Phân nhánh
Cây tìm ki m ph ng án là cây nh phân trong ó:

· Nút g c là nút bi u di n cho c u hình bao g m t t c các ph ng án.

· M i nút s có hai con, con trái bi u di n cho c u hình bao g m t t c các ph ng án ch a


t c nh nào ó, con ph i bi u di n cho c u hình bao g m t t c các ph ng án không ch a c nh ó
(các c nh xét phân nhánh c thành l p tuân theo m t th t nào ó, ch ng h n th t t n).

· M i nút s k th a các thu c tính c a t tiên c a nó và có thêm m t thu c tính m i (ch a


hay không ch a m t c nh nào ó).

· Nút lá bi u di n cho m t c u hình ch bao g m m t ph ng án.

· quá trình phân nhánh mau chóng t i nút lá, t i m i nút ta c n có m t quy t nh b
sung d a trên nguyên t c là m i nh trong chu trình u có c p 2 và không t o ra m t chu trình thi u.

Ví d 3-7: Xét bài toán TSP có 5 nh v i dài các c nh c cho trong hình 3-12.

Các c nh theo th t t n xét là:

ab, ac, ad, ae, bc, bd, be, cd, ce và de.

Nút g c A c a cây bao g m t t c các ph ng án.

Hai con c a A là B và C, trong ó B bao g m t tc các ph ng án ch a c nh ab, C bao g m t t


các ph ng án không ch a ab.

Hai con c a B là D và E. Nút D bao g m t t c các ph ng án ch a ac. Vì các ph ng án này


a ch a ab (k th a c a B) v a ch a ac nên nh a ã c p hai nên D không th ch a ad và ae. Nút
E bao g m t t c các ph ng án không ch a ac..

Ta c cây (ch a y ) trong hình 3-13


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 53
Collected by The_Wall (11/10/2005)

Trong ó ký hi u có ngh a là không ch a c nh ab.

Tính c n d i
ây là bài toán tìm min nên ta s d ng n d i. C n d i t i m i nút là m t s nh h n ho c
ng giá c a t t c các ph ng án c bi u di n b i nút ó. Giá c a m t ph ng án ây là t ng
dài c a m t chu trình.

tính c n d i c a nút g c, m i nh ta ch n hai c nh có dài nh nh t. C n d i c a nút


c b ng t ng dài t t c các c nh c ch n chia cho 2.

Ví d 3-8: V i s li u cho trong ví d 3-7 nói trên, ta tính c n d i c a nút g c A (hình 3-13)
nh sau:

· nh a ch n ad = 2, ab = 3

· nh b ch n ba = 3, be = 3

· nh c ch n ca = 4, cb = 4

· nh d ch n da = 2, dc = 5

· nh e ch n eb = 3, ed = 6

T ng dài các c nh c ch n là= 35, c n d i c a nút g c A là 35/2 = 17.5

i v i các nút khác, chúng ta ph i l a ch n hai c nh có dài nh nh t th a u ki n ràng


bu c (ph i ch a c nh này, không ch a c nh kia).

Ví d 3-9: Tính c n d i cho nút D trong hình 3-13. u ki n ràng bu c là ph i ch a ab, ac


và không ch a ad,ae.

· nh a ch n ab = 3, ac = 4, do hai c nh này bu c ph i ch n.

· nh b ch n ba = 3, be = 3
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 54
Collected by The_Wall (11/10/2005)

· nh c ch n ca = 4, cb = 4

· nh d ch n de = 6, dc = 5, do không c ch n da nên ta ph i ch n de.

· nh e ch n eb = 3, ed = 6

T ng dài các c nh c ch n là 41, c n d i c a nút D là 41/2 = 20.5

thu t nhánh c n
Bây gi ta s k t h p hai k thu t trên xây d ng cây tìm ki m ph ng án. Quy t c nh sau:

· Xây d ng nút g c, bao g m t t c các ph ng án, tính c n d i cho nút g c.

· Sau khi phân nhánh cho m i nút, ta tính c n d i cho c hai con.

· N u c n d i c a m t nút con l n h n ho c b ng giá nh nh t t m th i c a m t


ph ng án ã c tìm th y thì ta không c n xây d ng các cây con cho nút này n a (Ta g i là c t t a
các cây con c a nút ó).

· N u c hai con u có c n d i nh h n giá nh nh t t m th i c a m t ph ng án ã


c tìm th y thì nút con nào có c n d i nh h n s c u tiên phân nhánh tr c.

· M i l n quay lui xét nút con ch a c xét c a m t nút ta ph i xem xét l i nút con ó
có th c t t a các cây c a nó hay không vì có th m t ph ng án có giá nh nh t t m th i v a c
tìm th y.

· Sau khi t t c các con ã c phân nhánh ho c b c t t a thì ph ng án có giá nh nh t


trong các ph ng án tìm c là ph ng án c n tìm.

Trong quá trình xây d ng cây có th ta ã xây d ng c m t s nút lá, nh ta bi t m i nút lá


bi u di n cho m t ph ng án. Giá nh nh t trong s các giá c a các ph ng án này c g i là giá nh
nh t t m th i.

Ví d 3-10: Xét bài toán TSP trong ví d 3-7 nói trên.

T p h p các c nh xét phân nhánh là ab, ac, ad, ae, bc, bd, be, cd, ce và de. u ki n b
sung ây là m i nh ph i c ch n hai c nh, b lo i hai c nh và không c t o ra chu trình thi u.

Nút g c A bao g m t t c các ph ng án, có c n d i là 17.5. Phân nhánh cho A, xây d ng hai
con là B và C. Tính c n d i cho hai nút này c c n d i c a B là 17.5 và C là 18.5. Nút B có c n
i nh h n nên c phân nhánh tr c. Hai con c a B là D và E. Các ràng bu c c a D và E gi ng
nh ta ã nói trong ví d c a ph n phân nhánh. Tính c n cho D và E, c c n d i c a D là 20.5 và
a E là 18. Nút E c xét tr c. Phân nhánh cho nút E theo c nh ad, hai con c a E là F và G. F ch a
ad và G không ch a ad. Do F k th a các thu c tính c a E và B, nên F là t p h p các ph ng án ch a
ab, ad và không ch a ac, nh a ã c p 2 v y F không ch a ae. T ng t G ch a ab, không ch a ac,
không ch a ad nên ph i ch a ae. Tính c n d i cho F và G c c n d i c a F là 18 và c a G là 23.
Ti p t c xây d ng hai con cho F theo c nh bc là H và I. H ch a bc và I không ch a bc. Do H k th a
các thu c tính c a B, E và F nên H là các ph ng án ch a ab, ad, không ch a ac và ch a bc. Nh v y
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 55
Collected by The_Wall (11/10/2005)

nh a ã th a u ki n là c ch n hai c nh (ab và ad) và b lo i hai c nh (ac và ae), nh b ã c


ch n 2 c nh (ba và bc) nên bd và be b lo i. nh c ã c ch n cb, b lo i ca, ta có th ch n cd ho c
ce. N u ch n cd thì s có m t chu trinh thi u a b c d a, nh v y cd b lo i nên ph i ch n ce. nh d có
db và dc ã b lo i, da ã c ch n nên ph i ch n thêm de. Lúc ó nh e c ng ã có hai c nh c
ch n là ec và ed, hai c nh b lo i là eb và ea. Tóm l i H là t p ch bao g m m t ph ng án a b c e d a
có giá là 23. i v i I ta ã có I ch a ab, không ch a ac, ch a ad, không ch a ae và không ch a bc.
ng lý lu n t ng t ta có I không ch a bd, ch a be, cd, ce và không ch a de. M t ph ng án m i là
a b e c d a v i giá 21. ây là giá nh nh t t m th i m i c tìm th y.

Bây gi ta quay lui v E và xét nút con c a nó là G. Vì G có c n d i là 23 l n h n giá th p


nh t t m th i 21 nên c t t a các con c a G.

Quay lui v B và xét nút con D c a nó. C n d i c a D là 20.5 không l n h n 21. Nh ng vì


dài các c nh trong bài toán ã cho là s nguyên nên n u ta tri n khai các con c a D t i nút lá g m m t
ph ng án. Giá c a ph ng án này ph i là m t s nguyên l n h n 20.5 hay l n h n ho c b ng 21. V y
ta c ng không c n xây d ng các con c a D n a.

Ti p t c quay lui n A và xét con C c a nó. Phân nhánh C theo c nh ac thành hai con J và K.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 56
Collected by The_Wall (11/10/2005)

J ch a ac có c n d i là 18.5. K không ch a ac nên ph i ch a ad và ae, c n d i c a K là 21 b ng giá


nh nh t t m th i nên c t t a các con c a K.

Hai con c a J là L và M. M không ch a ad, ab, ch a ac và ae có c n d i 23.5 nên b c t t a


các con.Hai con c a L là N và O, N ch a bc và O không ch a bc.

Xét nút N ta có: nh a c ch n hai c nh ac và ad, b lo i hai c nh ab và ae. nh b ã c


ch n bc, b lo i ba, ta có th ch n bd ho c be. N u ch n bd thì s có m t chu trình thi u là a c b d a,
y ph i lo i bd và ch n be. nh c ã c ch n ca, cb nên ph i lo i cd và ce. nh d ã c ch n
da, b lo i db và dc nên ph i ch n de. Khi ó nh e có hai c nh c ch n là eb, ed và hai c nh b
lo i là ea và ec. V y N bao g m ch m t ph ng án là a c b e d a v i giá 19.

T ng t nút O bao g m ch m t ph ng án a c e b d a có giá là 23.

T t c các nút con c a cây ã c xét ho c b c t t a nên ph ng án c n tìm là a c b e d a v i


giá 19.

Hình 3-14 minh h a cho nh ng u ta v a nói.

Bài toán cái ba lô


Ta th y ây là m t bài toán tìm max. Danh sách các v t c s p x p theo th t gi m c a
n giá xét phân nhánh.

1. Nút g c bi u di n cho tr ng thái ban u c a ba lô, ó ta ch a ch n m t v t nào. T ng giá


tr c ch n TGT=0. C n trên c a nút g c CT = W * n giá l n nh t.

2. Nút g c s có các nút con t ng ng v i các kh n ng ch n v t có n giá l n nh t. V i


i nút con ta tính l i các thông s :

· TGT = TGT (c ) + s v t c ch n * giá tr m i v t.

· W = W (c ) - s v t c ch n * tr ng l ng m i v t.

· CT = TGT + W (m i) * n giá c a v t s xét k ti p.

3. Trong các nút con, ta s u tiên phân nhánh cho nút con nào có c n trên l n h n tr c.
Các con c a nút này t ng ng v i các kh n ng ch n v t có n giá l n ti p theo. V i m i nút ta
i ph i xác nh l i các thông s TGT, W, CT theo công th c ã nói trong b c 2.

4. L p l i b c 3 v i chú ý: i v i nh ng nút có n trên nh h n ho c b ng giá l n nh t


m th i c a m t ph ng án ã c tìm th y thì ta không c n phân nhánh cho nút ó n a.

5. N u t t c các nút u ã c phân nhánh ho c b c t b thì ph ng án có giá l n nh t là


ph ng án c n tìm.

Ví d 3-11: V i bài toán cái ba lô ã cho trong ví d 3-2 , sau khi tính n giá cho các v t
và s p x p các v t theo th t gi m d n c a n giá ta c b ng sau.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 57


Collected by The_Wall (11/10/2005)

G i x1, x2, x3, x4 là s l ng c n ch n t ng ng c a các v t b, a, d, c.

Nút g c A bi u di n cho tr ng thái ta ch a ch n b t c m t v t nào. Khi ó t ng giá tr TGT


=0, tr ng l ng c a ba lô W=37 (theo ra) và c n trên CT = 37*2.5 = 92.5, trong ó 37 là W, 2.5 là
n giá c a v t b.

V i v t b, ta có 4 kh n ng: ch n 3 v t b (X1=3), ch n 2 v t b (X1=2), ch n 1 v t


b (X1=1) và không ch n v t b (X1=0). ng v i 4 kh n ng này, ta phân nhánh cho nút g c A thành
4 con B, C, D và E.

V i nút con B, ta có TGT = 0+ 3*25 = 75, trong ó 3 là s v t b c ch n, 25 là giá tr c a


i v t b. W = 37- 3*10 = 7, trong ó 37 là tr nh l ng ban u c a ba lô, 3 là s v t b c, 10 là
tr ng l ng mõi v t b. CT = 75 + 7*2 = 89, trong ó 75 là TGT, 7 là tr ng l ng còn l i c a ba lô
và 2 là n giá c a v t a. T ng t ta tính c các thông s cho các nút C, D và E, trong ó c n
trên t ng ng là 84, 79 và 74.

Trong các nút B, C, D và E thì nút B có c n trên l n nh t nên ta s phân nhánh cho nút B tr c
i hy v ng s có c ph ng án t t t h ng này. T nút B ta ch có m t nút con F duy nh t ng v i
X2=0 (do tr ng l ng còn l i c a ba lô là 7, trong khi tr ng l ng c a m i v t a là 15). Sau khi xác
nh các thông s cho nút F ta có c n trên c a F là 85.5. Ta ti p t c phân nhánh cho nút F. Nút F có 2
con G và H t ng ng v i X3=1 và X3=0. Sau khi xác nh các thông s cho hai nút này ta th y c n
trên c a G là 84 và c a H là 82 nên ta ti p t c phân nhánh cho nút G. Nút G có hai con là I và J t ng
ng v i X4=1 và X4=0. ây là hai nút lá (bi u di n cho ph ng án) vì v i m i nút thì s các v t ã
c ch n xong. Trong ó nút I bi u di n cho ph ng án ch n X1=3, X2=0, X3=1 và X4=1 v i giá
83, trong khi nút J bi u di n cho ph ng án ch n X1=3, X2=0, X3=1 và X4=01 v i giá 81. Nh v y
giá l n nh t t m th i ây là 83.

Quay lui lên nút H, ta th y c n trên c a H là 82<83 nên c t t a nút H.

Quay lui lên nút C, ta th y c n trên c a C là 84>83 nên ti p t c phân nhánh cho nút C. Nút C có
hai con là K và L ng v i X2=1 và X2=0. Sau khi tính các thông s cho K và L ta th y n trên c a K là
83 và c a L là 75.25. C hai giá tr này u không l n h n 83 nên c hai nút này u b c t t a. Cu i
cùng các nút D và E c ng b c t t a. Nh v y t t c các nút trên cây u ã c phân nhánh ho c b
t t a nên ph ng án t t nh t t m th i là ph ng án c n tìm. Theo ó ta c n ch n 3 v t lo i b, 1
t lo i d và m t v t lo i c v i t ng giá tr là 83, t ng tr ng l ng là 36. Xem hình 3-16.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 58


Collected by The_Wall (11/10/2005)

III.5- K THU T TÌM KI M A PH NG


III.5.1- N i dung k thu t
III.5.2- Bài toán cây ph t i thi u
III.5.3- Bài toán ng i c a ng i bán hàng.

III.5.1- N i dung k thu t


K thu t tìm ki m a ph ng (local search) th ng c áp d ng gi i các bài toán tìm l i
gi i t i u. Ph ng pháp nh sau:

· Xu t phát t m t ph ng án nào ó.

· Áp d ng m t phép bi n i lên ph ng án hi n hành c m t ph ng án m i t t h n


ph ng án ã có.

· L p l i vi c áp d ng phép bi n i lên ph ng án hi n hành cho n khi không còn có th


i thi n c ph ng án n a.

Thông th ng m t phép bi n i ch thay i m t b ph n nào ó c a ph ng án hi n hành


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 59
Collected by The_Wall (11/10/2005)

c m t ph ng án m i nên phép bi n i c g i là phép bi n i a ph ng và do ó ta có tên k


thu t tìm ki m a ph ng. Sau ây ta s trình bày m t s ví d áp d ng k thu t tìm ki m a ph ng.

III.5.2- Bài toán cây ph t i thi u


Cho G = (V,E) là m t th vô h ng liên thông, trong ó V là t p các nh và E là t p các
nh. Các c nh c a th G u có tr ng s . Cây T có t p h p các nút là V c g i là cây ph
(spaning tree) c a th G.

Cây ph t i thi u là m t cây ph c a G mà t ng dài (tr ng s ) các c nh nh nh t.

Bài toán cây ph t i thi u th ng c áp d ng trong vi c thi t k m t m ng l i giao thông


gi a các thành ph hay thi t k m t m ng máy tính.

K thu t tìm ki m a ph ng áp d ng vào bài toán này nh sau:

· Ph ng án ban u là m t cây ph nào ó.

· Thành l p t p t t c các c nh theo th t ng d n c a dài (có nh iv i th


có n nh).

· Phép bi n i a ph ng ây là: Ch n m t c nh có dài nh nh t trong t p các c nh


ch a s d ng thêm vào cây. Trong cây s có m t chu trình, lo i kh i chu trình c nh có dài l n
nh t trong chu trình ó. Ta c m t cây ph m i. L p l i b c này cho n khi không còn c i thi n
c ph ng án n a.

Ví d 3-12: Cho th G bao g m 5 nh a, b, c, d,e và dài các c nh c cho trong hình 3-


17.

T p h p các c nh xét c thành l p theo th t t nh n l n là ad, ab, be, bc, ac, cd, bd,
de, ae và ce.

Cây xu t phát v i giá là 20 (Hình 3-18a). Thêm c nh ad = 2, b c nh cd = 5 ta c cây m i có


giá là 17 (Hình 3-18b)

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 60


Collected by The_Wall (11/10/2005)

L i thêm c nh ab = 3, b c nh bc = 4 ta c cây có giá là16 (Hình 3-18c).

Thêm c nh be = 3, b c nh ae = 7 ta c cây có giá là 12. (Hình 3-18d).

Vi c áp d ng các phép bi n i n ây d ng l i vì nêuú ti p t c n a thì c ng không c i thi n


c ph ng án.

V y cây ph t i thi u c n tìm là cây trong hình 3-18d

III.5.3- Bài toán ng i c a ng i bán hàng.


Ta có th v n d ng k thu t tìm ki m a ph ng gi i bài toán tìm ng i ng n nh t c a
ng i bán hàng (TSP).

· Xu t phát t m t chu trình nào ó.

· B i hai c nh có dài l n nh t không k nhau, n i các nh l i v i nhau sao cho v n


o ra m t chu trình .

· Ti p t c quá trình bi n i trên cho n khi nào không còn c i thi n c ph ng án n a.

Ví d 3-13: Bài toán TSP có 5 nh và các c nh có dài c cho trong hình 3-19

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 61


Collected by The_Wall (11/10/2005)

Ph ng án ban u là chu trình (a b c d e a) có giá (t ng dài ) là 25. (Hình 3-20a).

B hai c nh có dài l n nh t không k nhau là ae và cd, n i a v i d và e v i c. ta c chu


trình m i ( a b c e d a) v i giá = 23 (Hình 3-20b).

B hai c nh có dài l n nh t, không k nhau là ce và ab, ta c chu trình m i (a c b e d a)


có giá = 19. (Hình 3-20c). Quá trình k t thúc vì n u ti p t c thì giá s t ng lên.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 62


Collected by The_Wall (11/10/2005)

Bài 1: Gi s có hai i A và B tham gia m t tr n thi u th thao, i nào th ng tr c n hi p thì s


th ng cu c. Ch ng h n m t tr n thi u bóng chuy n 5 hi p, i nào th ng tr c 3 hi p thì s tháng
cu c. Gi s hai i ngang tài ngang s c. G i P(i,j) là xác su t i A c n i hi p n a chi n th ng,
B c n j hi p.

tính P(i,j) chúng ta th y nh sau r ng n u i= 0 và j>0 t c là i A ã th ng nên P(0,j) = 1.


ng t P(0,j) = 0 v i i>0. N u i và j u l n h n không thì ít nh t còn m t hi p n a ph i u và hai
i có kh n ng 5 n, 5 thua trong hi p này. Nh v y P(i,j) là trung bình c ng c a P(i-1,j) và P(i,j-1).
Trong ó P(i-1,j) là xác su t i A th ng cu c n u nó th ng hi p ó và P(i,j-1) là xác su t A
th ng cu c n u nó thua hi p ó. Tóm l i ta có công th c tính P(i,j) nh sau:

P(i,j) = 1 N u i = 0 và j > 0

P(i,j) = 0 N u i > 0 và j = 0

P(i,j) = (P(i-1,j) + P(i,j-1))/2 N u i > 0 và j > 0

1. Vi t m t hàm quy tính P(i,j). Tính ph c t p c a hàm ó.

2. Dùng k thu t quy ho ch ng vi t hàm tính P(i,j). Tính ph c t p c a hàm ó.

Bài 2: Bài toán phân công lao ng: Có n công nhân có th làm n công vi c. Công nhân i làm
công vi c j trong m t kho ng th i gian tij. Ph i tìm m t ph ng án phân công nh th nào các công
vi c u c hoàn thành, các công nhân u có vi c làm, m i công nhân ch làm m t công vi c và
i công vi c ch do m t công nhân th c hi n ng th i t ng th i gian là nh nh t.

1. Mô t k thu t “háu n” (greedy) cho bài toán phân công lao ng.

2. Tìm ph ng án theo gi i thu t “háu n” cho bài toán phân công lao ng c cho trong b ng sau.
Trong ó m i dòng là m t công nhân, m i c t là m t công vi c, ô (i,j) ghi th i gian tij mà công nhân i
n hoàn thành công vi c j. (C n ch rõ công nhân nào làm công vi c gì và t ng th i gian là bao
nhiêu ).

Bài 3: Cho bài toán ng i c a ng i bán hàng (TSP) v i 7 thành ph a, b, c, d, e, f, g. Ma


tr n kho ng cách gi a các thành ph c cho trong b ng sau:
a b c d e f g
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 63
Collected by The_Wall (11/10/2005)

a
b 15
c 12 6
d 6 23 16
e 4 5 13 26
f 8 4 10 14 24
g 11 1 2 9 5 7
Hãy s d ng k thu t “tham n” (greedy) tìm m t chu trình có t ng dài các c nh ng n nh t.

Bài 4: Bài toán óng gói: Gi s ta có các h p có cùng kích th c T0 và n i t ng O1, O2, ...On. M i
it ng Oi có kích th c ti . D nhiên ti <= T0 (i=1..n) và các ti này có th b ng nhau.

Tìm ph ng án x p t t c n it ng này vào trong các h p sao cho t n ít s h p nh t.

1. Hãy nêu k thu t “tham n” (greedy) gi i bài toán này.

2. Gi i bài toán c th v i ï các h p kích th c 13, và 9 it ng cói kích th c c cho trong b ng sau:

i t ng O1 O2 O3 O4 O5 O6 O7 O8 O9
Kích th c 7 8 4 9 7 4 6 2 3

Bài 5: Bài toán tô màu b n th gi i

Ng i ta mu n tô màu b n các n c trên th gi i, m i n c u c tô màu và hai n c có biên


gi i chung nhau thì không c có màu gi ng nhau (các n c không chung biên gi i có th c tô màu giông
nhau). Tìm m t ph ng án tô màu sao cho s lo i màu ph i dùng ít nh t.

Ng i ta có th mô hình hóa b n th gi i b ng m t th không có h ng, trong ó m i nh bi u


di n cho m t n c, biên gi i c a hai n c c bi u di n b ng c nh n i hai nh. Bài toán tô màu b n th
gi i tr thành bài toán tô màu các nh c a thi: M i nh c a th ph i c tô màu và hai nh có chung
t c nh thì không c tô cùng m t màu (cá nh không chung c nh có th c tô cùng m t màu). Tìm m t
ph ng án tô màu sao cho s lo i màu ph i dùng là ít nh t.

a) Hãy mô t k thu t “háu n” (Greedy) gi i bài toán tô màu cho th .

b) Áp d ng k thu t háu n tô màu cho các nh c a th sau (các màu có th s dung tô là: , CAM,
VÀNG, XANH, EN, NÂU, TÍM)

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 64


Collected by The_Wall (11/10/2005)

Bài 6: Dùng k thu t c t t a alpha-beta nh tr cho nút g c c a cây trò ch i sau (các nút lá
ã c gán tr :

Bài 7: Xét m t trò ch i có 6 viên bi, hai ng i thay phiên nhau nh t t 1 n 3 viên. Ng i
ph i nh t viên bi cu i cùng thì b thua.

1. V toán b cây trò ch i

2. S d ng k thu t c t t a alpha-beta nh tr cho nút g c

3. Ai s th ng trong trò ch i này n u hai ng i u i nh ng n c t t nh t. Hãy cho m t nh n xét v


tr ng h p t ng quát khi ban u có n viên bi và m i l n có th nh t t 1 n m viên.

Bài 8: Xét m t trò ch i có 7 cái a. Ng i ch i 1 chia thành 2 ch ng có s a không b ng


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 65
Collected by The_Wall (11/10/2005)

nhau. Ng i ch i 2 ch n m t ch ng trong s các ch ng cos th chia và ti p t c chia thành hai ch ng


không b ng nhau. Hai ng i luân phiên nhau chia a nh v y cho n khi không th chia c n a thì
thua.

1. V toàn b cây trò ch i.

2. S d ng k thu t c t t a alpha-beta nh tr cho nút g c

3. Ai s th ng trong trò ch i này n u hai ng i u i nh ng n c t t nh t.

Bài 9: Cho m t th vô h ng, có tr ng s v i 7 nh a, b, c, d, e, f, g. Ma tr n tr ng s c


cho trong b ng sau:

a b c d e f g
a
b 15
c 12 6
d 6 23 16
e 4 5 13 26
f 8 4 10 14 24
g 11 1 2 9 5 7
Hãy s d ng k thu t tìm ki m a ph ng xác nh cây ph t i thi u trên th ó.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 66


Collected by The_Wall (11/10/2005)

1. M c tiêu
2. Ki n th c c b n c n có h c ch ng này
3. Tài li u tham kh o có liên quan n ch ng
4. N i dung:
IV.1 - Mô hình x lý ngoài.
IV.2 - ánh giá các gi i thu t x lý ngoài.
IV.3 - S p x p ngoài.
IV.4 - L u tr thông tin trong t p tin.

Trong ch ng này chúng ta s nghiên c u hai v n chính là s p x p d li u c l u trong


nh ngoài và k thu t l u tr t p tin. Trong k thu t l u tr t p tin chúng ta s s d ng các c u trúc
li u tu n t , b ng b m, t p tin ch m c và c u trúc B-cây.
IV.1- MÔ HÌNH X LÝ NGOÀI
Trong các gi i thu t mà chúng ta ã c p t tr c t i nay, chúng ta ã gi s r ng s l ng
các d li u vào là khá nh có th ch a h t b nh trong (main memory). Nh ng u gì s x y ra
u ta mu n x lý phi u u tra dân s toàn qu c hay thông tin v qu n lý t ai c n c ch ng h n?
Trong các bài toán nh v y, s l ng d li u v t quá kh n ng l u tr c a b nh trong. có th
gi i quy t các bài toán ó chúng ta ph i dùng b nh ngoài l u tr và x lý. Các thi t b l u tr
ngoài nh b ng t , a t u có kh n ng l u tr l n nh ng c m truy nh p hoàn toàn khác v i b
nh trong. Chúng ta c n tìm các c u trúc d li u và gi i thu t thích h p cho vi c x lý d li u l u tr
trên b nh ngoài.

Ki u d li u t p tin là ki u thích h p nh t cho vi c bi u di n d li u c l u trong b nh


ngoài. H u hành chia b nh ngoài thành các kh i (block) có kích th c b ng nhau, kích th c này
thay i tùy thu c vào h u hành nh ng nói chung là t 512 bytes n 4096 bytes.

Trong quá trình x lý, vi c chuy n giao d li u gi a b nh trong và b nh ngoài c ti n


hành thông qua vùng nh m (buffer). B m là m t vùng dành riêng c a b nh trong mà kích
th c b ng v i kích th c c a m t kh i c a b nh ngoài.

Có th xem m t t p tin bao g m nhi u m u tin c l u trong các kh i . M i kh i l u m t s


nguyên v n các m u tin, không có m u tin nào b chia c t l u trên hai kh i khác nhau.

Trong thao tác c, nguyên m t kh i c a t p tin c chuy n vào trong b m và l n l t


c các m u tin có trong b m cho t i khi b m r ng thì l i chuy n m t kh i t b nh ngoài vào
m.

ghi thông tin ra b nh ngoài, các m u tin l n l t c x p vào trong b m cho n khi
yb m thì nguyên m t kh i c chuy n ra b nh ngoài. Khi ó b m tr nên r ng và l i có
th x p ti p các m u tin vào trong ó.

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 67


Collected by The_Wall (11/10/2005)

Nh v y n v giao ti p gi a b nh trong và b m là m u tin còn gi a b m và b nh


ngoài là kh i.

Hình 4-1 mô t h at ng c a b nh trong, b m và b nh ngoài trong thao tác c và ghi


p tin

IV.2- ÁNH GIÁ CÁC GI I THU T X LÝ NGOÀI


i v i b nh ngoài thì th i gian tìm m t kh i c vào b nh trong là r t l n so v i th i
gian thao tác trên d li u trong kh i ó. Ví d gi s ta có m t kh i có th l u 1000 s nguyên c
u trên a quay v i v n t c 1000 vòng/ phút thì th i gian a u t vào rãnh ch a kh i và quay
a a kh i n ch u t h t kho ng 100 mili giây. V i th i gian này máy có th th c hi n
100000 l nh, t c là s p x p các s nguyên này theo gi i thu t QuickSort. Vì v y khi ánh giá
các gi i thu t thao tác trên b nh ngoài, chúng ta t p trung vào vi c xét s l n c kh i vào b nh
trong và s l n ghi kh i ra b nh ngoài ta g i chung là phép truy xu t kh i (block access). Vì kích
th c các kh i là c nh nên ta không th tìm cách t ng kích th c m t kh i mà chúng ta ph i tìm
cách gi m s l n truy xu t kh i.
IV.3- S P X P NGOÀI
IV.3.1- S p x p tr n
IV.3.2- C i ti n s p x p tr n
IV.3.3- Tr n nhi u ng

S p x p d li u c t ch c nh m t t p tin ho c t ng quát h n, s p x p d li u cl u
trên b nh ngoài g i là s p x p ngoài.

IV.3.1- S p x p tr n (merge sorting)


Khái ni m v ng
ng dài k là m t t p h p k m u tin ã oc s p th t theo khoá t c là, n u các m u tin
r1, r2, ..., rk có khoá l n l t là k1, k2, ..., kk t o thành m t ng thì k1 k2 ... kk.

Cho t p tin ch a các m u tin r1, r2 , ..., rn, ta nói t p tin c t ch c thành ng có dài k
u ta chia t p tin thành các n k m u tin liên ti p và m i n là m t ng, n cu i có th
không có k m u tin, trong tr ng h p này ta g i n y là uôi (tail).

Ví d 4-1: T p tin g m 14 m u tin có khóa là các s nguyên c t ch c thành 4 ng


dài 3 và m t uôi có dài 2

5 6 9 13 26 27 1 5 8 12 14 17 23 25
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 68
Collected by The_Wall (11/10/2005)

Gi i thu t
s p x p t p tin F có n m u tin ta s d ng 4 t p tin F1, F2, G1 và G2.

Kh i u ta phân ph i các m u tin c a t p tin ã cho F luân phiên vào trong hai t p tin F1 F2.
Nh v y hai t p tin này c xem nh c t ch c thành các ng dài 1.

c 1: c 2 ng, m i ng dài 1 t hai t p tin F1, F2 và tr n hai ng này thành


ng dài 2 và ghi luân phiên vào trong hai t p tin G1, G2. i vai trò c a F1 cho G1, F2 cho G2.

c 2: c 2 ng, m i ng dài 2 t hai t p tin F1, F2 và tr n hai ng này thành


ng dài 4 và ghi luân phiên vào trong hai t p tin G1, G2. i vai trò c a F1 cho G1, F2 cho G2.

Quá trình trên c ti p t c và sau i b c thì dài c a m t ng là 2i. N u 2i n thì gi i thu t


t thúc, lúc ó t p tin G2 s r ng và t p tin G1 ch a các m u tin ã c s p.

ánh giá gi i thu t s p x p tr n


Ta th y gi i thu t k t thúc sau i b c v i i logn. M i b c ph i c t 2 t p tin và ghi vào 2
p tin, m i t p tin có trung bình n/2 m u tin. Gi s m i m t kh i l u tr c b m u tin thì m i b c
n c và ghi kh i mà chúng ta c n logn b c v y t ng c ng chúng ta c n phép
truy xu t kh i.

Ví d 4-2: Cho t p tin F có 23 m u tin v i khóa là các s nguyên nh sau:

F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22

b t u ta phân ph i các m u tin c a F luân phiên vào hai t p tin F1 và F2 c t ch c


thành các ng có dài 1

28 3 93 10 54 65 30 90 10 69 8 22 F1

31 5 96 40 85 9 39 13 8 77 10 F2

B c 1: Tr n các ng dài 1 c a F1 và F2 c các ng dài 2 và ghi luân phiên vào


trong hai t p tin G1, G2:

G1: 28 31 93 96 54 85 30 39 8 10 8 10 F1

G2: 3 5 10 40 9 65 13 90 69 77 22 F2

B c 2: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 2 trong hai t p


tin F1 và F2 c các ng dài 4 r i ghi luân phiên vào trong hai t p tin G1 và G2:

G1: 3 5 28 31 9 54 65 85 8 10 69 77 F1

G2: 10 40 93 96 13 30 39 90 8 10 22 F2
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 69
Collected by The_Wall (11/10/2005)

B c 3: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 4 trong hai t p


tin F1 và F2 c các ng dài 8 r i ghi luân phiên vào trong hai t p tin G1 và G2:

G1: 3 5 10 28 31 40 93 96 8 8 10 10 22 69 77 F1

G2: 9 13 30 39 54 65 85 90 F2

B c 4: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 8 trong hai t p


tin F1 và F2 c các ng dài 16 r i ghi luân phiên vào trong 2 t p tin G1 và G2.

G1: 3 5 9 10 13 28 30 31 39 40 54 65 85 90 93 96 F1

G2: 8 8 10 10 22 69 77 F2

B c 5: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 16 trong hai t p


tin F1 và F2 c1 ng dài 23 r i ghi vào trong t p tin G1.

G1: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96

T p tin G1 ch a các m u tin ã c s p còn t p tin G2 r ng.

Ch ng trình

procedure Merge(k:integer; f1,f2,g1,g2: File of RecordType);


{Th t c này tr n các ng dài k và trong hai t p tin f1 và f2 thành các ng dài 2k và
ghi luân phiên vào trong hai t p tin g1 và g2}

var
OutSwithh : boolean; {N u OutSwitch = TRUE thì ghi vào t p tin g1, ng c l i ghi vào g2}
Winner: integer; { ch nh m u tin hi n hành nào trong hai t p tin f1 và f2 s c ghi ra t p
tin g1 ho c g2}
Used: array[1..2] of integer; { Used[ij] ghi s m u tin ã c c trong ng hi n t i c a t p
tin fj }
Fin : array[1..2] Of boolean; {Fin[j] s có giá tr TRUE n u ã c h t các m u tin trong ng
hi n hành c a fj ho c ã d n cu i t p tin fj }

Current: array[1..2] Of RecordType; { Current[j] l u m u tin hi n hành c a t p tin f[j]}

procedure GetRecord(i:integer);
{N u ã c h t các m u tin trong ng hi n hành c a t p tin fi ho c ã n cu i t p tin fi thì
t fin[i] = TRUE n u không thì c m t m u tin c a t p tin fi vào trong current[i]}

begin
Used[i] := Used[i] + 1;
if (Used[i] = k+1 ) or (i = 1) and ( eof(f1)) or
(i = 12 and ( eof(f2)) then fin[i] := TRUE
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 70
Collected by The_Wall (11/10/2005)

else if i=1 then Read(f1, current[1])


else read(f2, current[2]);
end;
begin
{ Kh i t o }
OutSwitch := TRUE;
ReSet(f1);
ReSet(f2);
ReWrite(g1);
ReWrite(g2);
while (not eof(f1)) or (not eof(f2)) do begin
{B t u c các m u tin t trong hai ng hi n hành c a hai t p tin f1,f2 }
Used[1] := 0; Used[2] := 0;
Fin[1] := FALSE ; Fin[2] := FALSE ;
GetRecord(1) ; GetRecord(2);
while ( not fin[1] ) or (not fin[2]) do begin
{Tr n hai ng }
{ Ch n Winner }
if Fin[1] then Winner := 2
else if Fin[2] then Winner := 1
else if current[1].key < Current[2].key then
Winner := 1
else Winner := 2;
if OutSwitch then Write(g1, Current[winner] )
else Write(g2, current[winner] );
GetRecord(Winner);
end;
OutSwitch := Not OutSwitch;
end;
end;

IV.3.2.C i ti n s p x p tr n
Ta th y quá trình s p x p tr n nói trên b t u t các ng dài 1 cho nên ph i sau logn
c gi i thu t m i k t thúc. Chúng ta có th ti t ki m th i gian b ng cách ch n m t s k thích h p
sao cho k m u tin có th ch a trong b nh trong. M i l n c vào b nh trong k m u tin, dùng
p x p trong (ch ng h n dùng QuickSort) s p x p k m u tin này và ghi luân phiên vào hai t p tin
F1 và F2. Nh v y chúng ta b t u s p x p tr n v i các t p tin c t ch c thành các ng dài
k.

Sau i b c thì dài m i ng là k2i. Gi i thu t s k t thúc khi k2i n hay i log . Do ó

phép truy xu t kh i s là . D th y c là ta t ng ct c s p x p tr n.

Ví d 4-3: L y t p tin F có 23 m u tin v i khóa là các s nguyên nh trong ví d 4-2

F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22

Ta gi s b nh trong có th ch a c 3 m u tin, ta c l n l t 3 m u tin c a F vào b nh


trong , dùng m t s p x p trong s p x p chúng và ghi phiên vào 2 t p tin F1 và F2.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 71
Collected by The_Wall (11/10/2005)

3 28 31 10 40 54 30 39 90 8 69 77 F1

5 93 96 9 65 85 8 10 13 10 22 F2

c 1: Tr n các ng dài 3 c a F1 và F2 c các ng dài 6 và ghi luân phiên vào


trong hai t p tin G1, G2:

G1: 3 5 28 31 93 96 8 10 13 30 39 90 F1

G2: 9 10 40 54 65 85 8 10 22 69 77 F2

c 2: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 6 trong 2 t p tin


F1 và F2 c các ng dài 12 r i ghi luân phiên vào trong 2 t p tin G1 và G2:

G1: 3 5 9 10 28 31 40 54 65 85 93 96 F1

G2: 8 8 10 10 13 22 30 39 69 77 90 F2

c 3: i vai trò c a F1 và G1, F2 và G2 cho nhau. Tr n các ng dài 12 trong 2 t p


tin F1 và F2 c1 ng ghi vào trong t p tin G1, còn G2 r ng

G1: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96

T p tin G1 ch a các m u tin ã c s p còn t p tin G2 r ng.

IV.3.3- Tr n nhi u ng (multiway merge)


Gi i thu t
s p x p t p tin F có n m u tin ta s d ng m t p tin (m là m t s ch n) F[1], F[2], ..., F[m].
Trong tr ng h p m=4 ta có gi i thu t s p x p tr n bình th ng.

G i h = m/2, ta có n i dung c a ph ng pháp nh sau (ta v n gi s b nh trong có th ch a


k m u tin).

Kh i u: M i l n c t t p tin F vào b nh trong k m u tin, s d ng m t s p x p trong


p x p k m u tin này thành m t ng r i ghi luân phiên vào các t p tin F[1], F[2], ... , F[h].

c 1: Tr n các ng dài k c a h t p tin F[1], F[2], ..., F[h] thành m t ng dài kh


và ghi luân phiên vào trong h t p tin F[h+1], F[h+2], ... , F[m]. i vai trò c a F[i] và F[h+i]] cho nhau
(v i 1 i h).

c 2: Tr n các ng dài kh c a h t p tin F[1], F[2], ..., F[h] thành m t ng dài


2
kh và ghi luân phiên vào trong h t p tin F[h+1], F[h+2], ... , F[m]. i vai trò c a F[i] và F[h+i]] cho
nhau (v i 1 i h).

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 72


Collected by The_Wall (11/10/2005)

Sau i b c thì dài m i ng là khi và gi i thu t k t thúc khi khi n và khi ó t p tin ã
c s p chính là m t ng ghi trong F[h+1].

ánh giá gi i thu t s p x p tr n nhi u ng

Theo trên thì gi i thu t k t thúc sau i b c, v i khi n hay . M i b c ta ph i c t h


p tin và ghi vào trong h t p tin, trung bình m i t p tin có n/h m u tin. Ta v n gi s m i kh i l u
c b m u tin thì m i b c ph i truy xu t kh i. Do chúng ta c n c nên t ng c ng

ta ch c n phép truy xu t kh i.Ta th y rõ ràng và th t c mergeSort nói trên là m t


tr ng h p c biêt khi h = 2.

Ví d 4-4: L y t p tin F có 23 m u tin v i khóa là các s nguyên nh trong ví d 4-2

F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22.

S d ng 6 t p tin s p x p t p tin F. Ta gi s b nh trong có th ch a c 3 m u tin, ta


c l n l t 3 m u tin c a F vào b nh trong , dùng m t s p x p trong s p x p chúng và ghi phiên
vào 3 t p tin F[1], F[2] và F[3] nh sau:

F[1]: 3 28 31 9 65 85 8 69 77

F[2]: 5 93 96 30 39 90 10 22

F[3]: 10 40 54 8 10 13

c 1: Tr n các ng ü dài 3 trong các t p tin F[1], F[2], F[3] thành các ng dài 9
và ghi vào trong các t p tin F[4], F[5] và F[6].

F[4]: 3 5 10 28 31 40 54 93 96 F[1]

F[5]: 8 9 10 13 30 39 65 85 90 F[2]

F[6]: 8 10 22 69 77 F[3]

c 2: i vai trò c a F[1] cho F[4], F[2] cho F[5] và F[3] cho F[6]. Tr n các ng dài
9 trong các t p tin F[1], F[2], F[3] thành 1 ng dài 23 và ghi vào trong t p tin F[4].

F[4]: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96

T p tin F[4] ch a các m u tin ã c s p còn F[5] và F[6] r ng.


IV.4- L U TR THÔNG TIN TRONG T P TIN
IV.4.1- T p tin tu n t

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 73


Collected by The_Wall (11/10/2005)

IV.4.2- T ng t c cho các thao tác t p tin


IV.4.3- T p tin b m
IV.4.4- T p tin ch m c
IV.4.5- C u trúc B-cây

Trong ph n này ta s nghiên c u các c u trúc d li u và gi i thu t cho l u tr (storing) và l y


thông tin (retrieving) trong các t p tin c l u tr ngoài. Chúng ta s coi m t t p tin nh là m t chu i
tu n t các m u tin, m i m u tin bao g m nhi u tr ng (field). M t tr ng có th có dài c nh
ho c dài thay i. ây ta s xét các m u tin có dài c nh và kh o sát các thao tác trên t p tin
là:

· Insert: Thêm m t m u tin vào trong m t t p tin,

· Delete: Xoá m t m u tin t trong t p tin,

· Modify: S a i thông tin trong các m u tin c a t p tin, và

· Retrieve: Tìm l i thông tin c l u trong t p tin.

Sau ây ta s nghiên c u m t s c u trúc d li u dùng l u tr t p tin. V i m i c u trúc


chúng ta s trình bày t ch c, cách th c ti n hành các thao tác tìm, thêm, xoá m u tin và có ánh giá
cách t ch c ó. S ánh giá ây ch y u là ánh giá xem tìm m t m u tin thì ph i c bao
nhiêu kh i vì các thao tác khác u ph i s d ng thao tác tìm.

IV.4.1- T p tin tu n t
ch c: T p tin tu n t là m t danh sách liên k t c a các kh i, các m u tin c l u tr
trong các kh i theo m t th t b t k .

Tìm m u tin: Vi c tìm ki m m t m u tin có giá tr xác nh c th c hi n b ng cách c


ng kh i, v i m i kh i ta tìm m u tin c n tìm trong kh i, n u không tìm th y ta l i c ti p m t kh i
khác. Quá trình c ti p t c cho n khi tìm th y m u tin ho c duy t qua toàn b các kh i c a t p tin và
trong tr ng h p ó thì m u tin không t n t i trong t p tin.

Thêm m u tin m i: Vi c thêm m t m u tin có th th c hi n n gi n b ng cách a m u tin


này vào kh i cu i cùng c a t p tin n u nh kh i ó còn ch tr ng. Ng c l i n u kh i cu i cùng ã h t
ch thì xin c p thêm m t kh i m i, thêm m u tin vào kh i m i và n i kh i m i vào cu i danh sách.

a i m u tin: s a i m t m u tin có giá tr cho tr c, ta tìm m u tin c n s a ir i


th c hi n các s a i c n thi t sau ó ghi l i m u tin vào v trí c trong t p tin.

Xoá m u tin: xoá m t m u tin, tr c h t ta c ng c n tìm m u tin ó, n u tìm th y ta có th


th c hi n m t trong các cách xoá sau ây:

M t là xoá m u tin c n xoá trong kh i l u tr nó, n u sau khi xoá, kh i tr nên r ng thì xoá
kh i kh i danh sách (gi i phóng b nh ).

Hai là ánh d u xoá m u tin b ng m t cách nào ó. Ngh a là ch xoá m u tin m t cách logic,
vùng không gian nh v n còn dành cho m u tin. Vi c ánh d u có th c th c hi n b ng m t trong

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 74


Collected by The_Wall (11/10/2005)

· Thay th m u tin b ng m t giá tr nào ó mà giá tr này không bao gi là giá tr th t c a


t k m t m u tin nào.

· M i m t m u tin có m t bít xóa, bình th ng bit xóa c a m u tin có giá tr 0, mu n xóa


u tin ta t cho bit xóa giá tr 1. V i ph ng pháp này thì m t m u tin sau khi b ánh d u xoá c ng
có th ph c h i c b ng cách t bit xoá c a m u tin giá tr 0.

ánh giá: ây là m t ph ng pháp t ch c t p tin n gi n nh t nh ng kém hi u qu nh t. Ta


th y t p tin là m t danh sách liên k t c a các kh i nên các thao tác trên t p tin u òi h i ph i truy
xu t h u nh t t c các kh i, t kh i u tiên n kh i cu i cùng.

I IV.4.2- T ng t c cho các thao tác t p tin


Nh c m c a cách t ch c t p tin tu n t trên là các thao tác trên t p tin r t ch m. c i
thi n t c thao tác trên t p tin, chúng ta ph i tìm cách gi m s phép truy xu t kh i. Mu n v y ph i
tìm các c u trúc sao cho khi tìm m t m u tin ch c n phép truy xu t m t s nh các kh i c a t p tin.

t o ra các t ch c t p tin nh v y chúng ta ph i gi s r ng m i m u tin có m t khoá (key),


ó là m t t p h p các tr ng mà c n c vào ó ta có th phân bi t các m u tin v i nhau. Ch ng h n mã
sinh viên trong m u tin v sinh viên, bi n s xe trong qu n lí các ph ng ti n v n t i ng b .

Sau ây ta s xét m t s c u trúc nh th .

IV.4.3- T p tin b m (hash files)


ch c: Ta s s d ng b ng b m m l u tr t p tin. B ng b m là m t b ng có m ph n t ,
i ph n t c ánh s t 0 n m-1 ( n gi n nh t là m ng m t chi u B g m m ph n t B[0],
B[1], ..., B[m-1]). M i ph n t là m t con tr , tr t i ph n t u tiên c a danh sách liên k t các kh i.

phân ph i các m u tin có khóa x vào trong các danh sách liên k t, ta dùng hàm b m (hash
function). Hàm b m h(x) ánh x m i giá tr khoá x v i m t s nguyên t 0 n m-1. N u h(x) = i thì
u tin r có khóa x s c a vào m t kh i nào ó trong danh sách liên k t c tr b i B[i].

Có nhi u ph ng pháp xác nh hàm b m. Cách n gi n nh t là “nguyên hóa” giá tr khóa


x (n u x không ph l là m t s nguyên) sau ó ta cho h(x) = x MOD m.

Ví d 4-5: M t t p tin có 24 m u tin v i giá tr khóa là các s nguyên: 3, 5, 12, ,65, 34, 20, 21,
17, 56, 1, 16, 2, 78, ,94, 38 ,15 ,23, 14, 10, 29, 19, 6, 45, 36

Gi s chúng ta có th t ch c t p tin này vào trong b ng b m g m 7 ph n t và gi s m i


kh i có th ch a c t i a 3 m u tin. V i m i m u tin r có khóa là x ta xác nh h(x) = x MOD 7 và
a m u tin r vào trong m t kh i c a danh sách liên k t c tr b i B[h(x)].

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 75


Collected by The_Wall (11/10/2005)

Tìm m u tin: tìm m t m u tin r có khóa là x, chúng ta xác nh h(x) ch ng h n h(x) = i khi
ó ta ch c n tìm r trong danh sách liên k t c tr b i B[i]. Ch ng h n tìm m u tin r có khóa là
36, ta tính h(36) = 36 MOD 7 = 1. Nh v y n u m u tin r t n t i trong t p tin thì nó ph i thu c m t
kh i nào ó c tr b i B[1].

Thêm m u tin: thêm m u tin r có khoá x, tr c h t ta ph i tìm xem ã có m u tin nào


trong t p tin có khóa x ch a. N u có ta cho m t thông báo l i vì theo gi thi t các m u tin không có
khoá trùng nhau. Ng c l i ta s tìm m t kh i (trong danh sách các kh i c a lô c tr b i B[h(x)])
còn ch tr ng cho m u tin r và thêm nó vào kh i này. N u không còn kh i nào ch cho m u tin
i ta yêu c u h th ng c p phát m t kh i m i và t m u tin r vào kh i này r i n i kh i m i này vào
cu i danh sách liên k t c a lô.

Xoá m u tin: xoá m u tin r có khoá x, tr c h t ta tìm m u tin này và t bít xoá c a nó.
Ta c ng có th xoá h n m u tin r và n u vi c xoá này làm kh i tr nên r ng thì ta gi i phóng kh i này
(xoá kh i kh i danh sách liên k t các kh i).

ánh giá: Gi s t p tin có n m u tin và m i kh i l u tr c k m u tin thì t p tin c n n/k


kh i. Trung bình m i danh sách liên k t có n/km kh i, mà chúng ta ch tìm trong m t danh sách liên
t nên ta ch ph i truy xu t n/km kh i. S này nh h n m l n so v i cách t ch c t p tin tu n t (trong
p tin tu n t ta c n truy xu t t t c các kh i, t c là n/k kh i). Ch ng h n v i 24 m u tin nh trong ví
trên, v i cách t ch c t p tin tu n t ta c n úng 8 kh i l u tr (vì m i kh i ch a t i a 3 m u
tin). Nh v y tìm m t m u tin, ch ng h n m u tin có khóa 36 chúng ta ph i c úng 8 kh i (do
u tin có khóa 36 n m trong kh i cu i cùng). Nh ng v i cách t ch c t p tin b ng b m chúng ta ch
n trung bình 24/(3*7) l n c kh i . Trong th c t ta ch c n 2 l n c kh i (vì m u tin có khóa 36
m trong kh i th 2 c a lô c tr b i B[1]).

IV.4.4- T p tin ch m c (index file)


ch c: M t cách khác th ng g p là t p tin c s p x p theo khoá, r i chúng ta ti n hành
tìm ki m nh là tìm m t t trong t n, t c là tìm ki m theo t u tiên trên m i trang.

th c hi n c u ó ta s d ng hai t p tin: T p tin chính và t p tin ch m c th a (sparse


index). T p tin chính bao g m các kh i l u các m u tin ã c s p th t theo giá tr khóa. T p tin
ch m c th a bao g m các kh i ch a các c p (x, p) trong ó x là khoá c a m u tin u tiên trong m t
kh i c a t p tin chính, còn p là con tr , tr n kh i ó.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 76
Collected by The_Wall (11/10/2005)

xây d ng c m t c u trúc nh v y, tr c h t ta s p x p các m u tin theo giá tr khóa và


phân ph i chúng vào trong các kh i c a t p tin chính. Có hai cách phân ph i là: L p y các kh i b i
các m u tin. Ho c ch phân ph i vào các kh i m t s ít m u tin còn nh ng ch tr ng c a kh i dành
cho vi c xen các m u tin sau này. Sau khi phân ph i các m u tin, ta b t u duy t qua t ng kh i l p
ch m c b ng cách l y khoá c a m u tin u tiên c a m i kh i cùng v i a ch kh i t o thành m t
p trong t p tin ch m c. Cách phân ph i các c p (khóa, a ch ) vào cho các kh i c a t p tin ch m c
ng c ti n hành b ng m t trong hai cách nh i v i t p tin chính.

Ví d 4-6: Ta có t p tin g m các m u tin v i khoá là các s nguyên: 5, 8, 3, 11, 23, 10, 28, 25,
27, 38, 16, 46, 42, 31.

u tiên ta s p th t các m u tin theo giá tr khóa: 3, 5, 8, 10, 11, 16, 23, 25, 27, 28, 31, 38,
42, 46.

Gi s m i kh i ch a c 3 m u tin, ta có th phân ph i các m u tin vào các kh i b ng cách


p y các kh i b i 3 m u tin. Sau ó t o t p tin ch m c th a cho t p tin chính theo cách ã trình bày
trên. K t qu ta c c u trúc nh trong hình sau:

Tìm ki m: tìm m u tin r có khoá x, ta ph i tìm c p (z,p) v i z là giá tr l n nh t và

z x. M u tin r có khoá x n u t n t i thì s n m trong kh i c tr b i p.

Ch ng h n tìm m u tin r có khoá 11, ta tìm trong t p tin ch m c c c p (10, ·), ch a a


ch kh i 2, Ta ch c n tìm m u tin có khoá 11 trong kh i này.

Tìm m t m u tin trong m t kh i c a t p tin chính có th ti n hành b ng tìm ki m tu n t ho c


ng tìm ki m nh phân b i l các m u tin trong m t kh i ã c s p th t .

Thêm m u tin: Gi s t p tin chính c l u trong các kh i B1, B2, ..., Bm. xen m t
un tin r v i khóa x vào trong t p tin, ta ph i dùng th t c tìm ki m xác nh m t kh i Bi nào ó
có th ch a m u tin r. N u Bi còn ch tr ng thì xen r vào úng v trí c a nó trong Bi. Ta ph i ch nh l i
p tin ch m c n u m u tin m i tr thành m u tin u tiên trong kh i Bi. N u Bi không còn ch tr ng
xen thì ta ph i xét kh i Bi+1 có th chuy n m u tin cu i cùng trong kh i Bi thành m u tin u
tiên c a kh i Bi+1 và xen m u tin r vào úng v trí c a nó trong kh i Bi . u ch nh l i t p tin ch
c cho phù h p v i tr ng thái m i c a Bi+1. Quá trình này có th d n n vi c ta ph i xét kh i Bm,
u Bm ã h t ch thì yêu c u h th ng c p thêm m t kh i m i Bm+1, chuy n m u tin cu i cùng c a
Bm sang Bm+1, m u tin cu i cùng c a Bm-1 sang Bm….xen m u tin r vào kh i Bi và c p nh t l i t p
tin ch m c.

n ây chúng ta s th y r ng cách phân ph i các m u tin vào trong các kh i c a t p tin


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 77
Collected by The_Wall (11/10/2005)

chính, n u còn tr l i m t s ch tr ng tuy có hao t n b nh ngoài nh ng l i r t thu n ti n cho vi c


xen thêm các m u tin.

Ví d 4-7: Ch ng h n ta c n xen m u tin r v i khóa x=24 vào trong t p tin c bi u di n


trong hình 4-3. Th t c tìm x trong t p tin ch m c xác nh c kh i c n xen r là kh i 3. Vì kh i 3 có
3 m u tin nên ph i chuy n m u tin có khóa 27 sang kh i 4 và xen r vào kh i 3. Vì kh i 4 c ng ã
3 m u tin nên xét kh i 5 í chuy n m u tin có khóa 38 thành m u tin u tiên c a kh i 5. Vì m u
tin u tiên c a kh i 4 bây gi có khóa 27 nên ta ph i s a l i giá tr này trong c p c a t p tin ch m c
ng ng v i kh i 4. Ta c ng ph i làm t ng t i v i kh i 5. C u trúc c a t p tin sau khi thêm m u
tin r có khóa 24 nh sau:

Xoá m u tin: xoá m u tin r có khoá x, tr c h t ta c n tìm r, n u không tìm th y thì thông
báo l i, ng c l i ta xoá m u tin r trong kh i ch a nó, n u m u tin b xoá là m u tin u tiên c a kh i
thì ph i c p nh t l i giá tr khoá trong t p tin ch m c. Trong tr ng h p kh i tr nên r ng sau khi xoá
u tin thì gi i phóng kh i ó và xoá c p (khoá, con tr ) c a kh i trong t p tin ch m c. Vi c xoá
trong t p tin ch m c c ng có th d n n vi c gi i phóng kh i trong t p tin này.

ánh giá: Ta th y vi c tìm m t m u tin ch òi h i ph i c ch m t s nh các kh i (m t


kh i trong t p tin chính và m t s kh i trong t p tin ch m c). Tuy nhiên trong vi c xen thêm m u tin,
nh trên ã nói, có th ph i c và ghi t t c các kh i trong t p tin chính. ây chính là nh c m c a
p tin ch m c.

IV.4.5- C u trúc B-cây


Cây tìm ki m m-phân
Cây tìm ki m m-phân (m-ary tree) là s t ng quát hoá c a cây tìm ki m nh phân trong ó m i
nút có th có m nút con. Gi s n1 và n2 là hai con c a m t nút nào ó, n1 bên trái n2 thì t t c các con
a n1 có giá tr nh h n giá tr c a các nút con c a n2.

Chúng ta s s d ng cây m-phân l u tr các m u tin trong t p tin trên b nh ngoài. M i


t nút bi u di n cho m t kh i v t lý trong b nh ngoài. Trong ó các nút lá l u tr các m u tin c a
p tin chính. Các nút trong l u tr m con tr , tr t i m nút con, nó c ng l u tr m-1 khoá phân chia
các giá tr trong các nút con cháu.

N u ta dùng cây tìm ki m nh phân n nút l u tr m t t p tin thì c n trung bình logn phép
truy xu t kh i tìm ki m m t m u tin. N u ta dùng cây tìm ki m m-phân l u tr î m t t p tin thì
ch c n logmn phép truy xu t kh i tìm ki m m t m u tin. Sau ây chúng ta s nghiên c u m t
tr ng h p c bi t c a cây tìm ki m m-phân là B-cây.

B-cây (B-tree)

B-cây b c m là cây tìm ki m m-phân cân b ng có các tính ch t sau:


Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 78
Collected by The_Wall (11/10/2005)

· Nút g c ho c là lá ho c có ít nh t hai nút con,

· M i nút, tr nút g c và nút lá, có t [m/2] n m nút con và

· Các ng i t g c t i lá có cùng dài.

ch c: Ta có th s d ng B-cây b c m l u tr t p tin nh sau:

M i nút trên cây là m t kh i trên a, các m u tin c a t p tin c s p th t theo khoá và


c l u tr trong các nút lá trên B-cây. Gi s m i nút lá l u tr c nhi u nh t b m u tin.

M i nút không ph i là nút lá có d ng (p0, k1, p1, k2, p2, ..., kn, pn), v i pi (0 i n) làì con
tr , tr t i nút con th i c a nút ó và ki là các giá tr khóa. Các khoá trong m t nút c s p th t ,
c là k1 < k2 < ... < kn.

T t c các khoá trong cây con c tr b i p0 u nh h n k1. T t c các khoá n m trong cây
con c tr b i pi (1 i n) u l n h n ho c b ng ki và nh h n ki+1. T t c các khoá n m trong
cây con c tr b i pn u l n h n ho c b ng kn.

Ví d 4-8: Cho t p tin bao g m 20 m u tin v i giá tr khóa là các s nguyên c t ch c


thành B-cây c 5 v i các nút lá ch a c nhi u nh t 3 m u tin.

Tìm ki m: tìm ki m m t m u tin r có khoá là x chúng ta s l n t nút g c n nút lá ch a r


(n u r t n t i trong t p tin). T i m i b c ta a nút trong (p0, k1, p1, ..., kn, pn) vào b nh trong và
xác nh m i quan h gi a x v i các giá tr khóa ki.
· N u ki x < ki+1 (1 i < n) chúng ta s xét ti p nút c tr b i pi,

· N u x < k1 ta s xét ti p nút c tr b i p0 và

·N ux kn ta s xét ti p nút c tr b i pn.

Quá trình trên s d n n vi c xét m t nút lá. Trong nút lá này ta s tìm m u tin r v i khóa x
ng tìm ki m tu n t ho c tìm ki m nh phân.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 79
Collected by The_Wall (11/10/2005)

Thêm m u tin: thêm m t m u tin r có khoá là x vào trong B-cây, ta áp d ng th t c tìm


ki m nói trên xác nh nút lá L mà m u tin này ph i n m trong ó. N u kh i L này còn ch cho r
thì ta thêm r vào sao cho úng th t c a nó trong kh i L và gi i thu t k t thúc. N u L không còn ch
cho r thì ta yêu c u h th ng c p phát m t kh i m i L'. D i [b/2] (b là s m u tin nhi u nh t có th l u
trong m t kh i) m u tin n m phân n a cu i kh i L sang L' r i xen r vào L ho c L' sao cho vi c xen
m b o th t các khoá trong kh i. Gi s nút P là cha c a L (P ph i c bi t vì th t c tìm i t g c
n L ph i thông qua P). Bây gi ta áp d ng th t c xen quy xen vào P m t khóa k’ và con tr p'
ng ng c a nút lá L’ (k' là khoá c a m u tin u tiên trong L'). Trong tr ng h p tr c khi xen k'
và p’ , P ã có m con thì ta ph i c p thêm m t kh i m i P’ và chuy n m t s con c a P sang P’ và
xen con m i vào P ho c P’ sao cho c P và P’ u có ít nh t [m/2] con. Vi c chia c t P này òi h i
phaií xen m t khóa và m t con tr vào nút cha c a P... Quá trình này có th s d n t i nút g c và c ng
có th ph i chia c t nút g c, trong tr ng h p này ph i t o ra m t nút g c m i mà hai con c a nó là hai
a c a nút g c c . Khi ó chi u cao c a B-cây s t ng lên 1.

Ví d 4-9: Thêm m u tin r có khoá 19 vào t p tin c bi u di n b i B-cây trong ví d 4-8

· Quá trình tìm ki m s xu t phát t G C i qua P2 và d n t i nút lá L4

· Trong nút lá L4 còn ch xen r vào úng v trí và gi i thu t k t thúc.

K t qu vi c xen ta c B-cây trong hình 4-6:

Ví d 4-10: Thêm m u tin r có khoá 23 vào trong t p tin bi u di n b i B-cây trong ví d 4-8
(hình 4-5)

· Quá trình tìm ki m i t nút G C, qua P2 và t i nút lá L5.

· Vì L5 ã 3 m u tin nên ph i t o ra m t nút lá m i L’5 và chuy n 2 m u tin có khóa


24, 26 sang L’5 sau ó xen r vào L5.

· Giá tr khóa c a m u tin u tiên trong L’5 là 24, ta ph i xen 24 và con tr c a L’5 vào
P2, nh ng P2 ã có 5 con v y c n t o ra m t nút m i P’2, chuy n các c p khóa, con tr t ng ng
i 34 và 38 sang P’2 và xen c p con tr , khóa 24 vào P2.
Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 80
Collected by The_Wall (11/10/2005)

· Do có m t nút m i P’2 nên ph i xen vào cha c a P2 ( ây là nút G C) m t c p khóa,


con tr tr t i P’2. Con tr p0 c a nút P’2 tr t i nút lá L6, giá tr khóa u tiên c a L6 là 28. Giá tr
này ph i c xen vào nút G C cùng v i con tr c a P’2.

Xóa m t m u tin: xóa m u tin r có khóa x, tr c h t ta tìm n nút lá L ch a m u tin r,


xóa r kh i L. N u r là m u tin u tiên c a L, thì ta ph i quay lui lên nút P là cha c a L t l i giá tr
khóa c a L trong P, giá tr m i này b ng giá tr khóa c a m u tin m i u tiên c a L. Trong tr ng
p L là con u tiên c a P, thì khóa c a L không n m trong P mà n m trong t tiên c a P, chúng ta
ph i quay lui lên mà s a i.

N u sau khi xóa m u tin r mà L tr nên r ng thì gi i phóng L và n u s con c a P bây gi nh


n [m/2] thì ki m tra nút P’ ngay bên trái ho c bên ph i và cùng m c v i P. N u P’ có ít nh t [m/2] +
1 con, chúng ta chuy n m t con P’ sang P. Lúc này c P và P’ có ít nh t [m/2] con. Sau ó ta ph i c p
nh t l i giá tr khóa c a P và P’ trong cha c a chúng, và n u c n chúng ta ph i s a c trong t tiên c a
chúng.

N u P’ có úng [m/2] con, ta n i P và P’ thành m t nút có m con. Sau ó ta ph i xóa khóa và


con tr c a P’ trong nút cha c a P’. Vi c xóa này có th ph i quay lui lên t tiên c a P’. K t qu c a
quá trình xóa quay lui này có th d n t i vi c n i hai con c a nút g c, t o nên m t g c m i và gi i
phóng nút g c c , cao c a cây gi m i 1.

Ví d 4-11: Xóa m u tin r có khóa 38 trong t p tin bi u di n b i B-cây k t qu c a ví d 4-10


(hình 4-6).

· Quá trình tìm ki m, xu t phát t nút G C, i qua P’2 và l n n nút lá L8,

· Xóa m u tin r kh i L8.

· M u tin u tiên c a L8 bây gi có khóa 40,

· S a l i giá tr khóa c a L8 trong P’2 (thay 38 b i 40) ta c k t qu là B-cây sau:

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 81


Collected by The_Wall (11/10/2005)

Ví d 12: Xóa m u tin r có khóa 10 trong t p tin bi u di n b i B-cây k t qu c a ví d 10.

· Quá trình tìm ki m, xu t phát t nút G C, i qua P1 và l n n nút lá L2.

· Xóa m u tin r kh i L2.

· L2 bây gi tr nên r ng, gi i phóng L2.

· Xóa giá tr khóa 10 và con tr c a L2 trong P1, P1 bây gi ch có 2 con (2 < [5/2]).

· Xét nút P2, bên ph i và cùng c p v i P1, P2 có úng [5/2] = 3 con nên ta n i P1 và P2
P1 có úng 5 con,

· Xóa khóa và con tr c a P2 trong nút G C, ta c B-cây k t qu nh sau:

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 82


Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Gi i Thu t – I C C N TH ........................................................................Trang 83

You might also like