Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 1
1. Mc tiêu
2. Kin thc c bn cn có hc chng này
3. Tài liu tham kho có liên quan n chng
4. Ni dung:
I.1 - S cn thit phi phân tích gii thut.
I.2 - Thi gian thc hin ca gii thut.
I.3 - T sut tng và phc tp ca gii thut.
I.4 - Cách tính phc tp.
I.5 - Phân tích các chng trình quy.
5. Vn nghiên cu ca trang k tip
Trong chng này chúng ta s nghiên cu các vn sau:
· S cn thit phi phân tích các gii thut.
· Thi gian thc hin ca chng trình.
· T sut tng và phc tp ca gii thut.
· Tính thi gian thc hin ca chng trình.
· Phân tích các chng trình quy.
I.1- S CN THIT PHI PHÂN TÍCH GII THUT
Trong khi gii mt bài toán chúng ta có th có mt s gii thut khác nhau, vn là cn phi
ánh giá các gii thut ó la chn mt gii thut tt (nht). Thông thng thì ta s cn c vào các
tiêu chun sau:
1.- Gii thut úng n.
2.- Gii thut n gin.
3.- Gii thut thc hin nhanh.
Vi yêu cu (1), kim tra tính úng n ca gii thut chúng ta có th cài t gii thut ó
và cho thc hin trên máy vi mt s b d liu mu ri ly kt qu thu c so sánh vi kt quã
bit. Thc ra thì cách làm này không chc chn bi vì có th gii thut úng vi tt c các b d liu
chúng ta ã th nhng li sai vi mt b d liu nào ó. V li cách làm này ch phát hin ra gii thut
sai ch cha chng minh c là nó úng. Tính úng n ca gii thut cn phi c chng minh
ng toán hc. Tt nhiên u này không n gin và do vy chúng ta s không cp n ây.
Khi chúng ta vit mt chng trình s dng mt vài ln thì yêu cu (2) là quan trng nht.
Chúng ta cn mt gii thut d vit chng trình nhanh chóng có c kt qa , thi gian thc hin
chng trình không c cao vì dù sao thì chng trình ó cng ch s dng mt vài ln mà thôi.
Tuy nhiên khi mt chng trình c s dng nhiu ln thì thì yêu cu tiït kim thi gian
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 2
thc hin chng trình li rt quan trng c bit i vi nhng chng trình mà khi thc hin cn d
liu nhp ln do ó yêu cu (3) sc xem xét mt cách k càng. Ta gi nó là hiu qu thi gian thc
hin ca gii thut.
I.2- THI GIAN THC HIN CA GII THUT
I.2.1- Thi gian thc hin chng trình.
I.2.2- n vo thi gian thc hin.
I.2.3- Thi gian thc hin trong trng hp xu nht.
Mt phng pháp xác nh hiu qu thi gian thc hin ca mt gii thut là lp trình nó và o
ng thi gian thc hin ca hot ng trên mt máy tính xác nh i vi tp hp c chn lc các
liu vào.
Thi gian thc hin không ch ph thuc vào gii thut mà còn ph thuc váo tp các ch th
a máy tính, cht lng ca máy tính và k xo ca ngi lp trình. S thi hành cng có thu
chnh thc hin tt trên tp c bit các d liu vào c chn. vt qua các tr ngi này, các
nhà khoa hc máy tính ã chp nhn tính phc tp ca thi gian c tip cn nh mt so lng c
n s thc thi ca gii thut. Thut ng tính hiu qu s cp n so lng này và c bit i
i s phc tp thi gian trong trng hp xu nht.
I.2.1- Thi gian thc hin chng trình.
Thi gian thc hin mt chng trình là mt hàm ca kích thc d liu vào, ký hiu T(n) trong ó n
là kích thc ( ln) ca d liu vào.
Ví d 1-1: Chng trình tính tng ca n s có thi gian thc hin là T(n) = cn trong ó c là
t hng s.
Thi gian thc hin chng trình là mt hàm không âm, tc là T(n) ≥0 ∀n≥0.
I.2.2- n vo thi gian thc hin.
n v ca T(n) không phi là n vo thi gian bình thng nh gi, phút giây... mà thng
c xác nh bi s các lnh c thc hin trong mt máy tính lý tng.
Ví d 1-2: Khi ta nói thi gian thc hin ca mt chng trình là T(n) = cn thì có ngha là
chng trình y cn cn ch th thc thi.
I.2.3- Thi gian thc hin trong trng hp xu nht.
Nói chung thì thi gian thc hin chng trình không ch ph thuc vào kích thc mà còn
ph thuc vào tính cht ca d liu vào. Ngha là d liu vào có cùng kích thc nhng thi gian thc
hin chng trình có th khác nhau. Chng hn chng trình sp xp dãy s nguyên tng dn, khi ta
cho vào dãy có th t thì thi gian thc hin khác vi khi ta cho vào dãy cha có th t, hoc khi ta
cho vào mt dãy ã có th t tng thì thi gian thc hin cng khác so vi khi ta cho vào mt dãy ã
có th t gim.
Vì vy thng ta coi T(n) là thi gian thc hin chng trình trong trng hp xu nht trên
liu vào có kích thóc n, tc là: T(n) là thi gian ln nht thc hin chng trình i vi mi d
liu vào có cùng kích thc n.
I.3- T SUT TNG VÀ PHC TP CA GII THUT
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 3
I.3.1- T sut tng
I.3.2- Khái nim phc tp ca gii thut
I.3.1- T sut tng
Ta nói rng hàm không âm T(n) có sut tng (growth rate) f(n) nu tn ti các hng s c
và n
0
sao cho T(n) f(n) vi mi n n
0
.
Ta có th chng minh c rng “Cho mt hàm không âm T(n) bt k, ta luôn tìm c t
sut tng f(n) ca nó”.
Ví d 1-3: Gi s T(0) = 1, T(1) = 4 và tng quát T(n) = (n+1)
2
. t n
0
= 1 và c = 4 thì vi mi
n 1 chúng ta d dàng chng minh rng T(n) = (n+1)
2
4n
2
vi mi n 1, tc là t sut tng ca T(n)
là n
2
.
Ví d 1-4: T sut tng ca hàm T(n) = 3n
3
+ 2n
2
là n
3
. Thc vy, cho n
0
= 0 và c = 5 ta d
dàng chng minh rng vi mi n 0 thì 3n
3
+ 2n
2
5n
3
I.3.2- Khái nim phc tp ca gii thut
Gi s ta có hai gii thut P1 và P2 vi thi gian thc hin tng ng là T1(n) = 100n
2
(vi t
sut tng là n
2
) và T2(n) = 5n
3
(vi t sut tng là n
3
). Gii thut nào s thc hin nhanh hn? Câu tr
i ph thuc vào kích thc d liu vào. Vi n < 20 thì P2 s nhanh hn P1 (T2<T1), do h s ca 5n
3
nh hn h s ca 100n
2
(5<100). Nhng khi n > 20 thì ngc li do s m ca 100n
2
nh hn s m
a 5n
3
(2<3). ây chúng ta ch nên quan tâm n trng hp n>20 vì khi n<20 thì thi gian thc
hin ca c P1 và P2 u không ln và s khác bit gia T1 và T2 là không áng k..
Nh vy mt cách hp lý là ta xét t sut tng ca hàm thi gian thc hin chng trình thay
vì xét chính bn thân thi gian thc hin.
Cho mt hàm T(n), T(n) gi là có phc tp f(n) nu tn ti các hng c, N
0
sao cho T(n)
cf(n) vi mi n N
0
(tc là T(n) có t sut tng là f(n)) và kí hiu T(n) là O(f(n)) (c là “ô ca f(n)”)
Ví d 1-5: T(n)= (n+1)
2
có t sut tng là n
2
nên T(n)= (n+1)
2
là O(n
2
)
Chú ý: O(c.f(n))=O(f(n)) vi c là hng s. c bit O(c)=O(1)
Nói cách khác phc tp tính toán ca gii thut là mt hàm chn trên ca hàm thi gian. Vì
ng nhân t c trong hàm chn trên không có ý ngha nên ta có th b qua vì vy hàm th hin phc
p có các dng thng gp sau: log
2
n, n, nlog
2
n, n
2
, n
3
, 2
2
, n!, n
n
. Ba hàm cui cùng ta gi là dng
hàm m, các hàm khác gi là hàm a thc. Mt gii thut mà thi gian thc hin có phc tp là mt
hàm a thc thì chp nhn c tc là có th cài t thc hin, còn các gii thut có phc tp
hàm m thì phi tìm cách ci tin gii thut.
Khi nói n phc tp ca gii thut là ta mun nói n hiu qu ca thi gian thc hin ca
chng trình nên ta có th xem vic xác nh thi gian thc hiên ca chng trình chính là xác nh
phc tp ca gii thut.
I.4- CÁCH TÍNH PHC TP
I.4.1- Qui tc cng
I.4.2- Qui tc nhân
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 4
I.4.3- Qui tc tng quát phân tích mt chng trình
I.4.4- phc tp ca chng trình có gi chng trình con không qui
Cách tính phc tp ca mt gii thut bt k là mt vn không n gin. Tuy nhiên ta có
th tuân theo mt s nguyên tc sau:
I.4.1- Qui tc cng:
Nu T1(n) và T2(n) là thi gian thc hin ca hai n chng trình P1 và P2; và
T1(n)=O(f(n)), T2(n)=O(g(n) thì thi gian thc hin ca n hai chng trình ó i tip nhau là
T(n)=O(max(f(n),g(n)))
Ví d 1-6: Lnh gán x:=15 tn mt hng thi gian hay O(1)
Lnh c d liu READ(x) tn mt hng thi gian hay O(1)
Vy thi gian thc hin c hai lnh trên ni tip nhau là O(max(1,1))=O(1)
I.4.2- Qui tc nhân:
Nu T1(n) và T2(n) là thi gian thc hin ca hai n chng trình P1và P2 và T1(n) =
O(f(n)), T2(n) = O(g(n) thì thi gian thc hin ca n hai n chng trình ó ng nhau là T(n) =
O(f(n).g(n))
I.4.3- Qui tc tng quát phân tích mt chng trình:
- Thi gian thc hin ca mi lnh gán, READ, WRITE là O(1)
- Thi gian thc hin ca mt chui tun t các lnh c xác nh bng qui tc cng. Nh
y thi gian này là thi gian thi hành mt lnh nào ó lâu nht trong chui lnh.
- Thi gian thc hin cu trúc IF là thi gian ln nht thc hin lnh sau THEN hoc sau ELSE
và thi gian kim tra u kin. Thng thi gian kim tra u kin là O(1).
- Thi gian thc hin vòng lp là tng (trên tt c các ln lp) thi gian thc hin thân vòng
p. Nu thi gian thc hin than vòng lp không i thì thi gian thc hin vòng lp là tích ca s ln
p vi thi gian thc hin thân vòng lp.
Ví d 1-7: Tính thi gian thc hin ca n chng 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;
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 5
C ba lnh i ch {4} {5} {6} tn O(1) thi gian, do ó lnh {3} tn O(1).
Vòng lp {2} thc hin (n-i) ln, mi ln O(1) do ó vòng lp {2} tn O((n-i).1)=O(n-i).
Vòng lp {1} lp (n-1) ln vy phc tp ca gii thut là:
I.4.4- phc tp ca chng trình có gi chng trình con không qui
Nu chúng ta có mt chng trình vi các chng trình con không quy, tính thi gian
thc hin ca chng trình, trc ht chúng ta tính thi gian thc hin ca các chng trình con không
i các chng trình con khác. Sau ó chúng ta tính thi gian thc hin ca các chng trình con ch
i các chng trình con mà thi gian thc hin ca chúng ã c tính. Chúng ta tip tc quá trình
ánh giá thi gian thc hin ca mi chng trình con sau khi thi gian thc hin ca tt c các
chng trình con mà nó gi ã c ánh giá. Cui cùng ta tính thi gian cho chng trình chính.
Gi s ta cô mt h thng các chng trình gi theo s sau:
Chng trình A gi hai chng trình con là B và C, chng trình B gi hai chng trình con là
B1 và B2, chng trình B1 gi hai chng trình con là B11 và B12.
tính thi gian thc hin ca A, ta tính theo các bc sau:
- Tính thi gian thc hin ca C, B2, B11 và B12.
- Tính thi gian thc hin ca B1.
- Tính thi gian thc hin ca B.
- Tính thi gian thc hin ca A.
Ví d 1-8: Ta có th vit li chng trình sp xp bubble nh sau:
procedure Swap (var x, y: integer);
var temp: integer;
begin
temp := x;
x := y;
y := temp;
end;
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 6
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 vit trên, chng trình Bubble gi chng trình con Swap, do ó tính thi gian
thc hin ca Bubble, trc ht ta cn tính thi gian thc hin ca Swap. D thy thi gian thc hin
a Swap là O(1) vì nó ch bao gm 3 lnh gán.
Trong Bubble, lnh {3} gi Swap nên ch tn O(1), lnh {2} thc hin n-i ln, mi ln tn
O(1) nên tn O(n-i). Lnh {1} thc hin n-1 ln nên
I.5- PHÂN TÍCH CÁC CHNG TRÌNH QUY
I.5.1- Thành lp phng trình quy
I.5.2- Gii phng trình quy
Vi các chng trình có gi các chng trình con quy, ta không th áp dng cách tính nh
a trình bày trong mc I.4.4 bi vì mt chng trình quy s gi chính bn thân nó.
Vi các chng trình quy, trc ht ta cn thành lp các phng trình quy, sau ó gii
phng trình quy, nghim ca phng trình quy s là thi gian thc hin ca chng trình
quy.
I.5.1- Thành lp phng trình quy
Phng trình quy là mt phng trình biu din mi liên h gia T(n) và T(k), trong ó
T(n) là thi gian thc hin chng trình vi kích thc d liu nhp là n, T(k) thi gian thc hin
chng trình vi kích thc d liu nhp là k, vi k < n. thành lp c phng trình quy, ta
phi cn c vào chng trình quy.
Ví d 1-9: Xét hàm tính giai tha vit bng gii thut 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à thi gian thc hin vic tính n giai tha, thì T(n-1) là thi gian thc hin vic tính
n-1 giai tha. Trong trng hp n=0 thì chng trình ch thc hin mt lnh gán Giai_thua:=1, nên tn
O(1), do ó ta có T(0) = C1. Trong trng hp n>0 chng trình phi gi quy Giai_thua(n-1), vic
i quy này tn T(n-1), sau khi có kt qu ca vic gi quy, chng trình phi nhân kt quó
i n và gán cho Giai_thua. Thi gian thc hin phép nhân và phép gán là mt hng C2. Vy ta có
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 7
ây là phng trình quy tính thi gian thc hin ca chng trình quy Giai_thua.
Ví d 1-10: Chúng ta xét th tc MergeSort mt cách phác tho 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 na L1 và L2 , mi mt na có dài n/2;
return(Merge(MergeSort (L1 , n/2), MergeSort(L2, n/2)));
end;
end;
Chng hn sp xp danh sách L gm 8 phn t 7, 4, 8, 9, 3, 1, 6, 2 ta có mô hình minh ha
a MergeSort nh sau:
Hàm MergeSort nhn mt danh sách có dài n và tr v mt danh sách ã c sp xp. Th
c Merge nhn hai danh sách ã c sp L1 và L2 mi danh sách có dài n/2, trn chúng li vi
nhau c mt danh sách gm n phn t có th t. Gii thut chi tit ca Merge ta s bàn sau,
chúng ta ch ý rng thi gian Merge các danh sách có dài n/2 là O(n).
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 8
Gi T(n) là thi gian thc hin MergeSort mt danh sách n phn t thì T(n/2) là thi gian thc
hin MergeSort mt danh sách n/2 phn t , ta có th vit phng trình quy nh sau:
Trong ó c1 là thi gian phi tn khi L có dài 1. Trong trng hp n > 1, thi gian ca
MergeSort c chia làm hai phn. Phn gi quy MergeSort mt danh sách có dài n/2 là T(n/2)
do ó ta có 2T(n/2). Phn th hai bao gm phép th n >1, chia danh sách L thành hai na bng nhau và
Merge. Ba thao tác này ly thi gian không i i vi phép th hoc t l vi n i vi ngt và
Merge. Nh vy hng c
2
c chn và c
2
n là thi gian tng làm các vic ó ngoi tr gi quy.
I.5.2- Gii phng trình quy
Có ba phng pháp gii phng trình quy:
1.- Phng pháp truy hi
2.- Phng pháp oán nghim.
3.- Li gii tng quát ca mt lp các phng trình quy.
Phng pháp truy hi
Dùng quy thay th bt k T(m) vi m < n vào phía phi ca phng trình cho n khi tt
T(m) vi m > 1 c thay th bi biu thc ca các T(1). Vì T(1) luôn là hng nên chúng ta có công
thc ca T(n) cha các s hng ch liên quan n n và các hng s.
Gii phng trình.
Ví d 1-10: Gii phng trình:
Ta có:
Gi s n = 2
k
, quá trình suy rng s kt thúc khi i =k, khi ó ta có:
T(n) = 2
k
T(1) + kC
2
n
Vì 2
k
= n nên k = logn và vi T(1) =C
1
nên ta có
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 9
T(n) = C
1
n + C
2
nlogn
Hay T(n) là O(nlogn).
oán nghim
Ta oán mt nghim f(n) và dùng chng minh quy np chng t rng T(n) f(n) vi mi n.
Thông thng f(n) là mt trong các hàm quen thuc nh logn, n, nlogn, n
2
, n
3
, 2
n
, n!, n
n
.
ôi khi chúng ta choán dng ca f(n) trong ó có mt vài tham s cha xác nh (chng hn
f(n) = an
2
vi a cha xác nh) và trong quá trình chng minh quy np ta s suy din ra giá tr thích
p ca các tham s.
Ví d 1-11: Gii phng trình quy
Gi s chúng ta oán f(n) = anlogn. Vi n = 1 ta thy rng cách oán nh vy không c bi
vì anlog n có giá tr 0 không ph thuc vào giá tr ca a. Vì th ta th tip theo f(n) = anlogn + b.
Vi n = 1 ta có, T(1) = C
1
và f(1) = b, mun T(1) f(1) thì b C
1
(*)
Gi s rng T(k) aklogk + b vi mi k < n (I.2).Ta s chng minh T(n) anlogn + b
Gi s n 2, t (I.1) ta có T(n) = 2T(n/2) + C
2
n
Áp dng (I.2) vi k = n/2 < n ta có:
T(n) = 2T(n/2) + C
2
n 2[an/2log(n/2) + b] + C
2
n
T(n) anlogn - an + 2b + C
2
n
T(n) (anlogn + b) + [b + (C
2
- a)n] . Nu ly a C
2
+ b (**) ta c
T(n) (anlogn + b) + [b +(C
2
- C
2
- b )n ]
T(n) (anlogn + b) + (1-n) b
T(n) an logn + b.
Nu ta ly a và b sao cho c (*) và (**) u tho mãn thì T(n) an logn + b vi mi n.
D dàng ta có b = C
1
và a= C
1
+C
2
ta c T(n) (C
1
+ C
2
)nlogn + C
1
vi mi n.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 10
Hay nói cách khác T(n) là O(nlogn).
i gii tng quát cho mt lp các phng trình quy
gii bài toán kích thc n, ta chia bài toán ã cho thành a bài toán con, mi bài tóan con có
kích thc n/b. Gii các bài toán con này và tng hp kt qu li c kt qu ca bài toán ã cho.
i các bài toán con chúng ta cng làm nh vy. K thut này s dn chúng ta n mt chng trình
quy.
Gi thit rng mi bài toán con kích thc 1 ly mt n v thi gian và thi gian chia bài
toán kích thc n thành các bài toán con kích thc n/b và tng hp kt qu t các bài toán con
c li gii ca bài toán ban u là d(n). (Chng hn i vi thí d MergeSort, chúng ta có a = b = 2,
và d(n) = C
2
n/C
1
. Xem C
1
là mt n v).
Gi T(n) là thi gian gii bài toán kích thc n thì ta có phng trình quy:
Ta s dng phng pháp truy hi gii phng trình này
Gi s n = b
k
ta c: T(n/b
k
) = T(1) = 1. Thay vào trên vi i = k ta có:
Hàm tin trin, nghim thun nht và nghim riêng
Trong phng trình quy (I.1) hàm thi gian d(n) c gi là hàm tin trin (driving
function)
Trong công thc (I.2), a
k
= n
log
b
a
c gi là nghim thun nht (homogeneous solutions).
Nghim thun nht là nghim chính xác khi d(n) = 0 vi mi n. Nói mt cách khác, nghim
thun nht biu din thi gian gii tt c các bài toán con.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 11
Trong công thc (I.2), c gi là nghim riêng (particular solutions).
Nghim riêng biu din thi gian phi tr to ra các bài toán con và tng hp các kt qu
a chúng. Nhìn vào công thc ta thy nghim riêng ph thuc vào hàm tin trin, s lng và kích
thc các bài toán con.
Khi tìm nghim ca phng trình (I,1), chúng ta phi tìm nghim riêng và so sánh vi nghim
thun nht. Nu nghim nào ln hn, ta ly nghim ó làm nghim ca phng trình (I,1).
Vic xác nh nghim riêng không n gin chút nào, tuy vy, chúng ta cng tìm c mt lp
các hàm tin trin có th d dàng xác nh nghim riêng.
Hàm nhân
Mt hàm f(n) c gi là hàm nhân (multiplicative function) nu f(m.n) = f(m).f(n) vi mi
nguyên dng m và n.
Ví d 1-12: Hàm f(n) = n
k
là mt hàm nhân, vì f(m.n) = (m.n)
k
= m
k
.n
k
= f(m) f(n)
u d(n) trong (I.1) là mt hàm nhân thì theo tính cht ca hàm nhân ta có
d(b
k-j
) = (d(b))
k-j
và nghim riêng ca (I.2) là:
Xét ba trng hp sau:
1.- Nu a > d(b) thì nghim riêng là O(a
k
) = O(n
log
b
a
). Nh vy nghim riêng và nghim thun
nht bng nhau do ó T(n) là O(n
log
b
a
).
Ta cng thy thi gian thc hin ch ph thuc vào a, b mà không ph thuc vào hàm tin trin
d(n). Vì vy ci tin gii thut ta cn gim a hoc tng b.
2.- Nu a < d(b) thì nghim riêng là O(d(b)
k
) = O(n
log
b
d(b)
). Trong trng hp này nghim riêng
n hn nghim thun nht nên T(n) = O(n
log
b
d(b)
).
ci tin gii thut chúng ta cn ý n c d(n), a và b cùng mc nh nhau.
Trng hp c bit quan trng khi d(n) = n
. Khi ó d(b) = b
và log
b
(b
) = . Vì th nghim
riêng là O(n
) và do vy T(n) là O(n
).
3.- Nu a = d(b) thì công thc (I.5) không xác inh nên ta tính trc tip nghim riêng:
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 12
Vì a= d(b) nên nghim riêng là n
log
b
a
log
b
n và nghim này ln gp log
b
n ln nghim thun nht.
Do ó T(n) = O(n
log
b
a
log
b
n).
Trong trng hp c bit d(n) = n
ta c T(n) = O(n
logn).
Chú ý khi gii mt phng trình quy c th, ta phi xem phng trình ó có thuc dng
phng trình tng quát hay không. Nu có thì phi xét xem hàm tin trin có phi là hàm nhân không.
u có thì ta xác nh a, d(b) và da vào s so sánh gia a và d(b) mà vn dng mt trong ba trng
p nói trên.
Ví d 1-13: Gii các phng trình quy sau vi T(1) = 1 và
1/- T(n) = 4T(n/2) + n
2/- T(n) = 4T(n/2) + n
2
3/- T(n) = 4T(n/2) + n
3
Trong mi trng hp, a=4, b=2 và nghim thun nht là n
2
. Vi d(n) = n ta có d(b) = 2 vì a =
4 > d(b) nên nghim riêng cng là n
2
và T(n) = O(n
2
) trong phng trình (1).
Trong phng trình (3), d(n) = n
3
, d(b) = 8 và a < d(b). Vì vy nghim riêng là O(n
log
b
d(b)
) =
O(n
3
) và T(n) ca (3) là O(n
3
).
Trong phng trình (2) chúng ta có d(b) = 4 = a nên T(n) = O(n
2
logn).
Các hàm tin trin khác
Ta xét hai trng hp di dng hai ví d, trng hp 1 là tng quát hóa ca hàm bt k là tích
a mt hàm nhân vi mt hng ln hn hoc bng 1. Trng hp th hai là hàm tin trin không phi
là mt hàm nhân.
Ví d 1-14: Gii pgng trình quy sau :
T(1) = 1
T(n) = 3T(n/2) + 2n
1.5
ây, 2n
1.5
không phi là hàm nhân nhng n
1.5
là hàm nhân. t U(n) = T(n)/2 vi mi n thì
U(1) = 1/2
U(n) = 3U(n/2) + n
1.5
Nghim thun nht khi U(1) = 1 là n
log3
= n
1.59
; vì U(1) = 1/2 nên nghim thun nht là n
1.59/2
là
O(n
1.59
). Vì a = 3 và b = 2 và b
1.5
= 2.82 < a, nghim riêng cng là O(n
1.59
) và do ó U(n) = O(n
1.59
) . Vì
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 13
T(n) = 2U(n) nên T(n) = O(n
1.59
) hay T(n) = O(n
log3
).
Ví d 1-15: Gii phng trình quy sau :
T(1) = 1
T(n) = 2T(n/2) + nlogn
Vì a = b = 2 nên nghim thun nht là n. Tuy nhiên, d(n) = nlogn không phi là hàm nhân ta
phi tính nghim riêng bng cách xét trc tip:
Vì k = logn chúng ta có nghim riêng là O(nlog
2
n), nghim này ln hn nghim thun nht và
T(n) = O(nlog
2
n).
Bài 1: Tính thi gian thc hin ca các n chng trình sau:
a) Tính tng ca 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 trn vuông cp 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: Gii các phng trình quy sau vi T(1) = 1 và
a) T(n) = 3T(n/2) + n
b) T(n) = 3T(n/2) + n
2
c) T(n) = 8T(n/2) + n
3
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 14
Bài 3: Gii các phng trình quy sau vi T(1) = 1 và
a) T(n) = 4T(n/3) + n
b) T(n) = 4T(n/3) + n
2
c) T(n) = 9T(n/3) + n
2
Bài 4: Gii các phng trình quy sau vi 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) + n
2
Bài 5: Gii các phng trình quy sau bng phng pháp oán nghim:
a) T(1) = 2 và T(n) = 2T(n-1) + 1 vi ∀ n 2
b) T(1) = 1 và T(n) = 2T(n-1) + n vi ∀ n 2
Bài 6: Cho mt mng n s nguyên c sp th t tng. Vit hàm tìm mt s nguyên trong
ng ó, nu tìm thy thì tr v TRUE, ngc li tr v FALSE.
dng hai phng pháp tìm kim tun t và tìm kim nh phân. Vi mi phng pháp hãy vit mt
hàm tìm và tính thi gian thc hin ca hàm ó.
Bài 7: Tính thi gian thc hin ca gii thut quy gii bài toán Tháp Hà ni vi n tng?
Bài 8: Xét nh ngha s t hp chp k ca n nh sau:
a) Vit mt hàm quy tính s t hp chp k ca n.
Tính thi gian thc hin ca gii thut nói trên.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 15
1. Mc tiêu
2. Kin thc c bn cn có hc chng này
3. Tài liu tham kho có liên quan n chng
4. Ni dung:
II.1 - Bài toán sp xp.
II.2 - Các phng pháp sp xp n gin
II.3 - Quicksort.
II.4 - Heapsort.
II.5 - Binsort.
5. Vn nghiên cu ca trang k tip
Trong chng này chúng ta s nghiên cu các vn sau:
· Bài toán sp xp.
· Mt s gii thut sp xp n gin.
· QuickSort
· HeapSort
· BinSort
II.1- BÀI TOÁN SP XP
II.1.1 Tm quan trng ca bài toán sp xp
II.1.2 Sp xp trong và sp xp ngoài
II.1.3 T chc d liu và ngôn ng cài t
II.1.1 Tm quan trng ca bài toán sp xp
Sp xp mt danh sách các i tng theo mt th t nào là mt bài toán thng c vn
ng trong các ng dng tin hc. Ví d ta cn sp xp danh sách thí sinh theo tên vi th t Alphabet,
hoc sp xp danh sách sinh viên theo m trung bình vi th t t cao n thp. Mt ví d khác là
khi cn tìm kim mt i tng trong mt danh sách các i tng bng gii thut tìm kim nh phân
thì danh sách các i tng này phi c sp xp trc ó.
Tóm li sp xp là mt yêu cu không th thiu trong khi thit k các phn mm.
II.1.2 Sp xp trong và sp xp ngoài
Sp xp trong là s sp xp d liu c t chc trong b nh trong cu máy tính, ó ta có
th s dng kh nng truy nhp ngu nhiên ca b nh và do vy s thc hin rt nhanh.
Sp xp ngoài là s sp xp c s dng khi s lng i tng c sp xp ln không th
u tr trong b nh trong mà phi lu trî trên b nh ngoài. C th là ta s sp xp d liu c lu
tr trong các tp tin.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 16
Chng này tp trung gii quyt vn sp xp trong còn sp xp ngoài sc nghiên cu
trong chng IV.
II.1.3 T chc d liu và ngôn ng cài t
Các i tng cn c sp xp là các mu tin gm mt hoc nhiu trng. Mt trong các
trng c gi là khóa (key), kiu ca nó là mt kiu có quan h th t (nh các kiu s nguyên, s
thc, chui ký t...).
Danh sách các i tng cn sp xp s là mt mng ca các mu tin va nói trên. Mc ích
a vic sp xp là t chc li các mu tin sao cho các khóa ca chúng c sp th t tng ng vi
quy lut sp xp.
trình bày các ví d minh ha chúng ta s dùng PASCAL làm ngôn ng th hin và s dng
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 thy rng th tc Swap ly O(1) thi gian vì ch thc hin 3 lnh gán ni tip nhau.
II.2- CÁC PHNG PHÁP SP XP N GIN
II.2.1- Sp xp chn
II.2.2- Sp xp xen
II.2.3- Sp xp ni bt
Các gii thut n gin thng ly O(n
2
) thi gian sp xp n i tng và các gii thut này
thng ch dùng sp các danh sách có ít i tng.
Vi mi gii thut chúng ta s nghiên cu các phn: gii thut, ví d, chng trình và phân tích
ánh giá.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 17
II.2.1- Sp xp chn (Selection Sort)
Gii thut
ây là phng pháp sp xp n gin nht c tin hành nh sau:
· u tiên chn phn t có khóa nh nht trong n phn t t a[1] n a[n] và hoán v nó
i phn t a[1].
· Chn phn t có khóa nh nht trong n-1phn t t a[2] n a[n] và hoán v nó vi a[2].
· Tng quát bc th i, chn phn t có khoá nh nht trong n-i+1 phn t t a[i] n
a[n] và hoán v nó vi a[i].
· Sau n-1 bc này thì mng ã c sp xp.
Phng pháp này c gi là phng pháp chn bi vì nó lp li quá trình chn phn t nh
nht trong s các phn t cha c sp.
Ví d 2-1: Sp xp mng gm 10 mu tin có khóa là các s nguyên: 5, 6, 2, 2, 10, 12, 9, 10, 9
và 3
Khoá
c
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
c 1
2
6 5 2 10 12 9 10 9 3
c 2
2
5 6 10 12 9 10 9 3
c 3
3
6 10 12 9 10 9 5
c 4
5
10 12 9 10 9 6
c 5
6
12 9 10 9 10
c 6
9
12 10 9 10
c 7
9
10 12 10
c 8
10
12 10
c 9
10
12
t qu 2 2 3 5 6 9 9 10 10 12
Hình 2-1: Sp xp chn
Chng 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
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 18
begin
(6) LowKey := a[j].key;
(7) LowIndex := j;
end;
(8) Swap(a[i] , a[LowIndex]);
end;
end;
ánh giá: Phng pháp sp xp chn ly O(n
2
) sp xp n phn t.
Trc ht ta có th tc Swap ly mt hng thi gian nhã nói mc II.1.3.
Các lnh (2), (3) u ly O(1) thi gian. Vòng lp for (4) - (7) thc hin n-i ln, vì j chy t
i+1 n n, mi ln ly O(1), nên ly O(n-i) thi gian. Do ó thi gian tng cng là:
II.2.2- Sp xp xen (Insertion Sort)
Gii thut
Trc ht ta xem phn t a[1] là mt dãy ã có th t.
· Bc 1, xen phn t a[2] vào danh sách ã có th t a[1] sao cho a[1], a[2] là mt danh
sách có th t.
· Bc 2, xen phn 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.
· Tng quát, bc i, xen phn 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à mt danh sách có th t.
· Phn tang xét a[j] sc xen vào v trí thích hp trong danh sách các phn tã
c sp trc ó a[1],a[2],..a[j-1] bng cách so sánh khoá ca a[j] vi khoá ca a[j-1] ng ngay
trc nó. Nu khoá ca a[j] nh hn khoá ca a[j-1] thì hoán i a[j-1] và a[j] cho nhau và tip tc so
sánh khoá ca a[j-1] (lúc này a[j-1] cha ni dung ca a[j]) vi khoá ca a[j-2] ng ngay trc nó...
Ví d 2-2: Sp xp mng gm 10 mu tin ã cho trong ví d 2-1.
Khoá
c
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
c 1
5 6
c 2
2 5 6
c 3
2 2 5 6
c 4
2 2 5 6 10
c 5
2 2 5 6 10 12
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 19
c 6
2 2 5 6 9 10 12
c 7
2 2 5 6 9 10 10 12
c 8
2 2 5 6 9 9 10 10 12
c 9
2 2 3 5 6 9 9 10 10 12
Hình 2-2: Sp xp xen
Chng 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á: Phng pháp sp xp chn ly O(n
2
) sp xp n phn t.
Ta thy các lnh (4) và (5) u ly O(1). Vòng lp (3) chy nhiu nht i-1 ln, mi ln tn
O(1) nên (3) ly i-1 thi gian. Lnh (2) và (3) là hai lnh ni tip nhau, lnh (2) ly O(1) nên c hai
nh này ly i-1.
Vòng lp (1) có i chy t 2 n n nên nu gi T(n) là thi gian sp n phn t thì ta có
II.2.3- Sp xp ni bt (Bubble Sort)
Gii thut
Chúng ta tng tng rng các mu tin c lu trong mt mng dc, qua quá trình sp, mu
tin nào có khóa “nh” sc ni lên trên. Chúng ta duyt tòan mng, t di lên trên. Nu hai phn
cnh nhau mà không úng th t tc là nu phn t “nh hn” li nm di thì phi cho nó “ni
lên” bng cách i ch hai phn t này cho nhau. C th là:
· Bc 1: Xét các phn t t a[n] n a[2], vi mi phn t a[j], so sánh khoá ca nó vi
khoá ca phn t a[j-1] ng ngay trc nó. Nu khoá ca a[j] nh hn khoá ca a[j-1] thì hoán i
a[j] và a[j-1] cho nhau.
· Bc 2: Xét các phn t t a[n] n a[3], và làm tng t nh trên.
· Tng quát bc th i, ta s xét các phn t t a[n] n a[i+1].
Sau n bc ta thu c mng có th t
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 20
Ví d 2-3: Sp xp mng gm 10 mu tin ã cho trong ví d 2-1.
Khoá
c
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
c 1
2
5 6 2 3 10 12 9 10 9
c 2
2
5 6 3 9 10 12 9 10
c 3
3
5 6 9 9 10 12 10
c 4
5
6 9 9 10 10 12
c 5
6
9 9 10 10 12
c 6
9
9 10 10 12
c 7
9
10 10 12
c 8
10
10 12
c 9
10
12
t qu 2 2 3 5 6 9 9 10 10 12
Hình 2-3: Sp xp ni bt
Chng 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á: Phng pháp sp xp ni bt ly O(n
2
) sp n phn t.
Dòng lnh (3) ly mt hng thi gian. Vòng lp (2) thc hin (n-i) bc, mi bc ly O(1)
nên ly O(n-i) thi gian. Nh vy i vi toàn b chng trình ta có:
II.3- QUICKSORT
II.3.1- Ý tng
II.3.2- Thit k gii thut
II.3.3- Cài t gii thut
II.3.4- Thi gian thc hin ca QuickSort
Trong phn này chúng ta s nghiên cu mt gii thut sp xp c dùng mt cách ph bin là
Quick Sort do A.R. Hoare phát minh vào nm 1960. Quick Sort c ánh giá tt nh vào s phân tích
toán hc và các khng nh v kh nng ca nó. Quick Sort ã c ci tin tr thành phng pháp
c chn trong các ng dng sp xp thc t khác nhau.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 21
II.3.1- Ý tng
Chúng ta vn xét mng a các mu tin a[1]..a[n]. Gi s v là 1 giá tr khóa mà ta gi là cht
(pivot). Ta phân hoch dãy a[1]..a[n] thành hai mng con "bên trái" và "bên phi". Mng con "bên trái"
bao gm các phn t có khóa nh hn cht, mng con "bên phi" bao gm các phn t có khóa ln hn
hoc bng cht.
Sp xp mng con “bên trái” và mng con “bên phi” thì mng ã cho sc sp bi vì tt c
các khóa trong mng con “bên trái “ u nh hn các khóa trong mng con “bên phi”.
Vic sp xp các mng con “bên trái” và “bên phi” cng c tin hành bng phng pháp
nói trên.
Mt mng ch gm mt phn t hoc gm nhiu phn t có khóa bng nhau thì xem nhã có
th t.
II.3.2- Thit k gii thut
n chn cht
Chn khóa ln nht trong hai phn t có khóa khác nhau u tiên k t trái qua. Nu mng ch
m mt phn t hay gm nhiu phn t có khóa bng nhau thì không có cht.
n phn hoch
phân hoch mng ta dùng 2 "con nháy" L và R trong ó L t bên trái và R t bên phi, ta
cho L chy sang phi cho ti khi gp phn t có khóa cht và cho R chy sang trái cho ti khi gp
phn t có khóa < cht. Ti ch dng ca L và R nu L<R thì hoán v a[L],a[R]. Lp li quá trình dch
sang phi, sang trái ca 2 "con nháy" L và R cho n khi L>R. Khi ó L s là m phân hoch, c th
là a[L] là phn tu tiên ca mng con “bên phi”.
Gii thut QuickSort
sp xp mng a[i]..a[j] ta tin hành các bc sau:
· Xác nh cht,
· Phân hoch mng ã cho thành hai mng con a[i]..a[k-1] và a[k]..a[j].
· Sp xp mng a[i]..a[k-1] ( quy).
· Sp xp mng a[k]..a[j] ( quy).
Quá trình quy s dng khi không còn tìm thy cht.
Ví d 2-4: Ta cn sp mt mng mà khóa là các s nguyên ã c trình bày trong ví d 2-1.
Hai phn tu tiên có khóa khác nhau là 5 và 6, ta chn 6 làm cht và tin hành phân hoch mng
ban u làm hai mng con và quy cho hai mng con này.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 22
II.3.3- Cài t gii thut
Hàm FindPivot
Ta thit k hàm FindPivot xác nh trong dãy a[i]..a[j] xem có hay không hai phn t có
khóa khác nhau. Nu không tìm thy hai phn t có khóa khác nhau thì tr v giá tr 0 (không tìm thy
cht), ngc li hàm tr v giá tr là ch s ca phn t có khóa ln hn trong hai phn t có khóa khác
nhau u tiên. Khóa ln hn này s tr thành phn t cht mà ta s xác nh trong th tc QuickSort.
tin so sánh ta s dng bin FirstKey lu gi khóa ca phn tu tiên trong mng
a[i]..a[j] (FirstKey chính là a[i].key).
Ta s dùng mt ch s k dò tìm trong mng a[i]..a[j], k t v trí i+1 n ht mng, mt phn
a[k] mà a[k].key <> FirstKey. Nu không tìm thy mt a[k] nh th thì hoc là mng ch gm mt
phn t hoc gm nhiu phn t có khóa bng nhau. Trong trng hp ó thì không tìm thy cht và
hàm FindPivot s tr v 0. Ngc li ta s phi xét xem a[k].key có ln hn FirstKey hay không, nu
úng nh th thì cht s là khóa ca a[k] và hàm FindPivot s tr v k, nu 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 nhn vào ba tham s i, j và Pivot thc hin vic phân hoch theo mng
a[i]..a[j] theo cht Pivot và tr v giá tr l là ch su tiên ca mng “bên phi”.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 23
Hai con nháy L, R sc s dng thc hin vic phân hoch nhã trình bày trong phn
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 phi}
while l <= r do begin
{L tin sang phi}
while a[l].key < pivot do l := l+1;
{R tin 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 tc cui cùng có tên là QuickSort và chú ý rng sp xp
ng A các record gm n phn t ca kiu Recordtype ta ch cn gi QuickSort(1,n).
Ta s s dng bin PivotIndex lu gi kt qu tr v ca hàm FindPivot, nu bin
PivotIndex nhn c mt giá tr khác 0 thì mi tin hành phân hoch mng. Bin Pivot sc s
ng lu gi giá tr cht và bin k lu gi giá tr ca m phân hoch do hàm Partition tr v.
Sau khia ã phân hoch xong ta s gi quy QuickSort cho mng con “bên trái” a[i]..a[k-1] và mng
con “bên phi” 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- Thi gian thc hin ca QuickSort
QuickSort ly O(nlogn) thi gian sp xp n phn t trong trng hp tt nht và O(n
2
).
trong trng hp xu nht.
Hàm Partition ly thi gian t l vi s phn t ca mng. Nh vy nu mng có n phn t thì
Partition ly P(n)= n n v thi gian.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 24
Gi T(n) là thi gian thc hin ca QuickSort thì T(n) phi là tng ca P(n) và thi gian
QuickSort quy cho hai mng con.
Gi s các giá tr khóa ca mng khác nhau. Trong trng hp xu nht là ta luôn chn phi
phn t có khóa ln nht làm cht, lúc by gi vic phân hoch b lch tc là mng bên phi ch gm
t phn t cht, còn mng bên trái gm n-1 phn t còn li. Khi ó ta có th thành lp phng trình
quy nh sau:
Gii phng trình này bng phng pháp truy hi
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 kt thúc khi i=n-1, khi ó ta có
Trong trng hp tt nht khi ta chn c cht sao cho hai mng con có kích thc bng
nhau và bng n/2. Lúc ó ta có phng trình quy nh sau:
Gii phng trình quy này (xem I.4.2) ta c T(n) = O(nlogn).
Ngi ta cng chng minh c rng trong trng hp trung bình QuickSort ly T(n) =
O(nlogn).
II.4- HEAPSORT
II.4.1- Heap
II.4.2- Ý tng
II.4.3- Thit k và cài t gii thut
II.4.4- Phân tích HeapSort
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 25
II.4.1- Heap
Cây sp th t b phn hay còn gi là heap là cây nh phân mà giá tr ti mi nút (khác nút lá)
u không ln hn giá tr ca các con ca nó.
Ta có nhn xét rng nút gc a[1] ca cây sp th t b phn có giá tr nh nht.
Ví d 2-5: Cây sau là mt heap.
II.4.2- Ý tng
(1) Xem mng ban u là mt cây nh phân. Mi nút trên cây lu tr mt phn t mng,
trong ó a[1] là nút gc và mi nút không là nút lá a[i] có con trái là a[2i] và con phi là a[2i+1]. Vi
cách t chc 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]. Tt c các
nút trong u có 2 con, ngoi tr nút a[n DIV 2] có th ch có mt con trái (trong trng hp n là mt
chn).
(2) Sp xp cây ban u thành mt heap cn c vào giá tr khoá ca các nút.
(3) Hoán i a[1] cho cho phn t cui cùng.
(4) p li cây sau khi ã bi phn t cui cùng nó tr thành mt heap mi.
Lp li quá trình (3) và (4) cho ti khi cây rng ta sc mng sp theo th t gim.
II.4.3- Thit k và cài t gii thut
Th tc PushDown
Gi s a[first],..,a[last] ã úng v trí (giá tr khoá ti mi nút nh hn hoc bng giá tr khoá
i các nút con ca nó) ngoi tr a[first]. PushDown dùng y phn t a[first] xung úng v trí ca
nó trong cây (và có th gây ra vic y xung các phn t khác).
Xét a[first], có hai kh nng có th xy ra:
· Nu a[first] có khoá ln hn con trái ca nó (a[first].key > a[2*first].key) và khoá ca
con trái không ln hn khoá ca con phi (a[2*first].key a[2*first+1].key) thì hoán i a[first] cho
con trái a[2*first] ca nó, vic này có th gây ra tình trng con trái s không úng v trí nên phi xem
xét li con trái.