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

Ch ng 2. Phân tích và ánh giá gi i thu t Trang 20

You might also like