P. 1
Chuong 2 - Do Phuc Tap Tinh Toan Cua Giai Thuat

Chuong 2 - Do Phuc Tap Tinh Toan Cua Giai Thuat

|Views: 373|Likes:
Được xuất bản bởithanhthangbmt

More info:

Published by: thanhthangbmt on Jan 03, 2010
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/26/2013

pdf

text

original

Câu trúc dû liêu và giai thuât

Chuong 2. Phân tích và dánh giá giai thuât Trang 16
Chuong 2. Phân tích và dánh giá giai thuât
2.1. Dô phúc tap tính toán và các ký pháp dê dánh giá
2.1.1. Thòi gian thuc hiên chuong trình
Môt phuong pháp dê xác dinh hiêu qua thoi gian thuc hiên cua môt giai thuât là lâp
trình nó và do luong thoi gian thuc hiên cua hoat dông trên môt máy tính xác dinh dôi
voi tâp hop duoc chon loc các du liêu vào.
Thoi gian thuc hiên không chi phu thuôc vào giai thuât mà còn phu thuôc vào tâp
các chi thi cua máy tính, chât luong cua máy tính và ki xao cua nguoi lâp trình. Su thi
hành cung có thê diêu chinh dê thuc hiên tôt trên tâp dác biêt các du liêu vào duoc chon.
Ðê vuot qua các tro ngai này, các nhà khoa hoc máy tính dã châp nhân tính phuc tap cua
thoi gian duoc tiêp cân nhu môt su do luong co ban su thuc thi cua giai thuât. Thuât ngu
tính hiêu qua së dê câp dên su do luong này và dác biêt dôi voi su phuc tap thoi gian
trong truong hop xâu nhât.
Thoi gian thuc hiên môt chuong trình là môt hàm cua kích thuoc du liêu vào, ký
hiêu T(n) trong dó n là kích thuoc (dô lon) cua du liêu vào.
Ví du: Chuong trình tính tông cua n sô có thoi gian thuc hiên là T(n) = Cn trong dó
C là môt háng sô.
Ðon vi cua T(n) không phai là don vi do thoi gian bình thuong nhu gio, phút giây...
mà thuong duoc xác dinh boi sô các lênh duoc thuc hiên trong môt máy tính lý tuong.
Ví du: Khi ta nói thoi gian thuc hiên cua môt chuong trình là T(n) = Cn thì có
nghia là chuong trình ây cân Cn chi thi thuc thi.
2.1.2. Dô phúc tap cua giai thuât
Gia su ta có hai giai thuât P1 và P2 voi thoi gian thuc hiên tuong ung là T1(n) =
100n
2
(voi ty suât táng là n
2
) và T2(n) = 5n
3
(voi ty suât táng là n
3
). Giai thuât nào së
thuc hiên nhanh hon? Câu tra loi phu thuôc vào kích thuoc du liêu vào. Voi n < 20 thì
P2 së nhanh hon P1 (T2<T1), do hê sô cua 5n
3
nho hon hê sô cua 100n
2
(5<100). Nhung
khi n > 20 thì nguoc lai do sô mu cua 100n
2
nho hon sô mu cua 5n
3
(2<3). O dây chúng
ta chi nên quan tâm dên truong hop n>20 vì khi n<20 thì thoi gian thuc hiên cua ca P1
và P2 dêu không lon và su khác biêt giua T1 và T2 là không dáng kê.
Nhu vây môt cách hop lý là ta xét ty suât táng cua hàm thoi gian thuc hiên chuong
trình thay vì xét chính ban thân thoi gian thuc hiên.
Cho mot hàm T(n), T(n) goi là có do phuc tap f(n) nêu ton tai các háng C, n
0
sao
cho T(n) < Cf(n) voi moi n > n
0
(tuc là T(n) có tv suat tàng là f(n)) và kí hiêu T(n) là
O(f(n)) (doc là “ô cua f(n)”)
Ví du T(n)= (n+1)
2
có ty 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)) voi C là háng sô. Ðác biêt O(C)=O(1)
Nói cách khác dô phuc tap tính toán cua giai thuât là môt hàm chán trên cua hàm
thoi gian. Vì háng nhân tu C trong hàm chán trên không có ý nghia nên ta có thê bo qua
vì vây hàm thê hiên dô phuc tap có các dang thuong 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 goi là dang hàm mù, các hàm khác goi là hàm da thuc. Môt
Câu trúc dû liêu và giai thuât
Chuong 2. Phân tích và dánh giá giai thuât Trang 17
giai thuât mà thoi gian thuc hiên có dô phuc tap là môt hàm da thuc thì châp nhân duoc
tuc là có thê cài dát dê thuc hiên, còn các giai thuât có dô phuc tap hàm mu thì phai tìm
cách cai tiên giai thuât.
Vì ký hiêu log
2
n thuong có mát trong dô phuc tap nên trong khôn khô tài liêu này,
ta së dùng logn thay thê cho log
2
n voi muc dích duy nhât là dê cho gon trong cách viêt.
Khi nói dên dô phuc tap cua giai thuât là ta muôn nói dên hiêu qua cua thoi gian
thuc hiên cua chuong trình nên ta có thê xem viêc xác dinh thoi gian thuc hiên cua
chuong trình chính là xác dinh dô phuc tap cua giai thuât.
2.2. Xác dinh dô phúc tap tính toán cua giai thuât
Cách tính dô phuc tap cua môt giai thuât bât ky là môt vân dê không don gian. 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à thoi gian thuc hiên cua hai doan chuong trình P1 và P2; và
T1(n)=O(f(n)), T2(n)=O(g(n)) thì thoi gian thuc hiên cua doan hai chuong trình dó 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à c1dê T1(n) < c1.f(n) voi ∀ n > n1.
T2(n) = O(g(n)) nên ∃ n2 và c2 dê T2(n) < c2.g(n) voi ∀ n > n2.
Chon n0 = max(n1, n2) và c = max(c1, c2) ta có:
Voi ∀ 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í du: Trong môt chuong trình có 3 buoc thuc hiên mà thoi gian thuc hiên tung
buoc lân luot là O(n
2
), O(n
3
) và O(nlog
2
n) thì thoi gian thuc hiên 2 buoc dâu là
O(max (n
2
, n
3
)) = O(n
3
). Khi dó thoi gian thuc hiên chuong 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à thoi gian thuc hiên cua hai doan chuong trình P1và P2 và
T1(n) = O(f(n)), T2(n) = O(g(n)) thì thoi gian thuc hiên cua doan hai doan chuong trình
dó long nhau là T(n) = O(f(n).g(n))
Chúng minh:
Thoi gian thuc hiên T1(n) lân doan chuong trình P2 së là T1(n).T2(n). Theo dinh
nghia:
∃ c1 và n1 dê T1(n) < c1(f(n)) voi ∀ n > n1
∃ c2 và n2 dê T2(n) < c2(g(n)) voi ∀ n > n2
Vây voi ∀ 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)).
Câu trúc dû liêu và giai thuât
Chuong 2. Phân tích và dánh giá giai thuât Trang 18
2.2.3. Môt sô tính chât
Theo dinh nghia vê dô phuc tap tính toán ta có môt sô tính chât:
− Voi P(n) là môt da thuc bâc k thì O(P(n)) = O(n
k
). Vì thê, môt thuât toán có
dô phuc tap câp da thuc, nguoi ta thuong ký hiêu là O(n
k
)
− Voi a và b là hai co sô tuy ý và f(n) là môt hàm duong thì log
a
f(n) =
log
a
b.log
b
f(n). Tuc là: O(log
a
f(n)) = O(log
b
f(n)). Vây voi môt thuât toán có dô
phuc tap câp logarit cua f(n), nguoi ta ký hiêu là O(logf(n)) mà không cân ghi
co sô cua logarit.
− Nêu môt thuât toán có dô phuc tap là háng sô, tuc là thoi gian thuc hiên không
phu thuôc vào kích thuoc du liêu vào thì ta ký hiêu dô phuc tap tính toán cua
thuât toán dó là O(1).
− Môt giai thuât có câp là các hàm nhu 2
n
, n!, n
n
duoc goi là môt giai thuât có dô
phuc tap hàm mu. Nhung giai thuât nhu vây trên thuc tê thuong có tôc dô rât
châm. Các giai thuât có câp là các hàm da thuc hoác nho hon hàm da thuc thì
thuong châp nhân duoc.
− Không phai lúc nào môt giai thuât câp O(n
2
) cung tôt hon giai thuât câp O(n
3
).
Boi nêu nhu giai thuât câp O(n
2
) có thoi gian thuc hiên là 1000n
2
, còn giai
thuât câp O(n
3
) lai chi cân thoi gian thuc hiên là n
3
, thì voi n < 1000, rõ ràng
giai thuât O(n
3
) tôt hon giai thuât O(n
2
). Trên dây là xét trên phuong diên tính
toán lý thuyêt dê dinh nghia giai thuât này "tôt" hon giai thuât kia, khi chon
môt thuât toán dê giai môt bài toán thuc tê phai có môt su mêm deo nhât dinh.
− Cung theo dinh nghia vê dô phuc tap tính toán:
+ Môt thuât toán có câp O(1) cung có thê viêt là O(logn)
+ Môt thuât toán có câp O(logn) cung có thê viêt là O(n)
+ Môt thuât toán có câp O(n) cung có thê viêt là O(n.logn)
+ Môt thuât toán có câp O(n.logn) cung có thê viêt là O(n
2
)
+ Môt thuât toán có câp O(n
2
) cung có thê viêt là O(n
3
)
+ Môt thuât toán có câp O(n
3
) cung có thê viêt là O(2
n
)
Vây dô phuc tap tính toán cua môt thuât toán có nhiêu cách ký hiêu, thông
thuong nguoi ta chon câp thâp nhât có thê, tuc là chon ký pháp O(f(n)) voi f(n) là môt
hàm táng châm nhât theo n.
Duoi dây là môt sô hàm sô hay dùng dê ký hiêu dô phuc tap tính toán và bang giá
tri cua chúng dê tiên theo dõi su táng cua hàm theo dôi sô n.
Thòi gian thuc hiên cua các thuât toán có dô phúc tap khác nhau:
Câu trúc dû liêu và giai thuât
Chuong 2. Phân tích và dánh giá giai thuât Trang 19
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
nám
O(n!)
10
142
nám
2.2.4. Phép toán tích cuc
Dua vào nhung nhân xét dã nêu o trên vê các quy tác khi dánh giá thoi gian thuc
hiên giai thuât, ta chi cân chú ý dên môt phép toán mà ta goi là phép toán tích cuc trong
môt doan chuong trình. Dó là môt phép toán trong môt doan chuong trình mà sô lân thuc
hiên không ít hon các phép toán khác.
Xét hai doan chuong trình tính e
x
báng công thuc gân dúng:
Chuong trình 1: Tính riêng tung sô
hang rôi công lai
void main() {
int i, j, n;
float x, p, S;
printf("nhap x:"); scanf("%f",&x);
printf("nhap n:"); scanf("%d",&n);
S=0;
for (i = 0; i <= n; i++) {
p = 1;
for (j = 1; j <= i; j++)
p = p * x / j;
S = S + p;
}
printf("exp(%f)=%f",x,S);
}
Phép toán tích cuc là p := p * x / j;
Sô lân thuc hiên: 0+1+…+n=n(n-1)/2 lân.
Vây dô phuc tap tính toán cua thuât toán là
O(n
2
)
Chuong trình 2: Tính sô hang sau
qua sô hang truoc
void main() {
int i, n;
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++) {
p = p * x / i;
S = S + p;
}
printf("exp(%f)=%f",x,S);
}
Phép toán tích cuc là p := p * x / i.
Sô lân thuc hiên: n.
Vây dô phuc tap tính toán cua thuât
toán là O(n)
voi x và n cho truoc.
Câu trúc dû liêu và giai thuât
Chuong 2. Phân tích và dánh giá giai thuât Trang 20
2.3. Dô phúc tap tính toán vói tình trang dü liêu vào
Thoi gian thuc hiên chuong trình không chi phu thuôc vào kích thuoc mà còn phu
thuôc vào tính chât cua du liêu vào. Nghia là du liêu vào có cùng kích thuoc nhung thoi
gian thuc hiên chuong trình có thê khác nhau. Cháng han chuong trình sáp xêp dãy sô
nguyên táng dân, khi ta cho vào dãy có thu tu thì thoi gian thuc hiên khác voi khi ta cho
vào dãy chua có thu tu, hoác khi ta cho vào môt dãy dã có thu tu táng thì thoi gian thuc
hiên cung khác so voi khi ta cho vào môt dãy dã có thu tu giam.
Vì vây thuong ta coi T(n) là thoi gian thuc hiên chuong trình trong truong hop xâu
nhât trên du liêu vào có kích thuoc n, tuc là: T(n) là thoi gian lon nhât dê thuc hiên
chuong trình dôi voi moi du liêu vào có cùng kích thuoc n.
2.4. Chi phí thuc hiên thuât toán
Khái niêm dô phuc tap tính toán dát ra là dê dánh giá chi phí thuc hiên môt giai
thuât vê mát thoi gian. Nhung chi phí thuc hiên giai thuât còn có rât nhiêu yêu tô khác
nua: không gian bô nho phai su dung là môt ví du. Tuy nhiên, trên phuong diên phân
tích lý thuyêt, ta chi có thê xét toi vân dê thoi gian boi viêc xác dinh các chi phí khác
nhiêu khi rât mo hô và phuc tap. Dôi voi nguoi lâp trình thì khác, môt thuât toán voi dô
phuc tap dù rât thâp cung së là vô dung nêu nhu không thê cài dát duoc trên máy tính,
chính vì vây khi bát tay cài dát môt thuât toán, ta phai biêt cách tô chuc du liêu môt cách
khoa hoc, tránh lãng phí bô nho không cân thiêt. Có môt quy luât tuong dôi khi tô chuc
du liêu: Tiêt kiêm duoc bô nho thì thoi gian thuc hiên thuong së châm hon và nguoc lai.
Biêt cân dôi, dung hoà hai yêu tô dó là môt kÿ náng cân thiêt cua nguoi lâp trình, mà kÿ
náng dó lai chi tu kinh nghiêm moi có chu không thê hoc duoc qua sách vo.

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->