Tải bản đầy đủ (.pdf) (14 trang)

Kỹ thuật phân tích giải thuật

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (754.92 KB, 14 trang )

Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 1
1. Mc tiêu
2. Kin thc c bn cn có  hc chng này
3. Tài liu tham kho có liên quan n chng
4. 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 và  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 các chng trình  quy.
5. Vn  nghiên cu ca trang k tip
Trong chng này chúng ta s nghiên cu các vn  sau:
· S cn thit phi phân tích các gii thut.
· Thi gian thc hin ca chng trình.
· T sut tng và  phc tp ca gii thut.
· Tính thi gian thc hin ca chng trình.
· Phân tích các chng trình  quy.
I.1- S CN THIT PHI PHÂN TÍCH GII THUT
Trong khi gii mt bài toán chúng ta có th có mt s gii thut khác nhau, vn  là cn phi
ánh giá các gii thut ó  la chn mt gii thut tt (nht). Thông thng thì ta s cn c vào các
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 chúng ta có th cài t gii thut ó
và cho thc hin trê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 ra thì cách làm này không chc chn bi vì có th gii thut úng vi tt c các b d liu
chúng ta ã th nhng li sai vi mt b d liu nào ó. V li cách làm này ch phát hin ra gii thut
sai ch cha chng minh c là nó ú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 này không n gin và do vy chúng ta s không  cp n ây.


Khi chúng ta vit mt chng trình  s dng mt vài ln thì yêu cu (2) là 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 vì dù sao thì chng trình ó cng ch s dng mt vài ln mà thôi.
Tuy nhiên khi mt chng trình c s dng nhiu ln thì thì yêu cu tiït kim thi gian
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 2
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à khi thc hin cn d
liu nhp ln do ó yêu cu (3) sc xem xét mt cách k càng. Ta gi nó là 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.2- n vo thi gian thc hin.
I.2.3- Thi gian thc hin trong 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à lp trình nó và o
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
 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
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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
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
i s phc tp thi gian trong 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 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 1-1: 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à
t hng s.
Thi gian thc hin chng trình là mt hàm không âm, tc là T(n) ≥0 ∀n≥0.
I.2.2- n vo thi gian thc hin.
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 1-2: 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.
I.2.3- Thi gian thc hin trong trng hp xu nht.
Nói chung thì 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
 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.
I.3- T SUT TNG VÀ  PHC TP CA GII THUT
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 3
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ó  sut tng (growth rate) f(n) nu tn ti các hng s c
và n
0
sao cho T(n)  f(n) vi mi n  n
0
.
Ta có th chng minh c rng “Cho mt hàm không âm T(n) bt k, ta luôn tìm c t
sut tng f(n) ca nó”.
Ví d 1-3: Gi s T(0) = 1, T(1) = 4 và tng quát T(n) = (n+1)
2
. t n

0
= 1 và c = 4 thì vi mi
n  1 chúng ta d dàng chng minh rng T(n) = (n+1)
2
 4n
2
vi mi n  1, tc là t sut tng ca T(n)
là n
2
.
Ví d 1-4: T sut tng ca hàm T(n) = 3n
3
+ 2n
2
là n
3
. Thc vy, cho n
0
= 0 và c = 5 ta d
dàng chng minh rng vi mi n  0 thì 3n
3
+ 2n
2
 5n
3
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 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
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
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 1-5: 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ì
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
p có các dng thng gp sau: log
2
n, n, nlog
2
n, n
2
, n
3
, 2
2
, 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 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.
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.
I.4- CÁCH TÍNH  PHC TP
I.4.1- Qui tc cng
I.4.2- Qui tc nhân
Collected by The_Wall (11/10/2005)

Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 4
I.4.3- Qui tc tng quát  phân tích mt chng trình
I.4.4-  phc tp ca chng trình có gi chng trình con không  qui
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:
I.4.1- Qui tc c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 ó i tip nhau là
T(n)=O(max(f(n),g(n)))
Ví d 1-6: Lnh gán x:=15 tn mt hng thi gian hay O(1)
Lnh c d liu READ(x) tn mt hng thi gian hay O(1)
Vy thi gian thc hin c hai lnh trên ni tip nhau là O(max(1,1))=O(1)
I.4.2- Qui 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 ó ng nhau là T(n) =
O(f(n).g(n))
I.4.3- Qui tc tng quát  phân tích mt chng trình:
- Thi gian thc hin ca mi lnh gán, READ, WRITE là O(1)
- Thi gian thc hin ca mt chui tun t các lnh c xác nh bng qui tc cng. Nh
y thi gian này là thi gian thi hành mt lnh nào ó lâu nht trong chui lnh.
- Thi gian thc hin cu trúc IF là thi gian ln nht thc hin lnh sau THEN hoc sau ELSE
và thi gian kim tra u kin. Thng thi gian kim tra u kin là O(1).
- Thi gian thc hin vòng lp là tng (trên tt c các ln lp) thi gian thc hin thân vòng
p. Nu thi gian thc hin than vòng lp không i thì thi gian thc hin vòng lp là tích ca s ln
p vi thi gian thc hin thân vòng lp.
Ví d 1-7: Tính thi gian thc hin ca n chng trình
procedure Bubble (var a: array[1..n] of integer);
var i,j,temp: integer;
begin
{1} for i:=1 to n-1 do

{2} for j:=n downto i+1 do
{3} if a[j-1]>a[j] then begin
{ i ch a[i], a[j] }
{4} temp:=a[j-1];
{5} a[j-1]:=a[j];
{6} a[j]:=temp; end;
end;
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................ Trang 5
C ba lnh i ch {4} {5} {6} tn O(1) thi gian, do ó lnh {3} tn O(1).
Vòng lp {2} thc hin (n-i) ln, mi ln O(1) do ó vòng lp {2} tn O((n-i).1)=O(n-i).
Vòng lp {1} lp (n-1) ln vy  phc tp ca gii thut là:
I.4.4-  phc tp ca chng trình có gi chng trình con không  qui
Nu chúng ta có mt chng trình vi các chng trình con không  quy,  tính thi gian
thc hin ca chng trình, trc ht chúng ta tính thi gian thc hin ca các chng trình con không
i các chng trình con khác. Sau ó chúng ta tính thi gian thc hin ca các chng trình con ch
i các chng trình con mà thi gian thc hin ca chúng ã c tính. Chúng ta tip tc quá trình
ánh giá thi gian thc hin ca mi chng trình con sau khi thi gian thc hin ca tt c các
chng trình con mà nó gi ã c ánh giá. Cui cùng ta tính thi gian cho chng trình chính.
Gi s ta cô mt h thng các chng trình gi theo s sau:
Chng trình A gi hai chng trình con là B và C, chng trình B gi hai chng trình con là
B1 và B2, chng trình B1 gi hai chng trình con là B11 và B12.
 tính thi gian thc hin ca A, ta tính theo các bc sau:
- Tính thi gian thc hin ca C, B2, B11 và B12.
- Tính thi gian thc hin ca B1.
- Tính thi gian thc hin ca B.
- Tính thi gian thc hin ca A.
Ví d 1-8: Ta có th vit li chng trình sp xp bubble nh sau:
procedure Swap (var x, y: integer);
var temp: integer;

begin
temp := x;
x := y;
y := temp;
end;

×