Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
7
CHNG 2
CÁC KHÁI NIM C BN V PHÂN TÍCH GII THUT
2.1. BƠi toán vƠ th hin (Problems and Instances)
Trong phn trên, chúng ta đã nghiên cu mt s ví d v nhân 2
s nguyên dng, chng hn nhân 981 và 1234. Tuy vy, các nguyên tc
chính ca gii thut đó không ch cung cp nhng cách thc nhân 2 s
đc bit, thc t chúng ta có mt gii pháp tng quát cho bài toán nhân 2
s nguyên dng. Chúng ta nói rng (981, 1234) là mt th hin
(instance) ca bài toán nh vy. Tuy nhiên, (-12, 83.7) không phi là th
hin ca bài toán này vì -12 không là s nguyên dng và 83.7 không
phi là s nguyên. (D nhiên, chúng là th hin ca mt bài toán khác,
tng quát hn bài toán này). Bài toán hay nht là bài toán có tp th hin
không có gii hn. Nhng cng có nhng ngoi l. Chng hn, bài toán
chi c, có ch mt th hin, đc cho bi mt tp hp v trí chung nht
đ xut phát, ngoài ra ch có mt s hu hn các th hin con (các bc
đi, các v trí trung gian hp l). Nhng không th nói rng bài toán này
không có gii thut hay.
Mt gii thut cn phi làm vic đúng vi tt c các th hin ca
mình, cn phi chng minh điu đó. ch ra mt gii thut không đúng,
chúng ta cn tìm mt th hin mà t đó gii thut cho mt câu tr li sai,
hoc không tìm đc câu tr li. Tuy nhiên, đ chng minh mt gii
thut không đúng là rt khó khn. ch ra rng gii thut có th áp dng
cho tt c các th hin, chúng ta đã xác đnh mt min xác đnh, đó là
mt tp th hin mà chúng ta xem xét. Gii thut nhân 2 s trong Chng
1 không làm vic vi s âm và hu t, tuy nhiên không th nói gii thut
là không có giá tr. Các th hin ca phép nhân s âm hoc hu t không
nm trong min xác đnh chúng ta đã la chn ban đu.
Các thit b tính toán còn có gii hn kích thc ca các th hin.
Tuy nhiên, gii hn này không làm hn ch gii thut. Máy tính khác
nhau có gii hn khác nhau và thm chí nhng chng trình khác nhau
trên cùng mt gii thut trên thit b nh nhau cng cho kt qu khác
nhau.
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
8
2.2. Hiu qu ca các gii thut
Khi chúng ta có mt bài toán có mt vài gii thut có kh nng
thích hp, chúng ta cn phi la chn mt gii thut tt nht. iu này
đt ra mt câu hi là làm th nào đ chn trong mt vài gii thut đó gii
thut thích đáng hn c.
Nu chúng ta ch có mt hoc hai th hin nh ca bài toán quá
đn gin thì không cn phi chn la k càng quá trong trng hp này
đn gin là chúng ta chn gii thut đ d lp trình, hoc chn chng
trình đã có mà không cn lo lng v các thuc tính lý thuyt ca nó. Tuy
nhiên, nu chúng ta không có đy đ các th hin ca bài toán hoc là
mt bài toán khó thì chúng ta phi la chn k càng hn.
Nhng ngi theo ch ngha kinh nghim thng chn mt gii
thut phù hp vi k thut lp trình và th nghim chúng trên các th
hin khác nhau vi s tr giúp ca máy tính. Nhng ngi theo lý thuyt
chn gii thut phù hp vi xác đnh khi lng có tính toán hc ca các
ngi hc cn thit cho mi bài toán nh là mt hàm trên kích thc ca
th hin cn thit. Ngun hc mà ta quan tâm nht là thi gian tính toán
và không gian lu tr. Trong khuôn kh giáo trình này, chúng ta thng
xuyên so sánh các gii thut trên c s thi gian thc hin nó, khi đó đn
gin là ta s nói nó chy nhanh nh th nào.
Kích thc ca mt th hin thng không là s bit cn thit đ
biu din nó trong máy tính. Tuy nhiên, đây t " kích thc" đ ch s
lng các thành phn ca mt th hin. Ví d, nói v sp xp thì kích
thc ca th hin là s lng phn t đc sp xp. Tng t nh vy,
khi nói v đ th thì kích thc là s lng các nút hoc các cung (có th
là c hai). Trong các bài toán liên quan đn s nguyên, đôi khi chúng ta
coi hiu nng ca gii thut nh là giá tr ca th hin cn thit hin ti,
(s lng bit cn thit đ biu din giá tr này dng nh phân).
Thun li ca phng pháp lý thuyt là nó không đc vào máy
tính hin ti đang s dng, không chn vào ngôn ng lp trình, thm trí
không chn vào k nng ca ngi lp trình. Da vào đó ta tit kim
đc c thi gian s mt đi do lp trình vô ích mt gii thut không hiu
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
9
qu và c thi gian mt đi do máy tính s kim tra nó. Cao hn na (quan
trng hn) là s nghiên cu hiu qu ca gii thut trên các th hin ca
kích thc. ây là cái không có trong phng pháp kinh nghim (thc
nghim), ni mà s thc hành luôn là kim tra các gii thut ch da trên
mt s nh các la chn th hin tu ý có kích thc va phi. Cng t
đó thng khám phá đc gii thut mi tt hn khi c hai đc s dng
trên các th hin ln, đúng là mt quan đim đc bit quan trng.
Cng có nhng kh nng phân tích gii thut bng phng pháp
lai, hiu qu ca gii thut, mô t dng khuôn mu cho các chc nng
đc xác đnh theo lý thuyt và các tham s s hc cho chng trình và
máy riêng bit đc xác đnh bi kinh nghim, thng nh là phng
pháp hi quy. S dng phng pháp này có th d đoán đc thi gian
thc hin đy đ thc t trên mt th hin quá ln mà ta dùng đ kim
tra. Cn tránh s suy din (ngoi suy) duy nht trên c s mt s lng
nh ca các th hin theo kinh nghim b qua các nguyên lý cn thit.
D đoán mà không có c s lý thuyt là mt kiu làm vic m h, vin
vông.
Nu chúng ta mun đo tng không gian lu tr ca mt gii thut
đc s dng nh là hàm ca kích thc, thì ta s dng bít. Bt k loi
máy tính nào đc s dng, khía nim bit lu tr là không đi, đã xác
đnh. Mt khác, trong phn ln các trng hp, chúng ta mun đo hiu
qa ca gii thut theo thi gian thì không th biu din theo giây
(second) đc vì chúng ta chn mt yu t bt bin, sao cho hai ln thc
hin mt th hin ca cùng gii thut s ch chênh lnh hiu qu bi mt
hng s nhân. Ví d, nu hng s này là 5, ln thc hin đu tiên có thi
gian là 1 giây đ gii quyt mt th hin có kích thc riêng bit thì ln
thc hin th hai (trên máy khác, trên ngôn ng lp trình khác) có thi
gian không lâu hn 5 giây đ gii quyt cùng mt th hin. Chính xác
hn, nu 2 ln thc hin cùng mt gii thut cn thi gian t1(n) và t2(n)
giây đ gii quyt th hin có kích thc n thì luôn tn ti hng s dng
c và d sao cho t1(n) c.t2(n) và t2(n) d.t1(n) khi n đ ln.
Yu t bt bin có th đc chn làm đn v đo hiu qu ca mt
gii thut bng mt hng s phc hp. Chúng ta nói rng, mt gii thut
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
10
cho mt bài toán nào đó có thi gian thc hin bc t(n), t là mt hàm, nu
nh tn ti mt hng s dng c và s thc hin gii thut có kh nng
gii tt c các th hin kích thc n là có thi gian không ln hn c.t(n)
giây.
S dng giây trong đnh ngha này là không b bó buc, chúng ta
ch cn chuyn hng s thích hp nào đó thì ta gi là mt gii thut có
thi gian bc n, hoc đn gin hn là mt gii thut có thi gian tuyn
tính (linear algorithm). Mt gii thut có thi gian thc hin th hin kích
thc n không nhiu hn c.n
2
giây gi là bc n
2
hoc thi gian bc hai,
gii thut bc 2 (quadratus algorithm). Tng t, mt gii thut bc 3, đa
thc, lu tha (cubie, polynomial, exponential có thi gian bc n
3
, n
k
, c
n
,
tng ng).
Lu ý là bc rt quan trng trong đánh giá hiu qu, bc n
2
, n
3
là
rt khác nhau nu kích thc ln.
2.3. Phơn tích trung bình vƠ phơn tích ti nht
Thi gian thc hin hoc không gian lu tr có th bin đng
đáng k gia hai th hin khác nhau có cùng kích thc. làm nhng
điu này, hãy xem xét hai gii thut sp xp c bn, gii thut chèn trc
tip (insertion) và gii thut chn trc tip (selection).
Procedure insert (T [1 n])
for i 2 to n do
x T[i] ; j i-1
while (j>o) and (x< T [j]) do T [j+1]T[j]
j j-1
T[j+1] x
Procedure select (T[1 n])
for i 1 to n-1 do
min j i ; minx T[i]
for j i +1 to n do
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
11
if T [j] <minx then minj j
minx T[j]
T[minj] T[i]
T[i] minx
Hãy bt chc thao tác ca gii thut trên mt vài mng nh đ
chc chn rng chúng ta đã bit gii thut làm vic nh th nào. Vòng lp
chính ca Insertion đã xem xét mi phn t ca mng t phân t th hai
đn phn t th n và chèn nó vào v trí thích hp gia các phn t đng
trc nó trong mng. Gii thut Selection chn phn t nh nht ca
bng, đt nó vào làm phn t đu tiên, ri li chn phn t nh nht, tip
theo, đt nó làm phn t th hai ca mng, và c nh vy cho đn ht.
Ly U và V là 2 mng có N phn t, mng U đã đc sp xp
tng dn và mng V đã đc sp xp gim dn.
C hai gii thut có thi gian thc hin V nhiu hn thi gian
thc hin U. Thc t là mng V biu din trng hp vi kh nng xu
nht cho c hai gii thut, không có mng nào vi n phn t li cn nhiu
thi gian x lý nh vy. Gii tht chn trc tip không nhn bit đc
th t gc ca mt mng dã đc sp: Thao tác kim tra “ if T[j] < min x
“ đc thc hin vi s ln nh nhau cho tt c các trng hp. S thay
đi trong thi gian thc hin ch do thi gian thc hin các phép gán
trong phn “then” ca thao tác kim tra này có phi thc hin hay không.
Khi chúng ta lp trình gii thut này và kim tra nó trên máy thì s thy
rng thi gian cn thit đ sp xp s phn t là không nhiu hn 15%
cho dù th t khi đng là đã đc sp xp. Ri chúng ta s bit, gii
thut Selection (T) có thi gian thc hin bc 2, không đm xa gì đn
th t khi đu ca các phn t.
Nu chúng ta so sánh thi gian thc hin bi gii thut Insert(T)
trên cùng hai mng này thì s có nhng nhn xét khác hn. Bi vì điu
kin điu khin ca vòng lp (while) là luôn sai t lúc bt đu, Insert(U)
thc hin rt nhanh ta nói rng nó có thi gian tuyn tính. Vi V, gii
thut Insert(T) có thi gian bâc hai bi vòng lp (while) đã thc hin (i-
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
12
1) ln vi mi giá tr ca i. S bin đng v thi gian thc hin gia hai
th hin là rt đáng k. Hn na, s bin đng còn tng lên theo s lng
phn t đã đc sp xp. Khi chúng ta thc hin gii thut Insert(T) đ
sp xp mt mng 5000 phn t đã sp tng dn thì mt thi gian khôn ít
hn 1/5 giây, trong khi đó mt 210 giây đ sp xp mng đó đã xp gim
dn (tc là 1000 ln lâu hn).
Nu có s bin đi ln xy ra thì làm th nào đ phát hin v thi
gian thc hin gii thut theo kích thc ca các th hin đc gii?
Chúng ta luôn coi trng hp tt nht ca mt gii thut cho mi kích
thc khi mà gii thut đòi hi nhiu thi gian nht. iu này đã gii
thích vì sao trong phn trên ta nói gii thut phi có kh nng gii tt c
các th hin có kích thc n trong thi gian không quá Ct(n) giây vi C
là hng s thích hp. Nu nó chy vi thi gian bc t(n) ta đã có n trong
đó mt trng hp ti nht.
Phân tích trng hp ti nht là thích hp cho các gii thut đáp
ng mt thi gian có hn. Ví d, gii thut điu khin nng lng ht
nhân, điu ct yu là bit đc gii hn trên vì thi gian ca h thng,
bt k các th hin đc bit đc gii quyt. Mt khác, nu mt gii thut
đc s dng nhiu ln trên nhiu th hin khác nhau thì điu quan trng
là ta đánh giá đc thi gian thc hin trung bình trên các th hin có
kích thc n. Chúng ta đã bit rng thi gian thc hin gii thut
insert(T) bin đng gia bc n và bc n
2
nu chúng ta có th tính toán
thi gian trung bình ca gii thut khi gii n! các sp xp khác nhau ca
mng khi bt đu (vi các phn t ca mng là riêng bit) thì chúng ta có
th nói v thi gian sp xp ca mt mng vi v trí phn t là ngu
nhiên. Trong phn sau ta thy rng trc tiên n! ca các hoán v phn t
ca mng s cho thi gian trung bình vn là bc n
2
. Sp xp chèn có thi
gian bc 2 trng hp trung bình và ti nht, mc dù vài trng hp có
th nhanh hn. Ta bit rng, mt vài gii thut sp xp khác có thi gian
bc hai trong trng hp ti nht nhng có thi gian bc nlog(n) trong
trng hp trung bình. Thm chí gii thut này là kém nht trong trng
hp ti nht nhng li có kh nng là gii thut nhanh nht trong trng
hp trung bình vi phng pháp sp xp mng ti ch.
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
13
Phân tích trung bình ca gii thut luôn nh hn phân tích ti
nht. Hn na, phân tích trung bình có th sai nu nh trong thc t các
th hin nghim không đc chn ngu nhiên. Ví d, Insert(T) có thi
gian trung bình bc 2 khi tt c n! kh nng sp xp ca mng đã đc
th nghim. Tuy nhiên, trong nhiu ng dng điu kin này có th không
thc t. Mt chng trình sp xp đc s dng đ cp nht mt tp tin
(file) thng ch yu sp xp mt mng mà các phn t ca nó đã tht s
nm gn đúng v trí, ch còn vài phn t ca nm ngoài v trí. Trng hp
này phng pháp trung bình trên các th hin đc chn ngu nhiên là
mt ví d ti cho hiu qu thc t.
phân tích đy đ trng hp trung bình đòi hi mt vài tri
thc kinh đin v s phân tán các th hin đc gii. iu này thông
thng là mt đòi hi không thc t. c bit, khi mà mt gii thut li
đc s dng bên trong mt gii thut phc tp hn, s không c tính
đc các th hin s phi xy ra mt cách tht thng.
2.4. Th nƠo lƠ mt thao tác c bn (elementary operation)
Mt thao tác c bn là mt thao tác mà thi gian thc hin nó có
th gii hn trên bi mt hng s ch ph thuc vào mt s thc hin
riêng bit đã đc s dng trên máy tính, trên ngôn ng lp trình, . . .
Nh vy, hng s này không ph thuc kích thc hoc các thông s
khác ca th hin đang đc xem xét. Bi vì chúng ta quan tâm đn thi
gian thc hin giait thut xác đnh trong phm vi mt hng s nhân, nó
ch là, mt s lng các thao tác c bn đc thc hin trong gii thut
mà không quan tâm đn thi gian chính xác ca mi thao tác đó. Chng
hn, khi phân tích mt gii thut đ gii quyt mt th hin vi mt kích
thc nào đó ta thy nó cn a phép cng, m phép nhân và s phép gán giá
tr. Gi s, chúng ta bit dãy phép cng không bao gi thc hin quá t
a
micro giây, phép nhân thc hin không quá t
m
micro giây, phép gán thc
hin không quá t
s
micro giây ( các hng s này đu ph thuc máy đc
s dng đ thc hin gii thut). Phép cng, nhân và gán coi nh là các
thao tác c bn. Tng thi gian t cn có đ gii thut chy xong có th
đc đánh giá nh sau:
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
14
t ≤ a.t
a
+ m.t
m
+ s.t
s
≤ max(t
a
, t
m
, t
s
).( a + m + s)
Nh vy, t đc gii hn bi mt hng s phc hp đc cu to
t s lng ca các thao tác c bn đã đc thc hin.
Thi gian chính xác cho mi thao tác c bn không quan trng,
đn gin ta nói rng mi thao tác đc thc hin trên mt đn v chi phí
thi gian.
Trong mô t gii thut trên đây, mt dòng đn ca chng trình
phù hp vi s lng bin đng ca thao tác c bn, thi gian cn thit
đ tính (T là mng N phân t) x min { T[i], 1≤ I ≤n}
Tng lên theo n, đó chính là mô t rút gn ca xT[1]
For I 2 to n do
Y T[i] < x then x T[i]
Tng t, mt vài thao tác toán hc quá phc tp đc coi nh
là thao tác c bn. Nu chúng ta coi phép tính giá tr ca mt giai tha
và kim tra cha ht là đn v chi phí, bt chp kích thc ca các toán
hc nguyên lý Wilson (s nguyên n cha ht (n-1)! + 1 nu và ch nu n
là s nguyên t vi mi n>1) s kim tra mt s nguyên vi hiu qu
đáng kinh ngc:
Function Wilson (n)
{return true if and only if n là nguyên t}
if n chia ht (n-1)! + 1 then return true else return false
Trong ví d đu ca phn này, chúng ta đã coi phép cng và
phép nhân là các thao tác đn v chi phí, thi gian cn thit cho các thao
tác này gii hn bi mt hng s. Theo lý thuyt, các thao tác này không
phi là c bn vì thi gian cn thit đ thc hin nó tng lên theo đ dài
ca các toán hng.
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
15
Thc t, chúng có th đc coi là thao tác c bn min là các toán
hng có liên quan có kích thc hp lý trong các th hin mà hy vng s
gp. Hai ví d di đây s minh ha cho điu chúng ta nói.
Function Sum(n)
{Tính tng các s nguyên t 1 đn n}
sum 0
For I 1 to n do sum sum +i
Return Sum
Function Fibonacci (n)
{Tính s hng th n ca dây Fibonacci}
I 1; j 0
For k 1 to n do j i+j
I j -1
Return j
Trong gii thut Sum, giá tr sum phù hp vi tt c các th hin
mà trong thc t gii thut khi thc hin có th bt gp. Nu chúng ta s
dng máy vi 32 bit biu din s, tt c các phép cng có th thc hin
trc tip vi n không ln hn 65535. Theo lý thuyt, gii thut phi làm
vic vi tt c các giá tr có kh nng ca n. Trong thc t, không mt
máy tính nào có th thc hin phép cng nh là mt đn v chi phí nu n
đc chn đ ln. S phân tích gii thut phi tu theo mc đích ca ng
dng.
Trong trng hp Fibonacci ta có mt trng thái khác, ta tính
đc s cui cùng là n +47, lúc này phép cng j i +j s b tràn ô s hn
trên máy 32 bit. có kt qu vi n + 65535 ta cn 45496 bit hoc nhiu
hn 1420 t máy
Vn đ cng tng t nh vy, khi ta phân tích các gii thut bao
hàm s thc. Chng hn, tính dãy Fibonacci bng công thc Moivre
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
16
N
N
N
F
5
1
VI
2
51
( t l này)
Tóm li, đ quyt đnh mt câu lnh b ngoài nhiu đn gin nh
jj+i có là mt thao tác c bn hoc không ta đ cho cách s dng phán
x. Sau đây chúng ta coi phép cng, tr, nhân, chia, ly modulo, toán
t logic, so sánh và phép gán là các thao tác c bn có th thc hin
mt đn v chi phí tr khi có mt gii thích khác.
2.5. Vì sao li phi xem xét hiu qu ca gii thut.
Các thit b tính toán ngày càng chy nhanh hn, mt câu hi là ta
có b cùng trên phí thi gian đ xây dng mt gii thut có hiu qu hay
d dàng hn là ch th h máy tính mi?
Các t tng ch yu đã đc trình bày trong phn này ch rõ
điu đó là không đúng. Gi s, có mt bài toán riêng bit có thi gian
hàm m và mt máy tính có kh nng gii mt th hin có kích thc n
trong 10
-4
x 2
10
giây, tc là khong 1/10 giây, gii kích thc 20 là 10
-4
x 2
20
gn 1000 ln dài hn, khong hai phút. Gii vi kích thc 30 thì
li là 1000 ln dài hn na, gn 1 ngày na. Gi s, máy tính không b
ngt, không có li thì chy c mt nm cng ch gii đc th hin có
kích thc 38.
Gi thit là chúng ta có kh nng tài chính đ mua mt vài cái
máy tính chy nhanh hn gp 100 ln máy nói trên. Vi cùng gii thut
đó, gii quyt th hin vi kích thc n ch có 10
-6
x 2
n
giây. Vy thì
chy c nm chúng ta cùng ch gii đc mt th hin có 45. Nói chung,
máy tính có kh nng gii th hin kích thc n trong mt khong thi
gian nào đó thì máy tính mi nói s gii đc mt th hin có kích thc
ít nht là n+lg100, khong n+7, trong cùng mt thi gian.
Gi thit chúng ta đu t cùng chi phí đó vào thit k gii thut
đt kt qu là tìm thy mt gii thut bc ba cho bài toán ca chúng ta.
Chng hn, cùng vi máy tính ban đu và gii thut mi vi chi phí thi
gian cho th hin kích thc n là 10
-2
x n
3
giây. Vy thì gii thut th
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
17
hin kích thc 10 mt 10 giây, th hin kích thc 20 mt thi gian gia
1 và 2 phút, nhng th hin kích thc 30 mt 4, 5 phút và mt ngày đ
gii đc th hin kích thc 200, vi mt nm gii đc th hin kích
thc 1500. Ta có đ th sau minh ho cho s so sánh đó:
Gii thut mi mang li mt hiu qu ln hn hiu qu ca vic
mua máy tính mi, gi s chúng ta thc hin c 2 phng án thì hiu qu
đt đc còn ln hn nhiu na.Gii thut mi và máy tính nhanh hn
100 ln máy c s gii đc th hin có kích thc ln hn 4 hoc 5 ln
trong cùng mt khong thi gian (so vi gii thut c và máy c), h s
chính xác là
3
100
. Vi gii thut c, máy mi ta cng 7 vào kích thc
còn gii thut mi, máy mi ta nhan kích thc lên 4 hoc 5 ln (cùng
thi gian). Tuy nhiên, gii thut mi không s dng thích hp vi tt c
các th hn ca bài toán, đc bit là th hin vi kích thc nh. Ta có
th nhn thy rng máy tính c, gii thut mi gii thut mi gii th hin
Thi gian tính bng giây
10
10
3
10
2
10
5
10
4
1
5
10
20
15
25
30
35
Kích thc ca th hin
10
-4
x2
n
10
-6
x2
n
10
-2
xn
3
10
-4
xn
3
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
18
kích thc 10 mt 10 giây, chm hn 100 ln so vi gii thut c. Gii
thut mi ch tt đi vi th hin có kích thc ln hn 20.
2.6. Mt vƠi ví d
2.6.1 Tính đnh thc
nh thc có vai trò rt quan trng trong đi s tuyn tính và
chúng ta cn tính đc hiu qu ca nó. Có hai gii thut tính đnh thc
ni ting. Mt có c s trên đnh ngha hàm quy hi ca đnh thc, gii
thut kia là kh Gaus- Jordan. Gii thut hi quy cho thi gian t l là n!
đ tính đnh thc ca ma trn n x n, điu này còn xu hn c hàm m.
Ngc li, kh Gauss-Jordan cho thi gian t l n
3
vi cùng tác v.
Chúng ta đã lp trình c hai gii thut trên cùng mt máy tính.
Gii thut Gauss-Jordan tìm ra đnh thc ca ma trn 10 x10 trong 1/100
giây, khong 5 giây mi vi ma trn 100 x 100. Gii thut hi quy mt
20 giây cho mt ma trn 5 x 5 và 10 phút cho ma trn 10 x10. Chúng ta
gi thit rng gii thut hi quy cn 10 triu nm đ tính đnh thc ca
ma trn 20 x20, công vic đc thc hin hn hn bi gii thut Gauss-
Jordan trong 1/20 giây.
Qua ví d này, không có ngha là gii thut đ quy là không tt,
ngc li nó có vai trò c bn đ thit k thut toán có hiu qu cao. c
bit, có gii thut đ quy tính đnh thc ca ma trn n x n trong thi gian
t l vi n
lg7
= n
2,81
ngi ta đã chng t rng kh Gauss – Jordan không
phi là ti u.
2.6.2 Sp xp
Bài toán sp xp là mt bài toán rt quan trng ca khoa hc máy
tính, đc bit là trong thit k và phân tích gii thut. Bài toán đòi hi
chúng ta sp xp li n đi tng trong mt tp hp đi tng vi th t
đã quy đnh. Các đi tng khi so sánh có th t trong min giá tr ca
nó, ví d min s nguyên, s, ngày tháng, lu ý là tp hp đi tng phi
đng nht và ta coi là sp xp tng dn.
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
19
Bài toán sp xp cha đng nhiu gii thut lý thú và đôi khi
phc tp. phn trên ta đã làm quên vi hai gii thut. Chèn và chn
trc tip, c hai gii thut này đu có thi gian bc 2 trong c trng hp
trung bình và ti nht.
Mc dù, 2 gii thut này là tuyt vi vi n nh nhng vn còn
nhng gii thut khác nhau có hiu qu cao hn nhiu vi n ln, chng
hn gii thut xp đng (heapsort), trn (mergesort) hay gii thut nhanh
ca Hoare (quick sort). Tt c nhng gii thut này có thi gian bc
n.logn trong trng hp trung bình, heapsort và mergesort cùng có thi
gian n.logn trong trng hp ti nht.
làm sáng t s khác nhau thc t gia thi gian bc n
2
và bc
n logn, chúng ta đã lp trình Insert sort và Quicksort trên cùng mt máy.
S khác nhau v hiu qu gia hai gii thut này khá sit sao khi s lng
phân t đc sp xp là nh. Quicksort thc s nhanh hn 2 ln khi sp
50 phn t Insertsort mt nhiu hn 3 giây còn qucicsort cn ít hn 1/5
giây. Khi có 5000 phn t đc sp xp thì hiu qu kém ca Insert sort
bt đu b l ra, nó mt mt phút na cho trng hp trung bình còn
Quicksort ít hn 1 giây. Trong 30 giây, Quicksort có th sp đc
100.000 phn t, chúng ta phi mt 9 giây ri cho công vic nh vy
vi Insertsort.
phn sau ta s bit rng không có gii thut sp xp nào da
trên so sánh các phn t đc sp có thi gian nhanh hn bc nlogn. Tuy
nhiên, gii thut nhanh nht đc tìm ra trong trng hp đc bit. Gi
s, phn t đc sp xp là các s nguyên có giá tr nm gia 1 và
10.000, gii thut sau đây đã đc s dng:
Procedure ngn kéo (T[1 n])
array U[1 10.000]
For k1 to 10000 do U[k] 0
For i 1 to n do
k T[i]
U [k] U[k] +1
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
20
i 0
For k 1 to 10000 do
While U[k] 0 do
i i+1
T[i] k
U[k] U [k] -1
đây U là mng “ngn kéo” cho các phn t đc sp .
Ti đó, phi phân tích các ngn kéo cho các phn t có kh nng
tìm thy trong T. Vòng lp đu tiên xáo ngn kéo, vòng lp th hai đt
mi phn t ca T vào mt v trí thích hp và vòng lp th ba ly chúng
ra theo th t tng dn. thy gii thut này có thi gian bc n ( đây
n đi mt hng s bi ph thuc vào gii hn giá tr ca các phn t,
đây là 10000)
2.6.3 Phép nhân s nguyên ln
Khi chúng ta tính toán vi s nguyên quá ln, các toán hng ca
nó là quá dài đ cha trong mt t máy ca máy tính đang s dng.
Trong các ngôn ng lp trình hin nay đu có các phng thc tính s
ln chng hn đ chính xác kép, s nguyên dài nhng chúng ta phi
xác đnh thi gian cn thit đ cng, tr, nhân, chia các s nguyên ln
theo kích thc các toán hng. Kích thc này có th đo bi s t máy
cn đ biu din toán hng hoc đ dài biu din nó dng thp phân (s
ch ca nó vit dng thp phân) hoc nh phân.
Trong phn này, chúng ta ch xem xét phép nhân. Phân tích phép
cng, tr, khá đn gin ta coi nh bài tp. Gi s, ta có phép nhân 2 s
nguyên ln có kích thc tng ng là m và n (không ln ln nó vi giá
tr ca s nguyên) gii thut phân lp đc tính trong phn trc d dàng
phù hp vi ng cnh ca chúng ta. Chúng ta thc hin nhân mi s ca
toán hng này vi mi s ca toán hng khác và thc hin mt phép cng
cho mi phép nhân đó. Trên máy tính chúng ta nhân mi t ca mt toán
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
21
hng vi mi t ca toán hng khác và làm phép cng đ dài gp đôi cho
mi phép nhân đó. Thi gian cn thit đ nhân bc m.n.
Phép nhân kiu Nga cng có bc m.n.
Gii thut có hiu qu cao đ nhân hai s nguyên ln là gii thut
chia đ tr có thi gian bc n.m
log(3/2)
hoc gn đúng là n.m
0.59
, đó n>m.
Nu c hai toán hng cùng có đ dài n thì bc thi gian là n
1.59
. Gii thut
này có thi gian nh hn bc hai so vi c hai gii thut phân lp và gii
thut Nga.
S khác nhau gia bc n
2
và n
1.59
nh hn s khác nhau gia bc
n
2
và nlogn (không đp bng). Chúng ta đã kim tra điu này bng mt
chng trình chy trên gii thut chia đ tr và mt chng trình trên gii
thut phân lp và kim tra nó bng các s hng có kích thc khác nhau.
Chng trình chia đ tr tính trên s có 600 ch s ht 300 mi li giây.
Tng đ dài toán hng lên gp 10 ln thì mt là 15 giây, cái kia là 40 giây
(nhanh hn gp 3 ln). Hiu qu chia đ tr tip tc tng lên khi đ dài
toán hng tng lên.
2.6.4 Tìm c s chung ln nht
Cho m và n là hai s nguyên dng, vi c s chung ln nht
ca m và n kí hiu ucln(m,n) là hai s nguyên ln nht chia ht c m và
n. Khi ucln (m,n) = 1 ta gi đó là 2 s nguyên t cùng nhau. Chng hn,
ucln (10,u) =1 và ucln (6,15)= 3 thì 10 và 21 là nguyên t cùng nhau còn
6 và 15 thì không. Ta có gii thut sau xut phát t đnh ngha.
Function ucln (m,n)
i min (m,n) +1
repeat i i-1 until i chia ht c m và n
return i
Gii thut này có thi gian là s chênh lch gia s nh nht
(trong hai s) và c chung ln nht. Khi m và n tng đng kích thc
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
22
và nguyên t cùng nhau thì thi gian ca gii thut bc n (chú ý là n là
giá tr toán hng ch không phi là kích thc).
Gii thut kinh đin tính ucln (m,n), đu tiên phân tích m,n ra
thành tích ca các thc s nguyên t, sau đó ly tích ca các thc s
chung vi s m nh nht trong c 2 tích ca m và n, kt qu đt đc
chính là ucln (m,n).
Ví d: ucln (120,700), phân tích ta có 120 = 2
3
x 3 x5 và 700 = 2
2
x 5
2
x 7. Tha s chung cho c hai là 2 và 5, s m nh nht ca chúng
trong c hai tính tng ng là 2 và 1, t đó ta có ucln (120,700) = 2
2
x 5
1
= 20. Gi thut này đòi hi chúng ta phân tích m và n ra các tha s
nguyên t, mt thao tác mà không ai đánh giá đc hiu qu khi m và n
là các s ln.
Mt gii thut có hiu qu hn mà ta đã bit chính là gii thut
Euclid
Function Euclid (m,n)
While m > 0 do
t m
m n modm
n t
return n
Nu chúng ta coi thao tác s hc có mt hng s thi gian nào đó
thì gii thut này có thi gian bc logarit.
2.6.5 Tính dãy Fibonacci
Dãy Fibonacci chúng ta đã bit là nó đc đnh ngha nh sau:
f
0
= 0; f
1
= 1
f
n
= f
n-1
+ f
n-2
n≥2
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
23
c th là dãy bt đu nh sau: 0,1,1,2,3,5,8,13,21,37. . . và chúng ta cng
đã bit công thc Moivre
nn
n
f
5
1
đó
2
51
là t l bng, và s hng
n
có th b qua
khi n khác ln, vì vy giá tr ca f
n
tu thuc vào
n
và kích thc ca f
n
tu thuc vào n. Tuy nhiên, công thc này cn đn s tr giúp cu
phng thc tính chính xác s thc.
Gii thut đ quy đc xây dng t đnh ngha ca dãy Fibonacci
nh sau:
Function Fibrec(n)
if n>2 then return n
else return Fibrec (n-1) +Fibrec(n-2)
Gii thut này rt không hiu qu vì tính toán li cùng mt giá tr
nhiu ln. Chng hn, đ tính Fibrec (5) chúng ta cn giá tr ca Fibrec(4)
và Fibrec(3) đc tính hai ln, Fibrec (2) là 3 ln, Fibrec(1) là 5 ln và
Fibrec(0) là ba ln.
Gii thut th hai tính dãy Fibonacci nh sau:
Function Fibiter (n)
i1 ; j 0
For k1 to n do j i+j
i j-i
Return j
Gii thut th hai này có thi gian bc n nu chúng ta coi mi
phép cng nh là mt thao tác c s. Ngi ta đã làm chng trình so
sánh hai gii thut
Chng 2. Các khái nim c bn Nguyn V Quc Hng-Nguyn Qunh Dip
24
N
10
20
30
50
100
Fibrec
8 msec
20
2 min
21 days
10 year
Fibiter
1/6 msec
1/3 msec
msec
3/4 msec
2
1
1
msec
Nu chúng ta không coi phép cng là phép tính c s thì Fibiter
có thi gian bc n
2
, vn còn nhanh hn rt nhiu so vi thi gian hàm m
ca Fibrec.