You are on page 1of 5

u trúc d li u và gi i thu t

Ch ng 2.

Phân tích và ánh giá gi i thu t

2.1. ph c t p tính toán và các ký pháp ánh giá

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 i t p h 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.

li u vào, ký

hi

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ó

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

u T(n) trong ó n là kích th c ( l n) c a d li u vào.

ngh a là ch ng

2.1.2. ph c t p c a gi i thu t

trình y c n Cn ch th th c thi.

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 2 (v i t su t t ng là n 2 ) và T2(n) = 5n 3 (v i t su t t ng là n 3 ). Gi i thu t nào s

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 5n 3 nh h n h s c a 100n 2 (5<100). Nh ng khi n > 20 thì ng c l i do s m c a 100n 2 nh h n s m c a 5n 3 (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, n 0 sao cho T(n) Cf(n) v i m i n n 0 (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à n 2 nên T(n)= (n+1) 2 là O(n 2 )

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 y hàm th hi n ph c t p có các d ng th ng g p sau: log 2 n, n, nlog 2 n, n 2 , 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

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 log 2 n 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 log 2 n 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(n 2 ), O(n 3 ) và O(nlog 2 n) thì th i gian th c hi n 2 b c u là O(max (n 2 , n 3 )) = O(n 3 ). Khi ó th i gian th c hi n ch ng trình s là O(max(n 3 ,nlog 2 n)) = O(n 3 ).

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 y

v 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)).

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(n k ). 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(n k )

- V i a và b là hai c s tu ý và f(n) là m t hàm d ng thì log a f(n) = log a b.log b f(n). T c là: O(log a f(n)) = O(log b f(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!, n n 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.

nào m t gi i thu t c p O(n 2 ) c ng t t h n gi i thu t c p O(n 3 ).

B i n u nh gi i thu t c p O(n 2 ) có th i gian th c hi n là 1000n 2 , còn gi i thu t c p O(n 3 ) l i ch c n th i gian th c hi n là n 3 , thì v i n < 1000, rõ ràng gi i thu t O(n 3 ) t t h n gi i thu t O(n 2 ). 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.

- Không ph i lúc

- 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(n 2 )

+ M t thu t toán có c p O(n 2 ) c ng có th vi t là O(n 3 )

+ M t thu t toán có c p O(n 3 ) c ng có th vi t là O(2 n )

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à 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.

ch n ký pháp O(f(n)) v i f(n) là m t

i s n. ch n ký pháp O(f(n)) v i f(n) là m t Th i

Th i gian th c hi n c a các thu t toán có ph c t p khác nhau:

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(n 2 )

10

-4 giây

O(n 6 )

3 phút

O(2 n )

10

14 m

O(n!)

10

142 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 e x b ng công th c g n úng:

trình tính e x b ng công th c g n úng: i x và n

i x và n cho tr c.

Ch ng trình 1: Tính riêng t ng s h ng r i c ng l i

void main() {

int

float x, p, S;

printf("nhap x:"); scanf("%f",&x);

printf("nhap n:"); scanf("%d",&n);

S=0;

for (i = 0; i <= n; i++) {

i, j, n;

}

p

for (j = 1; j <= i; j++)

= 1;

p = p * x / j;

S

= S + p;

printf("exp(%f)=%f",x,S);

}

Phép toán tích c c là p := p * x / j;

S l n th c hi n: 0+1+…+n=n(n-1)/2 l n.

V y ph c t p tính toán c a thu t toán là O(n 2 )

Ch ng trình 2: Tính s h ng sau qua s h ng tr c

void main() {

int

float x, p, S;

printf("nhap x:"); scanf("%f",&x);

printf("nhap n:"); scanf("%d",&n);

S=1; p=1;

for (i = 1; i <= n; i++) {

i, n;

}

p

S

= p * x / i;

= S + p;

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.

V y

toán là O(n)

ph c t p tính toán c a

thu t

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 .