You are on page 1of 12

nh gi phc tp ca thut ton (thut gii)

Posted on 03/12/2010 by thanhcuong1990

Khi bn lp trnh bn c tng suy ngh rng ti sao li c nhng chng trnh chy nhanh m li c nhng chng trnh cng chc nng li chy chm v ngn ti nguyn my tnh ca bn nhiu hn. Bn c gng tm cch ci tin cc thut gii ca mnh chng trnh chy nhanh hn, vy n nhanh n c no. Bi vit ny s trang b cho bn mt s kin thc nh gi phc tp thut ton ca bn. 1. Tnh hiu qu ca thut gii: gii quyt mt vn thng c nhiu cch. gii mt bi ton, c th c nhiu cch khc nhau. Cn phi la chn cch tt nht theo mt ngha no . Th no l mt thut gii tt. C th nu hai tiu chun sau: - n gin, d hiu, d lp trnh. (1) - Cho li gii nhanh, dng t ti nguyn my tnh. (2) Tht khng may l thng khng th m bo ng thi c 2 tiu chun . Phi ty theo trng hp m p dng tiu chun th nht hay th 2. - Nu ch dng thut gii cho mt vi ln th tiu chun 1 quan trng hn tiu chun th 2. - Tri li, nu y l mt bi ton rt ph bin, thut gii s cn c dng nhiu ln th tiu chun 2 quan trng hn tiu chun 1. Mc ch ca vic nghin cu cu trc d liu v gii thut chnh l xy dng cc chng trnh hiu qu. Tiu chun 2 chnh l tnh hiu qu ca thut gii. Mt thut gii c gi l hiu qu nu n tit kim c khng gian v thi gian. Tit kim khng gian l chim dng t b nh trong thi gian thc hin. Tit kim thi gian l chy nhanh. Tiu chun thi gian thc hin nhanh l quan trng hng u. nh gi phc tp ca thut gii l nh gi thi gian thc hin n. Bi ton khng khng phi l bi ton cha c li gii m l bi ton m vic gii n mt mt khong thi gian qu di, n mc khng chp nhn c.

2. Ti sao thut gii cn phi c tnh hiu qu:


My tnh ngy nay c tc ln ti hng trm triu php tnh trn mt giy. Liu vic ci tin thut gii gim bt i mt s php tnh ton c ngha g khng? V d sau y cho thy tm quan trng ca mt thut gii hiu qu. Xt bi ton tnh nh thc cp n. Gi s M = aij l ma trn vung n x m. Cn tnh nh thc det(M). a. Thut ton quy: - Nu n = 1 th det(M) = a11 .

- Tri li, n > 1 s dng cng thc khi trin theo nh thc hng a v nh thc cp thp hn. ( y chng ta s khng cp n cch tnh ton nh th no trong v d ny). Gii thut ny s cn n n.(n-1).(n-2) 1 = n! php tnh nhn. M n! l mt s rt ln ngay khi c n l khng ln lm. S cn n hng triu nm tnh mt nh thc cp 100. R rng l khng th chp nhn mt thut ton nh th. b. Thut ton s dng Gauss-Jordan: - a ma trn v dng ng cho. - Tnh nh thc bng tch cc phn t trn ng cho. Dng thut ton ny tnh nh thc cp n ch cn n3 php tnh. Ch cn khng qu 1 giy tnh nh thc cp 100 trong. > Trong v d trn, s chnh lch v s php ton cn thc hin ca 2 thut gii l rt ln, nn la chn l hin nhin. Tuy nhin, ngay c trong trng hp vic ci tin hiu qu ch tit kim c mt s t php ton, nhng thut gii c s dng hng triu ln th li ch mang li cng c nhn ln hng triu ln, con s khng phi l nh.

3. nh gi thi gian thc hin thut gii:


a. Tnh c lp: Th no l mt thut gii nhanh. C th lp chng trnh, chy my ri bm gi. Tuy nhin tc thc hin mt chng trnh ph thuc vo ngn ng lp trnh, chng trnh dch, h iu hnh, phn cng ca my Mt khc, phi lp trnh mi o c thi gian thc hin ca thut gii. Cn nh gi thi thc hin sao cho: - Khng ph thuc my, ngn ng lp trnh, chng trnh bin dch. - Khng cn phi trin khai chng trnh thc hin thut gii. - Ch da vo bn thn thut gii. Trong v d phn 2, ta tnh thi gian thc hin thut gii tnh nh thc bng s php tnh cn tin hnh. y chnh l cch lm p ng nhu cu trn. b. Cc php ton s cp:

Trc ht ta cn thng nht nhng thao tc no c coi l mt php tnh. y l khi nin php ton s cp. Cc php ton s cp l nhng php ton m thi gian thc hin n ngn, hay ni ng hn l khng vt qu mt hng s no . Cc php ton sau y c th coi l s cp: - Cc php tnh s hc. - Cc php tnh logic. - Cc php chuyn ch, gn c. Kch thc d liu u vo: Cho mt thut gii ta hon ton c lng c tng s cc php ton s cp cn thit thc hin thut gii . Mt iu hin nhin l tng s php ton s cp gii mt bi ton ph thuc vo kch thc ca bi ton. Dng cng mt thut ton, tnh mt nh thc cp 5 r rng cn t php tnh hn nh thc cp 10. Tng s mc d liu u vo l c trng cho kch thc ca bi ton. Ngi ta thng dng mt s nguyn dng n th hin kch thc ny. Nh vy, mt thut gii T p dng gii bi ton c kch thc n s cn mt tng s T(n) cc php ton s cp. T(n) l mt hm ca tham s n. Hm s T(n) l c trng cho hiu qu ca thut gii T.

4. Tnh trng d liu u vo:


Khng ch c s lng d liu u vo quyt nh thi gian thc hin gii thut m tnh trng d liu cng nh hng n vic thut gii thc hin nhanh hay chm. Xt bi ton sp xp mt dy s. R rng l nu dy c sn th t mong mun hoc gn th th th cng vic phi lm t hn trng hp mt dy bt k. Hoc bi ton tm kim tun t trong mt dy s cho sn nh tm v tr ca phn t k trong mng a[0, 1, n-1] (nu k tn ti trong mng a). int SequentialSearch(int a[], int n, int k) { for(int i = 0; i < n; i++ ) {

if( k == a[i]) return i; // i la vi tri cua k trong mang a[] } return -1; } - Trng hp mi bt u tm kim gp ngay phn t k th y l trng hp tt nht (best case) C(n) = 1. - Trng hp tm kim m khng c k trong mng hay k nm cui mng th y l trng hp xu nht, phi duyt qua tt c cc phn t ca mng a[] (worst case). C(n) = n. - Trng hp trung bnh C(n) = C(n)trung bnh = 0, 5. p(n + 1) + n(1 p). ** Ty theo tnh trng d liu u vo m ta c cc trng hp: - Thun li nht C(n) l nh nht, ta k hiu l Cmin (best case). - Bt li nht C(n) l ln nht, ta k hiu l Cmax (worst case). - Ngu nhin T(n) l trung bnh, ta k hiu l Taver (average case). > Hp l nht l dng c lng thi gian thc hin trung bnh Taver so snh nh gi thut gii. Nu tnh thi gian thc hin trung bnh qu kh khn, c theer nh gi cn c vo trng hp xu nht, tc l dng Tmax. Thm ch, nhiu bi ton thi gian thc i hi thi gian tr li phi khng vt qu mt gii hn cho trc no . Trong trng hp ny, ch c th dng c lng trong trng hp xu nht, ngha l Tmax m thi.

5. K hiu O (Big O) v cc v cng ln:


a. Tc tng: Gi s gii cng mt bi ton c hai gii thut gii T1 , T2 vi thi gian thc hin tng ng l: T1(n) = C1(n), T2(n) = C2n2 y C1, C2 l cc hng s. Th th khi n ln chc chn T2(n) s ln hn T1(n), d rng C1 C ln hn C2 nhiu ln. Ti ni n iu ny chng ta thy rng trong lnh vc cc v cng ln cc hng s khng quan trng. ln ph thuc ch yu vo tc tng ca T(n) khi n tng. K hiu O ln c t ra nhm mc ch loi b

cc thnh phn khng quan trng, lm r tc tng ni trn. b. K hiu O ln (Big-O) - nh ngha: Gi s f(n), g(n) l 2 hm s khng m, ng bin theo n. Ta ni f(n) l O ln ca g(n) v vit: f(n) = O(g(n)). khi v ch khi tn ti hng s C f(n) <= C.g(n) k t n >= n0 no . Ta ni f(n) c cp ln khng vt qu g(n) (d hiu l f(n) c tng ti u i na cng khng th vt qu tc tng ca g(n)). V d: f(n) = 2(n*n) + 3n + 5. f(n ) <= 2(n*n) + 3(n*n) + 5(n*n) = 12(n*n) vi mi n >= 1. Ta vit f(n) = O(n2) Vit T(n) = O(g(n)) ngha l tc tng ca T(n) khi tin n v cng khng vt qu tc tng ca g(n). Khi n ln, g(n) cho ta hnh dung c mc ln ca T(n).g(n) l thc o ln ca T(n). Cc thuc tnh ca big-O

c. Cc n v o tc tng Ngi ta thng c gng c lng g(n) sao cho st vi T(n) nht v c dng n gin nht d hnh dung. Bng cc v cng ln thng dng

Bng trn cung cp cc thc o thi gian thc hin gii thut gii hay dng nht v tn gi thng thng ca chng. Trong cc nh gi v thi gian thc hin thut gii, ch yu s dng cc hm logarit c s 2. Do , n gin ta vit log n thay cho logarit c s 2 ca n. Cc logarit c s khc s c ch r. - T(n) = O(1): thi gian thc hin gii thut khng qu mt hng s no , khng ph thuc vo n. Ta ni thut gii c thi gian hng s. - T(n) = O(n): ta ni thut gii c tc tng tuyn tnh. - T(n) = O(2n): ta ni thut ton c tng theo hm m. Bng so snh di y gip chng ta d hnh dung ln ca cc mc thi gian thc hin thut gii ni trn: Log n 0 1 2 3 4 5 n 1 2 4 8 16 32 n.log n 0 2 8 24 64 160 n2 1 4 16 64 256 1024 n3 1 8 64 512 4096 32768 2n 2 4 16 256 65536 4,292,967,296

R rng l khi thi gian thc hin thut gii tng vi tc hm m th ln tng rt nhanh. Nhng bi ton m cha tm c thut gii vi thi gian di cp hm m, ngha l t thi gian a thc thc tr xung, s c xp vo loi bi ton kh.

6. Big- Omega () v Big-Theta ()


Tng t nh vi bc big-O, nu nh tm c cc hng s C,k1,k2 u dng v khng ph thuc vo n, sao cho vi n ln, cc hm R(n),f(n) v h(n) u dng v

th ta ni thut ton c phc tp c ln hn (n), v ng bng c (h(n)). Nh vy nu xt mt cch cht ch, k hiu mi biu th phc tp ca thut ton mt cch cht ch. Do 2 k hiu thng c s dng trong nh gi phc tp ca thut ton l BigO v Big Theta. Nhng chng ta thng s dng Big-O hn.

7. Cch xc nh thi gian thc hin mt thut gii:


a. Quy tc tng Nu T1(n) = O(f(n)), T2(n) = O(g(n)), th T1(n) + T2(n) = O( max {f(n), g(n)} );

V d: Thut gii gm 2 th tc k nhau P = { P1, P2 } P1 c thi gian l T1(n) = O(f(n)), P2 c thi gian l T2(n) = O(g(n)), Thi gian thc hin P l T(n) = T1(n) + T2(n) = O ( max { f(n), g(n) }). b. Tnh thi gian thc hin ca cc cu lnh trong ngn ng lp trnh: Di y l th hin trnh by, ta quy c gi f(n), fi(n) l thi gian thc hin cu lnh S, Si tng ng. - Cu lnh n: cc cu lnh n nh gn, c, vit, so snh, c thi gian thc hin l O(1)

- Lnh ghp: S = S1 = S2, , = Sp; tnh thi gian thc hin theo quy tc tng. - Lnh r nhnh: if <iu kin> S1; else S2; tnh thi gian thc hin l O( max { f1(n), f2(n) }). - Lnh la chn: case tnh thi gian tng t nh if. - Lnh vng lp: While< iu kin> { S } ; tnh thi gian thc hin l (s ln lp) * f(n) - Vng lp for tng t nh while. V d: Tnh

ex

ex

= 1 + ( x/1!) + (x*x/2!) + (x*x*x/ 3!) + + (xn /n!)

Thut gii 1: double SumDevideFactorial(int n) { double S = 1; double p = 1; for(int i = 0; i < n; i++) { for(int j = 0; j < i; j++) { p = p*x/ j; S += p; } } return S; } Vng for bn trong c s php ton bng i. Tng s php ton T(n) = 1 + 2+ + n = (n( n 1 ))/ 2 = O(n2) Thut Gii 2 K tha, dng kt qu ca bc trc, tnh s hng sau qua s hng trc. x/n! = (x/n ) . (xn-1/(n-1)!) double SumDevideFactorial(int n) {

double S = 1; double p = 1; for(int i = 0; i < n; i++) { p = p*x/ i; S += p; } return S; } Tng s php ton T(n) = O(n). Nh vy gii thut 2 ti u hn gii thut 1.

3. PHC TP CA THUT TON


Mt chng trnh my tnh thng c ci t da trn mt thut ton ng gii quyt bi ton hay vn . Tuy nhin, ngay c khi thut ton ng, chng trnh vn c th khng s dng c i vi mt d liu u vo no v thi gian cho ra kt qu l qu lu hoc s dng qu nhiu b nh (vt qu kh nng p ng ca my tnh). Khi tin hnh phn tch thut ton ngha l chng ta tm ra mt nh gi v thi gian v "khng gian" cn thit thc hin thut ton. Khng gian y c hiu l cc yu cu v b nh, thit b lu tr, ... ca my tnh thut ton c th lm vic. Vic xem xt v khng gian ca thut ton ph thuc phn ln vo cch t chc d liu ca thut ton. Trong phn ny, khi ni n phc tp ca thut ton, chng ta ch cp n nhng nh gi v mt thi gian m thi. Phn tch thut ton l mt cng vic rt kh khn, i hi phi c nhng hiu bit su sc v thut ton v nhiu kin thc ton hc khc. y l cng vic m khng phi bt c ngi no cng lm c. Rt may mn l cc nh ton hc phn tch cho chng ta phc tp ca hu ht cc thut ton c s (sp xp, tm kim, cc thut ton s hc, ...). Chnh v vy, nhim v cn li ca chng ta l hiu c cc khi nim lin quan n phc tp ca thut ton. nh gi v thi gian ca thut ton khng phi l xc nh thi gian tuyt i (chy thut ton mt bao nhiu giy, bao nhiu pht,...) thc hin thut ton m l xc nh mi lin quan gia d liu u vo (input) ca thut ton v chi ph (s thao tc, s php tnh cng,tr, nhn, chia, rt cn,...) thc hin thut ton. S d ngi ta khng quan tm n thi gian tuyt i ca thut ton v yu t ny ph thuc vo tc ca my tnh, m cc my tnh khc nhau th c tc rt khc nhau. Mt cch tng qut, chi ph thc hin thut ton l mt hm s ph thuc vo d liu u vo :
T = f(input)

Tuy vy, khi phn tch thut ton, ngi ta thng ch ch n mi lin quan gia ln ca d liu u vo v chi ph. Trong cc thut ton, ln ca d liu u vo thng c

th hin bng mt con s nguyn n. Chng hn : sp xp n con s nguyn, tm con s ln nht trong n s, tnh im trung bnh ca n hc sinh, ... Lc ny, ngi ta th hin chi ph thc hin thut ton bng mt hm s ph thuc vo n :
T = f(n)

Vic xy dng mt hm T tng qut nh trn trong mi trng hp ca thut ton l mt vic rt kh khn, nhiu lc khng th thc hin c. Chnh v vy m ngi ta ch xy dng hm T cho mt s trng hp ng ch nht ca thut ton, thng l trng hp tt nht v xu nht. Chng ta tr li v d v thut ton tm hp nng nht trong n hp cho trc, nhng ln ny ta lm vic trn mt th hin khc ca vn . y l mt thut ton tng i n gin nn chng ta c th tin hnh phn tch c phc tp. Trc khi phn tch phc tp, ta nhc li i iu v thut ton ny. Tm s ln nht trong mt dy s
Bi ton : Cho mt dy s a c n phn t a1, a2, ...an. Hy xy dng thut ton tm con s ln nht trong dy a. Nhn xt 1. Nu dy ch c 1 phn t th phn t l s ln nht. 2. Gi s dy c n phn t v ta xc nh c phn t ln nht l amax . Nu b sung thm phn t th an+1 vo dy m an+1 > amax th an+1 chnh l phn t ln nht ca dy c n+1 phn t. Trng hp ngc li, ngha l an+1 amax th amax vn l phn t ln nht ca dy c n+1 phn t. Thut ton 1. Ghi nh amax = a1. 2. i = 2. 3. Nu (i n) th thc hin cc bc sau, ngc li sang bc 5. 3.1. Nu (ai > amax ) th 3.1.1. Ghi nh amax = ai . 3.2. Tng i ln 1. 4. Tr li bc 3. 5. Phn t ln nht dy a chnh l amax .Kt thc.

Trong thut ton trn, n gin, ta ch xem chi ph l s ln so snh bc 3.1 v s ln "ghi nh" trong bc 3.1.1. Trng hp tt nht ca thut ton ny xy ra khi con s ln nht nm u dy (amax= a1); trng hp xu nht xy ra khi con s ln nht nm cui dy (amax=an) v dy c sp xp theo th t tng dn.

Da theo s khi ca thut ton, ta nhn thy rng, trong mi trng hp ca bi ton, php "ghi nh" bc 3.1 lun c thc hin v s ln thc hin l n-1 (ng vi vic xt t phn t a2 n an). Ta gi y l chi ph c nh hoc bt bin ca thut ton. Trng hp tt nht : do amax = a1 suy ra, vi mi i 2, ai< amax. Do , iu kin ai>amax bc 3.1 lun khng tha nn bc 3.1.1 khng bao gi c thc hin. Nh vy, chi ph chung cho trng hp ny chnh l chi ph c nh ca bi ton.
T = f(n) = n-1

Trng hp xu nht : Ta c : vi mi i>1, ai-1< ai (do nh ngha dy c sp xp tng dn) nn iu kin ai>amax bc 3.1 lun tha, bc 3.1.1 lun c thc hin. Nh vy, ngoi chi ph chung l n-1 php so snh, ta cn phi dng thm n-1 php "ghi nh" bc 3.1.1. Nh vy, tng chi ph ca trng hp ny l
T = f(n) = 2(n-1)=2n-2

nh ngha
Cho hai hm f v g c min xc nh trong tp s t nhin . Ta vit f(n) = O(g(n)) v ni f(n) c cp cao nht l g(n) khi tn ti hng s C v k sao cho | f(n) | C.g(n) vi mi n > k

Tuy chi ph ca thut ton trong trng hp tt nht v xu nht c th ni ln nhiu iu nhng vn cha a ra c mt hnh dung tt nht v phc tp ca thut ton. c th hnh dung chnh xc v phc tp ca thut ton, ta xt n mt yu t khc l tng ca chi ph khi ln n ca d liu u vo tng. Theo nh ngha trn, ta nhn thy chi ph thp nht v ln nht ca thut ton tm s ln nht u b chn bi O(n) (tn ti hng s C=10, k=1 2n-2 < 10n vi mi n>1). Mt cch tng qut, nu hm chi ph ca thut ton (xt trong mt trng hp no ) b chn bi O(f(n)) th ta ni rng thut ton c phc tp l O(f(n)) trong trng hp . Nh vy, thut ton tm s ln nht c phc tp trong trng hp tt nht v xu nht u l O(n). Ngi ta gi cc thut ton c phc tp O(n) l cc thut ton c phc tp tuyn tnh. Sau y l mt s "thc o" phc tp ca thut ton c s dng rng ri. Cc phc tp c sp xp theo th t tng dn. Ngha l mt bi ton c phc tp O(nk) s phc tp hn bi ton c phc tp O(n) hoc O(logan).

You might also like