Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
588,38 KB
Nội dung
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 [...]... 10-2xn3 102 10-4xn3 10 1 5 chính xác là 3 10 15 20 25 30 35 100 ùng 17 Ch - 2.6 2.6 -J uss- 3 - Jordan trong 1/20 giây , khô , lg7 = n2,81 Jordan không 2.6 18 Ch - , g 2 phân nsert sort trung bình còn Quicksort nsertsort trên so sánh các ph nhiên, , T[1 n]) array U[1 10.000] For k 1 to 10000 do U[k] For i 1 to n do k U [k] 0 T[i] U[k] +1 19 Ch - i 0 For k 1 to 10000 do While U[k] 0 do i i+1 T[i] U[k]... -1 ây 2.6 Trong c K , , ta c 20 Ch - log(3/2) 0.59 1.59 2 và n1.59 n2 (nhanh h 2.6 n Khi , Function ucln (m,n) i min (m,n) +1 repeat i i-1 return i G 21 Ch - chính là ucln (m,n) : ucln (120,700), phân tích ta có 120 = 23 x 3 x5 và 700 = 22 x 52 2 x 51 Euclid Function Euclid (m,n) While m > 0 do t m m n modm n t return n 2.6.5 Tính dãy Fibonacci f0 = 0; f1 = 1 fn = fn-1 + fn-2 22 Ch - fn 1 n n 5 1 . 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. 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. 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