Giáo trình phân tích giải thuật
Collected by The_Wall (11/10/2005) M c tiêu Ki n th c c b n c n có h c ch ng Tài li u tham kh o có liên quan n ch ng N i dung: I.1 - S c n thi t ph i phân tích gi i thu t I.2 - Th i gian th c hi n c a gi i thu t I.3 - T su t t ng ph c t p c a gi i thu t I.4 - Cách tính ph c t p I.5 - Phân tích ch ng trình quy V n nghiên c u c a trang k ti p Trong ch ng s nghiên c u v n sau: · S c n thi t ph i phân tích gi i thu t · Th i gian th c hi n c a ch · T su t t ng ng trình ph c t p c a gi i thu t · Tính th i gian th c hi n c a ch · Phân tích ch I.1- S ng trình ng trình quy C N THI T PH I PHÂN TÍCH GI I THU T Trong gi i m t tốn có th có m t s gi i thu t khác nhau, v n c n ph i ánh giá gi i thu t ó l a ch n m t gi i thu t t t (nh t) Thơng th ng ta s c n c vào tiêu chu n sau: 1.- Gi i thu t úng n 2.- Gi i thu t n gi n 3.- Gi i thu t th c hi n nhanh V i yêu c u (1), ki m tra tính úng n c a gi i thu t có th cài t gi i thu t ó cho th c hi n máy v i m t s b d li u m u r i l y k t qu thu c so sánh v i k t qu ã bi t Th c cách làm khơng ch c ch n b i có th gi i thu t úng v i t t c b d li u ã th nh ng l i sai v i m t b d li u ó V l i cách làm ch phát hi n gi i thu t sai ch ch a ch ng minh c úng Tính úng n c a gi i thu t c n ph i c ch ng minh ng toán h c T t nhiên u không n gi n v y s không c p n ây Khi vi t m t ch ng trình s d ng m t vài l n yêu c u (2) quan tr ng nh t Chúng ta c n m t gi i thu t d vi t ch ng trình nhanh chóng có c k t q a , th i gian th c hi n ch ng trình khơng c cao dù ch ng trình ó c ng ch s d ng m t vài l n mà Tuy nhiên m t ch Giáo trình mơn Phân tích Gi i Thu t – ng trình I c s d ng nhi u l n thì yêu c u ti ït ki m th i gian C C N TH Trang Collected by The_Wall (11/10/2005) th c hi n ch ng trình l i r t quan tr ng c bi t i v i nh ng ch ng trình mà th c hi n c n d li u nh p l n ó yêu c u (3) s c xem xét m t cách k Ta g i hi u qu th i gian th c hi n c a gi i thu t I.2- TH I GIAN TH C HI N C A GI I THU T I.2.1- Th i gian th c hi n ch ng trình I.2.2n v o th i gian th c hi n I.2.3- Th i gian th c hi n tr ng h p x u nh t M t ph ng pháp xác nh hi u qu th i gian th c hi n c a m t gi i thu t l p trình o ng th i gian th c hi n c a ho t ng m t máy tính xác nh i v i t p h p c ch n l c li u vào Th i gian th c hi n không ch ph thu c vào gi i thu t mà ph thu c váo t p ch th a máy tính, ch t l ng c a máy tính k x o c a ng i l p trình S thi hành c ng có th u ch nh th c hi n t t t p c bi t d li u vào c ch n v t qua tr ng i này, nhà khoa h c máy tính ã ch p nh n tính ph c t p c a th i gian c ti p c n nh m t s o l ng c n s th c thi c a gi i thu t Thu t ng tính hi u qu s c p n s o l ng c bi t i i s ph c t p th i gian tr ng h p x u nh t I.2.1- Th i gian th c hi n ch ng trình Th i gian th c hi n m t ch ng trình m t hàm c a kích th kích th c ( l n) c a d li u vào Ví d 1-1: Ch t h ng s c d li u vào, ký hi u T(n) ó n ng trình tính t ng c a n s có th i gian th c hi n T(n) = cn ó c Th i gian th c hi n ch ng trình m t hàm khơng âm, t c T(n) ≥0 ∀n≥0 I.2.2n v o th i gian th c hi n n v c a T(n) không ph i n v o th i gian bình th ng nh gi , phút giây mà th c xác nh b i s l nh c th c hi n m t máy tính lý t ng ch Ví d 1-2: Khi ta nói th i gian th c hi n c a m t ch ng trình y c n cn ch th th c thi ng ng trình T(n) = cn có ngh a I.2.3- Th i gian th c hi n tr ng h p x u nh t Nói chung th i gian th c hi n ch ng trình khơng ch ph thu c vào kích th c mà cịn ph thu c vào tính ch t c a d li u vào Ngh a d li u vào có kích th c nh ng th i gian th c hi n ch ng trình có th khác Ch ng h n ch ng trình s p x p dãy s nguyên t ng d n, ta cho vào dãy có th t th i gian th c hi n khác v i ta cho vào dãy ch a có th t , ho c ta cho vào m t dãy ã có th t t ng th i gian th c hi n c ng khác so v i ta cho vào m t dãy ã có th t gi m Vì v y th ng ta coi T(n) th i gian th c hi n ch ng trình tr ng h p x u nh t li u vào có kích th óc n, t c là: T(n) th i gian l n nh t th c hi n ch ng trình i v i m i d li u vào có kích th c n I.3- T SU T T NG VÀ Giáo trình mơn Phân tích Gi i Thu t – PH C T P C A GI I THU T I C C N TH Trang Collected by The_Wall (11/10/2005) I.3.1- T su t t ng I.3.2- Khái ni m ph c t p c a gi i thu t I.3.1- T su t t ng Ta nói r ng hàm khơng âm T(n) có n0 cho T(n) f(n) v i m i n n0 Ta có th ch ng minh su t t ng f(n) c a nó” su t t ng (growth rate) f(n) n u t n t i h ng s c c r ng “Cho m t hàm không âm T(n) b t k , ta ln tìm ct Ví d 1-3: Gi s T(0) = 1, T(1) = t ng quát T(n) = (n+1)2 t n0 = c = v i m i n d dàng ch ng minh r ng T(n) = (n+1)2 4n2 v i m i n 1, t c t su t t ng c a T(n) n2 Ví d 1-4: T su t t ng c a hàm T(n) = 3n3 + 2n2 n3 Th c v y, cho n0 = c = ta d dàng ch ng minh r ng v i m i n 3n3 + 2n2 5n3 I.3.2- Khái ni m ph c t p c a gi i thu t Gi s ta có hai gi i thu t P1 P2 v i th i gian th c hi n t ng ng T1(n) = 100n2 (v i t su t t ng n2) T2(n) = 5n3 (v i t su t t ng n3) Gi i thu t s th c hi n nhanh h n? Câu tr i ph thu c vào kích th c d li u vào V i n < 20 P2 s nhanh h n P1 (T2a[j] then Swap(a[j-1], a[j]); end; Trong cách vi t trên, ch ng trình Bubble g i ch ng trình Swap, ó tính th i gian th c hi n c a Bubble, tr c h t ta c n tính th i gian th c hi n c a Swap D th y th i gian th c hi n a Swap O(1) ch bao g m l nh gán Trong Bubble, l nh {3} g i Swap nên ch t n O(1), l nh {2} th c hi n n-i l n, m i l n t n O(1) nên t n O(n-i) L nh {1} th c hi n n-1 l n nên I.5- PHÂN TÍCH CÁC CH NG TRÌNH QUY I.5.1- Thành l p ph ng trình quy I.5.2- Gi i ph ng trình quy V i ch ng trình có g i ch ng trình quy, ta khơng th áp d ng cách tính nh a trình bày m c I.4.4 b i m t ch ng trình quy s g i b n thân ph quy V i ch ng trình quy, tr c h t ta c n thành l p ph ng trình quy, sau ó gi i ng trình quy, nghi m c a ph ng trình quy s th i gian th c hi n c a ch ng trình I.5.1- Thành l p ph ng trình quy Ph ng trình quy m t ph ng trình bi u di n m i liên h gi a T(n) T(k), ó T(n) th i gian th c hi n ch ng trình v i kích th c d li u nh p n, T(k) th i gian th c hi n ch ng trình v i kích th c d li u nh p k, v i k < n thành l p c ph ng trình quy, ta ph i c n c vào ch ng trình quy Ví d 1-9: Xét hàm tính giai th a vi t b ng gi i thu t quy nh sau: function Giai_thua(n:integer): integer; begin if n=0 then Giai_thua :=1 else Giai_thua := n* Giai_thua(n-1); end; i T(n) th i gian th c hi n vi c tính n giai th a, T(n-1) th i gian th c hi n vi c tính n-1 giai th a Trong tr ng h p n=0 ch ng trình ch th c hi n m t l nh gán Giai_thua:=1, nên t n O(1), ó ta có T(0) = C1 Trong tr ng h p n>0 ch ng trình ph i g i quy Giai_thua(n-1), vi c i quy t n T(n-1), sau có k t qu c a vi c g i quy, ch ng trình ph i nhân k t qu ó i n gán cho Giai_thua Th i gian th c hi n phép nhân phép gán m t h ng C2 V y ta có Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) ây ph ng trình quy tính th i gian th c hi n c a ch ng trình quy Giai_thua Ví d 1-10: Chúng ta xét th t c MergeSort m t cách phác th o nh sau: function MergeSort (L:List ; n:integer) : List; var L1,L2 : List; begin if n = then return(L) else begin Chia L thành n a L1 L2 , m i m t n a có dài n/2; return(Merge(MergeSort (L1 , n/2), MergeSort(L2, n/2))); end; end; Ch ng h n s p x p danh sách L g m ph n t 7, 4, 8, 9, 3, 1, 6, ta có mơ hình minh h a a MergeSort nh sau: Hàm MergeSort nh n m t danh sách có dài n tr v m t danh sách ã c s p x p Th c Merge nh n hai danh sách ã c s p L1 L2 m i danh sách có dài n/2, tr n chúng l i v i c m t danh sách g m n ph n t có th t Gi i thu t chi ti t c a Merge ta s bàn sau, ch ý r ng th i gian Merge danh sách có dài n/2 O(n) Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) G i T(n) th i gian th c hi n MergeSort m t danh sách n ph n t T(n/2) th i gian th c hi n MergeSort m t danh sách n/2 ph n t , ta có th vi t ph ng trình quy nh sau: Trong ó c1 th i gian ph i t n L có dài Trong tr ng h p n > 1, th i gian c a MergeSort c chia làm hai ph n Ph n g i quy MergeSort m t danh sách có dài n/2 T(n/2) ó ta có 2T(n/2) Ph n th hai bao g m phép th n >1, chia danh sách L thành hai n a b ng Merge Ba thao tác l y th i gian không i i v i phép th ho c t l v i n i v i ng t Merge Nh v y h ng c2 c ch n c2n th i gian t ng làm vi c ó ngo i tr g i quy I.5.2- Gi i ph Có ba ph ng trình quy ng pháp gi i ph ng trình 1.- Ph ng pháp truy h i 2.- Ph ng pháp oán nghi m quy: 3.- L i gi i t ng quát c a m t l p ph Ph ng trình quy ng pháp truy h i Dùng quy thay th b t k T(m) v i m < n vào phía ph i c a ph ng trình cho n t t T(m) v i m > c thay th b i bi u th c c a T(1) Vì T(1) ln h ng nên có cơng th c c a T(n) ch a s h ng ch liên quan n n h ng s Gi i ph ng trình Ví d 1-10: Gi i ph ng trình: Ta có: Gi s n = 2k, trình suy r ng s k t thúc i =k, ó ta có: T(n) = 2kT(1) + kC2n Vì 2k = n nên k = logn v i T(1) =C1 nên ta có Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) T(n) = C1n + C2nlogn Hay T(n) O(nlogn) oán nghi m Ta oán m t nghi m f(n) dùng ch ng minh quy n p Thông th ch ng t r ng T(n) f(n) v i m i n ng f(n) m t hàm quen thu c nh logn, n, nlogn, n2, n3, 2n, n!, nn ch ốn d ng c a f(n) ó có m t vài tham s ch a xác nh (ch ng h n f(n) = an v i a ch a xác nh) trình ch ng minh quy n p ta s suy di n giá tr thích p c a tham s Ví d 1-11: Gi i ph ng trình quy Gi s oán f(n) = anlogn V i n = ta th y r ng cách ốn nh v y khơng cb i anlog n có giá tr khơng ph thu c vào giá tr c a a Vì th ta th ti p theo f(n) = anlogn + b V i n = ta có, T(1) = C1 f(1) = b, mu n T(1) Gi s r ng T(k) Gi s n f(1) b C1 (*) aklogk + b v i m i k < n (I.2).Ta s ch ng minh T(n) anlogn + b 2, t (I.1) ta có T(n) = 2T(n/2) + C2n Áp d ng (I.2) v i k = n/2 < n ta có: T(n) = 2T(n/2) + C2n 2[an/2log(n/2) + b] + C2n T(n) anlogn - an + 2b + C2n T(n) (anlogn + b) + [b + (C2 - a)n] N u l y a T(n) (anlogn + b) + [b +(C2 - C2 - b )n ] T(n) (anlogn + b) + (1-n) b T(n) an logn + b C2 + b (**) ta N u ta l y a b cho c (*) (**) u tho mãn T(n) D dàng ta có b = C1 a= C1 +C2 ta c T(n) Giáo trình mơn Phân tích Gi i Thu t – I c an logn + b v i m i n (C1 + C2)nlogn + C1 v i m i n C C N TH Trang Collected by The_Wall (11/10/2005) Hay nói cách khác T(n) O(nlogn) i gi i t ng quát cho m t l p ph ng trình quy gi i tốn kích th c n, ta chia toán ã cho thành a tốn con, m i tóan có kích th c n/b Gi i toán t ng h p k t qu l i c k t qu c a toán ã cho i toán c ng làm nh v y K thu t s d n n m t ch ng trình quy Gi thi t r ng m i tốn kích th c l y m t n v th i gian th i gian chia tốn kích th c n thành tốn kích th c n/b t ng h p k t qu t toán c l i gi i c a toán ban u d(n) (Ch ng h n i v i thí d MergeSort, có a = b = 2, d(n) = C2n/C1 Xem C1 m t n v ) G i T(n) th i gian Ta s d ng ph Gi s n = bk ta gi i tốn kích th ng pháp truy h i gi i ph c n ta có ph ng trình quy: ng trình c: T(n/bk) = T(1) = Thay vào v i i = k ta có: Hàm ti n tri n, nghi m thu n nh t nghi m riêng Trong ph ng trình quy (I.1) hàm th i gian d(n) c g i hàm ti n tri n (driving function) Trong công th c (I.2), ak = nlogba c g i nghi m thu n nh t (homogeneous solutions) Nghi m thu n nh t nghi m xác d(n) = v i m i n Nói m t cách khác, nghi m thu n nh t bi u di n th i gian gi i t t c toán Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 10 ... l n nên I.5- PHÂN TÍCH CÁC CH NG TRÌNH QUY I.5.1- Thành l p ph ng trình quy I.5.2- Gi i ph ng trình quy V i ch ng trình có g i ch ng trình quy, ta khơng th áp d ng cách tính nh a trình bày m c... ng trình mà g i ã c ánh giá Cu i ta tính th i gian cho ch ng trình Gi s ta m t h th ng ch ng trình g i theo s sau: Ch ng trình A g i hai ch ng trình B C, ch ng trình B g i hai ch B1 B2, ch ng trình. .. V i m i gi i thu t s nghiên c u ph n: gi i thu t, ví d , ch ánh giá Giáo trình mơn Phân tích Gi i Thu t – I ng trình phân tích C C N TH Trang 16 Collected by The_Wall (11/10/2005) II.2.1-