2.1.1. Th i gian th c hi n ch ng trình 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à l p trình nó và o l ng th i gian th c hi n c a ho t ng trên m t máy tính xác nh i v it ph p c ch n l c các d li u vào. Th i gian th c hi n không ch ph thu c vào gi i thu t mà còn ph thu c vào t p các ch th c a máy tính, ch t l ng c a máy tính và k x o c a ng i l p trình. S thi hành c ng có th i u ch nh th c hi n t t trên t p c bi t các d li u vào c ch n. Ð v t qua các tr ng i này, các 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 b 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 này và c bi t i v i s ph c t p th i gian trong tr ng h p x u nh t. Th i gian th c hi n m t ch ng trình là m t hàm c a kích th c d li u vào, ký hi u T(n) trong ó n là kích th c ( l n) c a d li u vào. Ví d : Ch ng trình tính t ng c a n s có th i gian th c hi n là T(n) = Cn trong ó C là m t h ng s . Ð n v c a T(n) không ph i là n v o th i gian bình th ng nh gi , phút giây... mà th ng c xác nh b i s các l nh c th c hi n trong m t máy tính lý t ng. Ví d : Khi ta nói th i gian th c hi n c a m t ch ng trình là T(n) = Cn thì có ngh a là ch ng trình y c n Cn ch th th c thi. 2.1.2. ph c t p c a gi i thu t Gi s ta có hai gi i thu t P1 và P2 v i th i gian th c hi n t ng ng là T1(n) = 100n (v i t su t t ng là n2) và T2(n) = 5n3 (v i t su t t ng là n 3). Gi i thu t nào s 2
th c hi n nhanh h n? Câu tr l i ph thu c vào kích th c d li u vào. V i n < 20 thì
P2 s nhanh h n P1 (T2<T1), do h s c a 5n3 nh h n h s c a 100n2 (5<100). Nh ng khi n > 20 thì ng c l i do s m c a 100n2 nh h n s m c a 5n3 (2<3). ây chúng ta ch nên quan tâm n tr ng h p n>20 vì khi n<20 thì th i gian th c hi n c a c P1 và P2 u không l n và s khác bi t gi a T1 và T2 là không áng k . Nh v y m t cách h p lý là ta xét t su t t ng c a hàm th i gian th c hi n ch ng trình thay vì xét chính b n thân th i gian th c hi n. Cho m t hàm T(n), T(n) g i là có ph c t p f(n) n u t n t i các h ng C, n0 sao cho T(n) Cf(n) v i m i n n0 (t c là T(n) có t su t t ng là f(n)) và kí hi u T(n) là O(f(n)) ( c là “ô c a f(n)”) Ví d T(n)= (n+1)2 có t su t t ng là n2 nên T(n)= (n+1) 2 là O(n2) Chú ý: O(C.f(n))=O(f(n)) v i C là h ng s . Ð c bi t O(C)=O(1) Nói cách khác ph c t p tính toán c a gi i thu t là m t hàm ch n trên c a hàm th i gian. Vì h ng nhân t C trong hàm ch n trên không có ý ngh a nên ta có th b qua vì v y hàm th hi n ph c t p có các d ng th ng g p sau: log2n, n, nlog2n, n2, n 3, 2n, n n!, n . Ba hàm cu i cùng ta g i là d ng hàm m , các hàm khác g i là hàm a th c. M t
Ch ng 2. Phân tích và ánh giá gi i thu t Trang 16
u trúc d li u và gi i thu t gi i thu t mà th i gian th c hi n có ph c t p là m t hàm a th c thì ch p nh n c t c là có th cài t th c hi n, còn các gi i thu t có ph c t p hàm m thì ph i tìm cách c i ti n gi i thu t. Vì ký hi u log2n th ng có m t trong ph c t p nên trong khôn kh tài li u này, ta s dùng logn thay th cho log2n v i m c ích duy nh t là cho g n trong cách vi t. Khi nói n ph c t p c a gi i thu t là ta mu n nói n hi u qu c a th i gian th c hi n c a ch ng trình nên ta có th xem vi c xác nh th i gian th c hiên c a ch ng trình chính là xác nh ph c t p c a gi i thu t.
2.2. Xác nh ph c t p tính toán c a gi i thu t
Cách tính ph c t p c a m t gi i thu t b t k là m t v n không n gi n. Tuy nhiên ta có th tuân theo m t s nguyên t c sau: 2.2.1. Quy t c t ng N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1 và P2; và T1(n)=O(f(n)), T2(n)=O(g(n)) thì th i gian th c hi n c a n hai ch ng trình ó n i ti p nhau là T(n)=O(max(f(n),g(n))) Ch ng minh: T1(n) = O(f(n)) nên ∃ n1 và c1 T1(n) c1.f(n) v i ∀ n n1. T2(n) = O(g(n)) nên ∃ n2 và c2 T2(n) c2.g(n) v i ∀ n n2. Ch n n0 = max(n1, n2) và c = max(c1, c2) ta có: V i∀n n0: T1(n) + T2(n) c1.f(n) + c2.g(n) c.f(n) + c.g(n) c.(f(n) + g(n)) 2c.(max(f(n), g(n))). V y T1(n) + T2(n) = O(max(f(n), g(n))). Ví d : Trong m t ch ng trình có 3 b c th c hi n mà th i gian th c hi n t ng c l n l t là O(n2), O(n3) và O(nlog2n) thì th i gian th c hi n 2 b c u là O(max (n2, n3)) = O(n3). Khi ó th i gian th c hi n ch ng trình s là O(max(n3,nlog2n)) = O(n3). 2.2.2. Quy t c nhân N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1và P2 và T1(n) = O(f(n)), T2(n) = O(g(n)) thì th i gian th c hi n c a n hai n ch ng trình ó l ng nhau là T(n) = O(f(n).g(n)) Ch ng minh: Th i gian th c hi n T1(n) l n n ch ng trình P2 s là T1(n).T2(n). Theo nh ngh a: ∃ c1 và n1 T1(n) c1(f(n)) v i ∀ n n1 ∃ c2 và n2 T2(n) c2(g(n)) v i ∀ n n2 V yv i∀n max(n1, n2) ta có T1(n).T2(n) c1.c2(g(n).f(n)) V y T(n) = O(f(n).g(n)). Ch ng 2. Phân tích và ánh giá gi i thu t Trang 17 u trúc d li u và gi i thu t 2.2.3. M t s tính ch t Theo nh ngh a v ph c t p tính toán ta có m t s tính ch t: − V i P(n) là m t a th c b c k thì O(P(n)) = O(nk). Vì th , m t thu t toán có ph c t p c p a th c, ng i ta th ng ký hi u là O(nk) − V i a và b là hai c s tu ý và f(n) là m t hàm d ng thì logaf(n) = logab.logbf(n). T c là: O(logaf(n)) = O(logbf(n)). V y v i m t thu t toán có ph c t p c p logarit c a f(n), ng i ta ký hi u là O(logf(n)) mà không c n ghi s c a logarit. − N u m t thu t toán có ph c t p là h ng s , t c là th i gian th c hi n không ph thu c vào kích th c d li u vào thì ta ký hi u ph c t p tính toán c a thu t toán ó là O(1). − M t gi i thu t có c p là các hàm nh 2 n, n!, nn c g i là m t gi i thu t có ph c t p hàm m . Nh ng gi i thu t nh v y trên th c t th ng có t c r t ch m. Các gi i thu t có c p là các hàm a th c ho c nh h n hàm a th c thì th ng ch p nh n c. − Không ph i lúc nào m t gi i thu t c p O(n2) c ng t t h n gi i thu t c p O(n3). B i n u nh gi i thu t c p O(n2) có th i gian th c hi n là 1000n 2, còn gi i thu t c p O(n3) l i ch c n th i gian th c hi n là n3, thì v i n < 1000, rõ ràng gi i thu t O(n3) t t h n gi i thu t O(n2). Trên ây là xét trên ph ng di n tính toán lý thuy t nh ngh a gi i thu t này "t t" h n gi i thu t kia, khi ch n m t thu t toán gi i m t bài toán th c t ph i có m t s m m d o nh t nh. − C ng theo nh ngh a v ph c t p tính toán: + M t thu t toán có c p O(1) c ng có th vi t là O(logn) + M t thu t toán có c p O(logn) c ng có th vi t là O(n) + M t thu t toán có c p O(n) c ng có th vi t là O(n.logn) + M t thu t toán có c p O(n.logn) c ng có th vi t là O(n2) + M t thu t toán có c p O(n2) c ng có th vi t là O(n3) + M t thu t toán có c p O(n3) c ng có th vi t là O(2n) V y ph c t p tính toán c a m t thu t toán có nhi u cách ký hi u, thông th ng ng i ta ch n c p th p nh t có th , t c là ch n ký pháp O(f(n)) v i f(n) là m t hàm t ng ch m nh t theo n. i ây là m t s hàm s hay dùng ký hi u ph c t p tính toán và b ng giá tr c a chúng ti n theo dõi s t ng c a hàm theo i s n.
Th i gian th c hi n c a các thu t toán có ph c t p khác nhau:
Ch ng 2. Phân tích và ánh giá gi i thu t Trang 18 u trúc d li u và gi i thu t
O(logn) 10-7 giây
O(n) 10-6 giây O(nlogn) 10-5 giây O(n2) 10-4 giây O(n6) 3 phút O(2n) 1014 m O(n!) 10142 m 2.2.4. Phép toán tích c c D a vào nh ng nh n xét ã nêu trên v các quy t c khi ánh giá th i gian th c hi n gi i thu t, ta ch c n chú ý n m t phép toán mà ta g i là phép toán tích c c trong m t n ch ng trình. ó là m t phép toán trong m t n ch ng trình mà s l n th c hi n không ít h n các phép toán khác. Xét hai o n ch ng trình tính ex b ng công th c g n úng:
i x và n cho tr c.
Ch ng trình 1: Tính riêng t ng s Ch ng trình 2: Tính s h ng sau
h ng r i c ng l i qua s h ng tr c void main() { void main() { int i, j, n; int i, n; float x, p, S; float x, p, S; printf("nhap x:"); scanf("%f",&x); printf("nhap x:"); scanf("%f",&x); printf("nhap n:"); scanf("%d",&n); printf("nhap n:"); scanf("%d",&n); S=0; S=1; p=1; for (i = 0; i <= n; i++) { for (i = 1; i <= n; i++) { p = 1; p = p * x / i; for (j = 1; j <= i; j++) S = S + p; p = p * x / j; } S = S + p; printf("exp(%f)=%f",x,S); } } printf("exp(%f)=%f",x,S); Phép toán tích c c là p := p * x / i. } S l n th c hi n: n. Phép toán tích c c là p := p * x / j; V y ph c t p tính toán c a thu t S l n th c hi n: 0+1+…+n=n(n-1)/2 l n. toán là O(n)
V y ph c t p tính toán c a thu t toán là
O(n2)
Ch ng 2. Phân tích và ánh giá gi i thu t Trang 19
u trúc d li u và gi i thu t
2.3. ph c t p tính toán v i tình tr ng d li u vào
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 là d li u vào có cùng kích th c nh ng th i gian th c hi n ch ng trình có th khác nhau. Ch ng h n ch ng trình s p x p dãy s nguyên t ng d n, khi ta cho vào dãy có th t thì th i gian th c hi n khác v i khi ta cho vào dãy ch a có th t , ho c khi ta cho vào m t dãy ã có th t t ng thì th i gian th c hi n c ng khác so v i khi ta cho vào m t dãy ã có th t gi m. Vì v y th ng ta coi T(n) là th i gian th c hi n ch ng trình trong tr ng h p x u nh t trên d li u vào có kích th c n, t c là: T(n) là 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ó cùng kích th c n.
2.4. Chi phí th c hi n thu t toán
Khái ni m ph c t p tính toán t ra là ánh giá chi phí th c hi n m t gi i thu t v m t th i gian. Nh ng chi phí th c hi n gi i thu t còn có r t nhi u y u t khác n a: không gian b nh ph i s d ng là m t ví d . Tuy nhiên, trên ph ng di n phân tích lý thuy t, ta ch có th xét t i v n th i gian b i vi c xác nh các chi phí khác nhi u khi r t m h và ph c t p. i v i ng i l p trình thì khác, m t thu t toán v i ph c t p dù r t th p c ng s là vô d ng n u nh không th cài t c trên máy tính, chính vì v y khi b t tay cài t m t thu t toán, ta ph i bi t cách t ch c d li u m t cách khoa h c, tránh lãng phí b nh không c n thi t. Có m t quy lu t t ng i khi t ch c d li u: Ti t ki m c b nh thì th i gian th c hi n th ng s ch m h n và ng c l i. Bi t cân i, dung hoà hai y u t ó là m t k n ng c n thi t c a ng i l p trình, mà k ng ó l i ch t kinh nghi m m i có ch không th h c c qua sách v .