Nh ng không th nói r ng bài toán này không có gi i thu t hay.
Trang 1CH NG 2 CÁC KHÁI NI M C B N V PHÂN TÍCH GI I THU T
2.1 BƠi toán vƠ th hi n (Problems and Instances)
Trong ph n trên, chúng ta đã nghiên c u m t s ví d v nhân 2
s nguyên d ng, ch ng h n nhân 981 và 1234 Tuy v y, các nguyên t c chính c a gi i thu t đó không ch cung c p nh ng cách th c nhân 2 s
đ c bi t, th c t chúng ta có m t gi i pháp t ng quát cho bài toán nhân 2
s nguyên d ng Chúng ta nói r ng (981, 1234) là m t th hi n (instance) c a bài toán nh v y Tuy nhiên, (-12, 83.7) không ph i là th
hi n c a bài toán này vì -12 không là s nguyên d ng và 83.7 không
ph i là s nguyên (D nhiên, chúng là th hi n c a m t bài toán khác,
t ng quát h n bài toán này) Bài toán hay nh t là bài toán có t p th hi n không có gi i h n Nh ng c ng có nh ng ngo i l Ch ng h n, bài toán
ch i c , có ch m t th hi n, đ c cho b i m t t p h p v trí chung nh t
đ xu t phát, ngoài ra ch có m t s h u h n các th hi n con (các b c
đi, các v trí trung gian h p l ) Nh ng không th nói r ng bài toán này không có gi i thu t hay
M t gi i thu t c n ph i làm vi c đúng v i t t c các th hi n c a mình, c n ph i ch ng minh đi u đó ch ra m t gi i thu t không đúng, chúng ta c n tìm m t th hi n mà t đó gi i thu t cho m t câu tr l i sai,
ho c không tìm đ c câu tr l i Tuy nhiên, đ ch ng minh m t gi i thu t không đúng là r t khó kh n ch ra r ng gi i thu t có th áp d ng cho t t c các th hi n, chúng ta đã xác đ nh m t mi n xác đ nh, đó là
m t t p th hi n mà chúng ta xem xét Gi i thu t nhân 2 s trong Ch ng
1 không làm vi c v i s âm và h u t , tuy nhiên không th nói gi i thu t
là không có giá tr Các th hi n c a phép nhân s âm ho c h u t không
n m trong mi n xác đ nh chúng ta đã l a ch n ban đ u
Các thi t b tính toán còn có gi i h n kích th c c a các th hi n Tuy nhiên, gi i h n này không làm h n ch gi i thu t Máy tính khác nhau có gi i h n khác nhau và th m chí nh ng ch ng trình khác nhau trên cùng m t gi i thu t trên thi t b nh nhau c ng cho k t qu khác nhau
Trang 22.2 Hi u qu c a các gi i thu t
Khi chúng ta có m t bài toán có m t vài gi i thu t có kh n ng thích h p, chúng ta c n ph i l a ch n m t gi i thu t t t nh t i u này
đ t ra m t câu h i là làm th nào đ ch n trong m t vài gi i thu t đó gi i thu t thích đáng h n c
N u chúng ta ch có m t ho c hai th hi n nh c a bài toán quá
đ n gi n thì không c n ph i ch n l a k càng quá trong tr ng h p này
đ n gi n là chúng ta ch n gi i thu t đ d l p trình, ho c ch n ch ng trình đã có mà không c n lo l ng v các thu c tính lý thuy t c a nó Tuy nhiên, n u chúng ta không có đ y đ các th hi n c a bài toán ho c là
m t bài toán khó thì chúng ta ph i l a ch n k càng h n
Nh ng ng i theo ch ngh a kinh nghi m th ng ch n m t gi i thu t phù h p v i k thu t l p trình và th nghi m chúng trên các th
hi n khác nhau v i s tr giúp c a máy tính Nh ng ng i theo lý thuy t
ch n gi i thu t phù h p v i xác đ nh kh i l ng có tính toán h c c a các
ng i h c c n thi t cho m i bài toán nh là m t hàm trên kích th c c a
th hi n c n thi t Ngu n h c mà ta quan tâm nh t là th i gian tính toán
và không gian l u tr Trong khuôn kh giáo trình này, chúng ta th ng xuyên so sánh các gi i thu t trên c s th i gian th c hi n nó, khi đó đ n
gi n là ta s nói nó ch y nhanh nh th nào
Kích th c c a m t th hi n th ng không là s bit c n thi t đ
bi u di n nó trong máy tính Tuy nhiên, đây t " kích th c" đ ch s
l ng các thành ph n c a m t th hi n Ví d , nói v s p x p thì kích
th c c a th hi n là s l ng ph n t đ c s p x p T ng t nh v y, khi nói v đ th thì kích th c là s l ng các nút ho c 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 hi u n ng c a gi i thu t nh là giá tr c a th hi n c n thi t hi n t i, (s l ng bit c n thi t đ bi u di n giá tr này d ng nh phân)
Thu n l i c a ph ng pháp lý thuy t là nó không đ c vào máy tính hi n t i đang s d ng, không ch n vào ngôn ng l p trình, th m trí không ch n vào k n ng c a ng i l p trình D a vào đó ta ti t ki m
đ c c th i gian s m t đi do l p trình vô ích m t gi i thu t không hi u
Trang 3qu và c th i gian m t đi do máy tính s ki m tra nó Cao h n n a (quan
tr ng h n) là s nghiên c u hi u qu c a gi i thu t trên các th hi n c a kích th c ây là cái không có trong ph ng pháp kinh nghi m (th c nghi m), n i mà s th c hành luôn là ki m tra các gi i thu t ch d a trên
m t s nh các l a ch n th hi n tu ý có kích th c v a ph i C ng t
đó th ng khám phá đ c gi i thu t m i t t h n khi c hai đ c s d ng trên các th hi n l n, đúng là m t quan đi m đ c bi t quan tr ng
C ng có nh ng kh n ng phân tích gi i thu t b ng ph ng pháp lai, hi u qu c a gi i thu t, mô t d ng khuôn m u cho các ch c n ng
đ c xác đ nh theo lý thuy t và các tham s s h c cho ch ng trình và máy riêng bi t đ c xác đ nh b i kinh nghi m, th ng nh là ph ng pháp h i quy S d ng ph ng pháp này có th d đoán đ c th i gian
th c hi n đ y đ th c t trên m t th hi n quá l n mà ta dùng đ ki m tra C n tránh s suy di n (ngo i suy) duy nh t trên c s m t s l ng
nh c a các th hi n theo kinh nghi m b qua các nguyên lý c n thi t
D đoán mà không có c s lý thuy t là m t ki u làm vi c m h , vi n vông
N u chúng ta mu n đo t ng không gian l u tr c a m t gi i thu t
đ c s d ng nh là hàm c a kích th c, thì ta s d ng bít B t k lo i máy tính nào đ c s d ng, khía ni m bit l u tr là không đ i, đã xác
đ nh M t khác, trong ph n l n các tr ng h p, chúng ta mu n đo hi u
q a c a gi i thu t theo th i gian thì không th bi u di n theo giây (second) đ c vì chúng ta ch n m t y u t b t bi n, sao cho hai l n th c
hi n m t th hi n c a cùng gi i thu t s ch chênh l nh hi u qu b i m t
h ng s nhân Ví d , n u h ng s này là 5, l n th c hi n đ u tiên có th i gian là 1 giây đ gi i quy t m t th hi n có kích th c riêng bi t thì l n
th c hi n th hai (trên máy khác, trên ngôn ng l p trình khác) có th i gian không lâu h n 5 giây đ gi i quy t cùng m t th hi n Chính xác
h n, n u 2 l n th c hi n cùng m t gi i thu t c n th i gian t1(n) và t2(n) giây đ gi i quy t th hi n có kích th c n thì luôn t n t i h ng s d ng
c và d sao cho t1(n) c.t2(n) và t2(n) d.t1(n) khi n đ l n
Y u t b t bi n có th đ c ch n làm đ n v đo hi u qu c a m t
gi i thu t b ng m t h ng s ph c h p Chúng ta nói r ng, m t gi i thu t
Trang 4cho m t bài toán nào đó có th i gian th c hi n b c t(n), t là m t hàm, n u
nh t n t i m t h ng s d ng c và s th c hi n gi i thu t có kh n ng
gi i t t c các th hi n kích th c n là có th i gian không l n h n c.t(n) giây
S d ng giây trong đ nh ngh a này là không b bó bu c, chúng ta
ch c n chuy n h ng s thích h p nào đó thì ta g i là m t gi i thu t có
th i gian b c n, ho c đ n gi n h n là m t gi i thu t có th i gian tuy n tính (linear algorithm) M t gi i thu t có th i gian th c hi n th hi n kích
th c n không nhi u h n c.n2 giây g i là b c n2 ho c th i gian b c hai,
gi i thu t b c 2 (quadratus algorithm) T ng t , m t gi i thu t b c 3, đa
th c, lu th a (cubie, polynomial, exponential có th i gian b c n3
, nk, cn,
t ng ng)
L u ý là b c r t quan tr ng trong đánh giá hi u qu , b c n2
, n3 là
r t khác nhau n u kích th c l n
2.3 Phơn tích trung bình vƠ phơn tích t i nh t
Th i gian th c hi n ho c không gian l u tr có th bi n đ ng đáng k gi a hai th hi n khác nhau có cùng kích th c làm nh ng
đi u này, hãy xem xét hai gi i thu t s p x p c b n, gi i thu t chèn tr c
ti p (insertion) và gi i thu t ch n tr c ti p (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]
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
Trang 5if T [j] <minx then minj j minx T[j]
T[minj] T[i]
T[i] minx Hãy b t ch c thao tác c a gi i thu t trên m t vài m ng nh đ
ch c ch n r ng chúng ta đã bi t gi i thu t làm vi c nh th nào Vòng l p chính c a Insertion đã xem xét m i ph n t c a m ng t phân t th hai
đ n ph n t th n và chèn nó vào v trí thích h p gi a các ph n t đ ng
tr c nó trong m ng Gi i thu t Selection ch n ph n t nh nh t c a
b ng, đ t nó vào làm ph n t đ u tiên, r i l i ch n ph n t nh nh t, ti p theo, đ t nó làm ph n t th hai c a m ng, và c nh v y cho đ n h t
L y U và V là 2 m ng có N ph n t , m ng U đã đ c s p x p
t ng d n và m ng V đã đ c s p x p gi m d n
C hai gi i thu t có th i gian th c hi n V nhi u h n th i gian
th c hi n U Th c t là m ng V bi u di n tr ng h p v i kh n ng x u
nh t cho c hai gi i thu t, không có m ng nào v i n ph n t l i c n nhi u
th i gian x lý nh v y Gi i th t ch n tr c ti p không nh n bi t đ c
th t g c c a m t m ng dã đ c s p: Thao tác ki m tra “ if T[j] < min x
“ đ c th c hi n v i s l n nh nhau cho t t c các tr ng h p S thay
đ i trong th i gian th c hi n ch do th i gian th c hi n các phép gán trong ph n “then” c a thao tác ki m tra này có ph i th c hi n hay không Khi chúng ta l p trình gi i thu t này và ki m tra nó trên máy thì s th y
r ng th i gian c n thi t đ s p x p s ph n t là không nhi u h n 15% cho dù th t kh i đ ng là đã đ c s p x p R i chúng ta s bi t, gi i thu t Selection (T) có th i gian th c hi n b c 2, không đ m x a gì đ n
th t kh i đ u c a các ph n t
N u chúng ta so sánh th i gian th c hi n b i gi i thu t Insert(T) trên cùng hai m ng này thì s có nh ng nh n xét khác h n B i vì đi u
ki n đi u khi n c a vòng l p (while) là luôn sai t lúc b t đ u, Insert(U)
th c hi n r t nhanh ta nói r ng nó có th i gian tuy n tính V i V, gi i thu t Insert(T) có th i gian bâc hai b i vòng l p (while) đã th c hi n
Trang 6(i-1) l n v i m i giá tr c a i S bi n đ ng v th i gian th c hi n gi a hai
th hi n là r t đáng k H n n a, s bi n đ ng còn t ng lên theo s l ng
ph n t đã đ c s p x p Khi chúng ta th c hi n gi i thu t Insert(T) đ
s p x p m t m ng 5000 ph n t đã s p t ng d n thì m t th i gian khôn ít
h n 1/5 giây, trong khi đó m t 210 giây đ s p x p m ng đó đã x p gi m
d n (t c là 1000 l n lâu h n)
N u có s bi n đ i l n x y ra thì làm th nào đ phát hi n v th i gian th c hi n gi i thu t theo kích th c c a các th hi n đ c gi i? Chúng ta luôn coi tr ng h p t t nh t c a m t gi i thu t cho m i kích
th c khi mà gi i thu t đòi h i nhi u th i gian nh t i u này đã gi i thích vì sao trong ph n trên ta nói gi i thu t ph i có kh n ng gi i t t c các th hi n có kích th c n trong th i gian không quá Ct(n) giây v i C
là h ng s thích h p N u nó ch y v i th i gian b c t(n) ta đã có n trong
đó m t tr ng h p t i nh t
Phân tích tr ng h p t i nh t là thích h p cho các gi i thu t đáp
ng m t th i gian có h n Ví d , gi i thu t đi u khi n n ng l ng h t nhân, đi u c t y u là bi t đ c gi i h n trên vì th i gian c a h th ng,
b t k các th hi n đ c bi t đ c gi i quy t M t khác, n u m t gi i thu t
đ c s d ng nhi u l n trên nhi u th hi n khác nhau thì đi u quan tr ng
là ta đánh giá đ c th i gian th c hi n trung bình trên các th hi n có kích th c n Chúng ta đã bi t r ng th i gian th c hi n gi i thu t insert(T) bi n đ ng gi a b c n và b c n2 n u chúng ta có th tính toán
th i gian trung bình c a gi i thu t khi gi i n! các s p x p khác nhau c a
m ng khi b t đ u (v i các ph n t c a m ng là riêng bi t) thì chúng ta có
th nói v th i gian s p x p c a m t m ng v i v trí ph n t là ng u nhiên Trong ph n sau ta th y r ng tr c tiên n! c a các hoán v ph n t
c a m ng s cho th i gian trung bình v n là b c n2 S p x p chèn có th i gian b c 2 tr ng h p trung bình và t i nh t, m c dù vài tr ng h p có
th nhanh h n Ta bi t r ng, m t vài gi i thu t s p x p khác có th i gian
b c hai trong tr ng h p t i nh t nh ng có th i gian b c nlog(n) trong
tr ng h p trung bình Th m chí gi i thu t này là kém nh t trong tr ng
h p t i nh t nh ng l i có kh n ng là gi i thu t nhanh nh t trong tr ng
h p trung bình v i ph ng pháp s p x p m ng t i ch
Trang 7Phân tích trung bình c a gi i thu t luôn nh h n phân tích t i
nh t H n n a, phân tích trung bình có th sai n u nh trong th c t các
th hi n nghi m không đ c ch n ng u nhiên Ví d , Insert(T) có th i gian trung bình b c 2 khi t t c n! kh n ng s p x p c a m ng đã đ c
th nghi m Tuy nhiên, trong nhi u ng d ng đi u ki n này có th không
th c t M t ch ng trình s p x p đ c s d ng đ c p nh t m t t p tin (file) th ng ch y u s p x p m t m ng mà các ph n t c a nó đã th t s
n m g n đúng v trí, ch còn vài ph n t c a n m ngoài v trí Tr ng h p này ph ng pháp trung bình trên các th hi n đ c ch n ng u nhiên là
m t ví d t i cho hi u qu th c t
phân tích đ y đ tr ng h p trung bình đòi h i m t vài tri
th c kinh đi n v s phân tán các th hi n đ c gi i i u này thông
th ng là m t đòi h i không th c t c bi t, khi mà m t gi i thu t l i
đ c s d ng bên trong m t gi i thu t ph c t p h n, s không c tính
đ c các th hi n s ph i x y ra m t cách th t th ng
2.4 Th nƠo lƠ m t thao tác c b n (elementary operation)
M t thao tác c b n là m t thao tác mà th i gian th c hi n nó có
th gi i h n trên b i m t h ng s ch ph thu c vào m t s th c hi n riêng bi t đã đ c s d ng trên máy tính, trên ngôn ng l p trình,
Nh v y, h ng s này không ph thu c kích th c ho c các thông s khác c a th hi n đang đ c xem xét B i vì chúng ta quan tâm đ n th i gian th c hi n giait thu t xác đ nh trong ph m vi m t h ng s nhân, nó
ch là, m t s l ng các thao tác c b n đ c th c hi n trong gi i thu t
mà không quan tâm đ n th i gian chính xác c a m i thao tác đó Ch ng
h n, khi phân tích m t gi i thu t đ gi i quy t m t th hi n v i m t kích
th c nào đó ta th y nó c n a phép c ng, m phép nhân và s phép gán giá
tr Gi s , chúng ta bi t dãy phép c ng không bao gi th c hi n quá ta
micro giây, phép nhân th c hi n không quá tmmicro giây, phép gán th c
hi n không quá tsmicro giây ( các h ng s này đ u ph thu c máy đ c
s d ng đ th c hi n gi i thu t) Phép c ng, nhân và gán coi nh là các thao tác c b n T ng th i gian t c n có đ gi i thu t ch y xong có th
đ c đánh giá nh sau:
Trang 8t ≤ a.ta + m.tm + s.ts≤ max(ta, tm, ts).( a + m + s)
Nh v y, t đ c gi i h n b i m t h ng s ph c h p đ c c u t o
t s l ng c a các thao tác c b n đã đ c th c hi n
Th i gian chính xác cho m i thao tác c b n không quan tr ng,
đ n gi n ta nói r ng m i thao tác đ c th c hi n trên m t đ n v chi phí
th i gian
Trong mô t gi i thu t trên đây, m t dòng đ n c a ch ng trình phù h p v i s l ng bi n đ ng c a thao tác c b n, th i gian c n thi t
đ tính (T là m ng N phân t ) x min { T[i], 1≤ I ≤n}
T ng lên theo n, đó chính là mô t rút g n c a xT[1]
For I 2 to n do
Y T[i] < x then x T[i]
T ng t , m t vài thao tác toán h c quá ph c t p đ c coi nh
là thao tác c b n N u chúng ta coi phép tính giá tr c a m t giai th a
và ki m tra ch a h t là đ n v chi phí, b t ch p kích th c c a các toán
h c nguyên lý Wilson (s nguyên n ch a h t (n-1)! + 1 n u và ch n u n
là s nguyên t v i m i n>1) s ki m tra m t s nguyên v i hi u qu đáng kinh ng c:
Function Wilson (n)
{return true if and only if n là nguyên t }
if n chia h t (n-1)! + 1 then return true else return false
Trong ví d đ u c a ph n này, chúng ta đã coi phép c ng và phép nhân là các thao tác đ n v chi phí, th i gian c n thi t cho các thao tác này gi i h n b i m t h ng s Theo lý thuy t, các thao tác này không
ph i là c b n vì th i gian c n thi t đ th c hi n nó t ng lên theo đ dài
c a các toán h ng
Trang 9Th c t , chúng có th đ c coi là thao tác c b n mi n là các toán
h ng có liên quan có kích th c h p lý trong các th hi n mà hy v ng s
g p Hai ví d d i đây s minh h a cho đi u chúng ta nói
Function Sum(n)
{Tính t ng 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 h ng th n c a dây Fibonacci}
I 1; j 0 For k 1 to n do j i+j
I j -1 Return j
Trong gi i thu t Sum, giá tr sum phù h p v i t t c các th hi n
mà trong th c t gi i thu t khi th c hi n có th b t g p N u chúng ta s
d ng máy v i 32 bit bi u di n s , t t c các phép c ng có th th c hi n
tr c ti p v i n không l n h n 65535 Theo lý thuy t, gi i thu t ph i làm
vi c v i t t c các giá tr có kh n ng c a n Trong th c t , không m t máy tính nào có th th c hi n phép c ng nh là m t đ n v chi phí n u n
đ c ch n đ l n S phân tích gi i thu t ph i tu theo m c đích c a ng
d ng
Trong tr ng h p Fibonacci ta có m t tr ng thái khác, ta tính
đ c s cu i cùng là n +47, lúc này phép c ng j i +j s b tràn ô s h n trên máy 32 bit có k t qu v i n + 65535 ta c n 45496 bit ho c nhi u
h n 1420 t máy
V n đ c ng t ng t nh v y, khi ta phân tích các gi i thu t bao hàm s th c Ch ng h n, tính dãy Fibonacci b ng công th c Moivre
Trang 10
N
5
1
V I
2
5
1
( t l này)
Tóm l i, đ quy t đ nh m t câu l nh b ngoài nhi u đ n gi n nh
jj+i có là m t thao tác c b n ho c không ta đ cho cách s d ng phán
x Sau đây chúng ta coi phép c ng, tr , nhân, chia, l y modulo, toán
t logic, so sánh và phép gán là các thao tác c b n có th th c hi n
m t đ n v chi phí tr khi có m t gi i thích khác
2.5 Vì sao l i ph i xem xét hi u qu c a gi i thu t
Các thi t b tính toán ngày càng ch y nhanh h n, m t câu h i là ta
có b cùng trên phí th i gian đ xây d ng m t gi i thu t có hi u qu hay
d dàng h n là ch th h máy tính m i?
Các t t ng ch y u đã đ c trình bày trong ph n này ch rõ
đi u đó là không đúng Gi s , có m t bài toán riêng bi t có th i gian hàm m và m t máy tính có kh n ng gi i m t th hi n có kích th c n trong 10-4 x 210giây, t c là kho ng 1/10 giây, gi i kích th c 20 là 10 -4
x 220 g n 1000 l n dài h n, kho ng hai phút Gi i v i kích th c 30 thì
l i là 1000 l n dài h n n a, g n 1 ngày n a Gi s , máy tính không b
ng t, không có l i thì ch y c m t n m c ng ch gi i đ c th hi n có kích th c 38
Gi thi t là chúng ta có kh n ng tài chính đ mua m t vài cái máy tính ch y nhanh h n g p 100 l n máy nói trên V i cùng gi i thu t
đó, gi i quy t th hi n v i kích th c n ch có 10-6
x 2n giây V y thì
ch y c n m chúng ta cùng ch gi i đ c m t th hi n có 45 Nói chung, máy tính có kh n ng gi i th hi n kích th c n trong m t kho ng th i gian nào đó thì máy tính m i nói s gi i đ c m t th hi n có kích th c
ít nh t là n+lg100, kho ng n+7, trong cùng m t th i gian
Gi thi t chúng ta đ u t cùng chi phí đó vào thi t k gi i thu t
đ t k t qu là tìm th y m t gi i thu t b c ba cho bài toán c a chúng ta
Ch ng h n, cùng v i máy tính ban đ u và gi i thu t m i v i chi phí th i gian cho th hi n kích th c n là 10 -2
x n3 giây V y thì gi i thu t th