Professional Documents
Culture Documents
Ng Hu Phc
Thut ton l mt s hu hn cc bc thc hin tnh ton theo mt trnh t xc nh bin i cc gi tr u vo (Input) thnh cc gi tr u ra mong mun (Output). VD: Bi ton gii phng trnh bc nht ax + b=0 Thut ton: Kim tra gi tr ca a; Nu =0 th Nu b=0 th VSN Ngc li th VN Ngc li X=-b/a;
1.1.2. Cc c trng ca thut ton
1. u vo (Input), ra (Output) : mi thut ton cn phi c b d liu u vo v d liu u ra (kt qu tnh ton). 2. Tnh xc nh: mi bc ca thut ton cn phi m t chnh xc, r rng. 3. Tnh kh thi: tt c cc php ton trong thut ton phi n gin thc thi c. 4. Tnh dng: vi mi b s liu u vo tha mn iu kin ban u th thut ton phi dng sau hu hn bc. 5. Tnh ph dng: Thut ton c th p dng i vi cc d liu u vo khc nhau trong mt min xc nh. 1.2. Biu din thut ton. 1. Biu bng cch lit k cc bc Lit k ra cc bc cn phi thc hin bng ngn ng t nhin. VD 1: Thut ton tm s ln nht trong 3 s a,b,c 1
Cu trc d liu v gii thut Gi thit s ln nht l a: Max=a Nu Max<b th Max=b Nu Max<c th Max=c Ghi gi tr ca Max.
Ng Hu Phc
VD 2: M t thut ton tm s ln nht trong mt dy hu hn cc s nguyn. 1) t gi tr cc i tm thi bng s nguyn u tin trong dy. 2) So snh s nguyn tip theo vi gi tr cc i tm thi, nu ln hn gi tr cc i tm thi th t gi tr cc i tm thi bng s nguyn . 3) Lp li bc 2) nu cn cc s nguyn trong dy. 4) Gi tr cc i tm thi thi im ny chnh l s nguyn ln nht trong dy. Chng ta s tm cch th hin li thut ton gii bi ton trn theo cch thc khc: D liu vo (input): A l mng cha n s nguyn. D liu ra (output): max, s ln nht trong mng A. a) t max := A(1); b) Xt t i=2 n n Nu max < A(i) th t max := A(i); 2. Biu din thut ton bng s khi. S khi l mt ngn ng dng biu din thut ton. Hai loi nt gii hn Bt u v Kt thc thng c hnh dng elip:
Bt u Kt thc
Khi nhp/xut c dng hnh ch nht b ct vt. Nt ch cc thao tc, cng vic c dng hnh ch nht: i=i+1
Cu trc d liu v gii thut Ng Hu Phc Nt ch cc iu kin c dng hnh thoi. Trong cc ng ni vi nt iu kin ny c hai ng i ra ng vi hai trng hp iu kin ng hoc iu kin sai:
V d 1: s khi sau y m t thut ton tm gi tr ln nht trong mng s A c n phn t. Thut ton ny c m t trong v d 1. S khi thut ton tm max trong mng A 3. Biu din thut ton bng m gi Vi nhng thut ton phc tp, vic v v theo di s khi thng l khng thun tin. Trong mt s trng hp ngi ta s dng ngn ng gi m (gi ngn ng lp trnh) m t thut ton. Cc cu trc c bn c dng trong ngn ng gi m cng nh trong bt k ngn ng no khc l cu trc tun t, cu trc r nhnh v cu trc lp. a) Cu trc tun t: Lit k cc cng vic, cc thao tc theo th t. h tr cho vic theo di c thun tin cng c th thm s th t. b) Cu trc r nhnh: If (iu kin) Then (cng vic); If (iu kin) Then (cng vic 1) Else (cng vic 2); c) Cu trc lp: For (bin):= (gi tr u) to (gi tr cui) do (cng vic); For (bin):= (gi tr u) downto (gi tr cui) do (cng vic); While (iu kin) do (cng vic); Repeat - (cng vic 1); - (cng vic 2); - .... - (cng vic k); Until (iu kin); 3
Cu trc d liu v gii thut VD: Thut ton tm s ln nht trong 3 s a,b,c *) Lit k cc bc: Max:=a; If Max<b then Max:=b; If Max<c then Max:=c; println(Max=, max); 1.3. Cc phng php thit k thut ton. 1.3.1. Phng php CHIA TR. L phng php c p dng rng ri nht.
Ng Hu Phc
T tng ca n l: gii mt bi ton kch thc n, ta chia bi ton cho thnh mt s bi ton con c kch thc nh hn. Gii cc bi ton con ny ri tng hp kt qu li c li gii ca bi ton ban u. i vi cc bi ton con, chng ta li s dng k thut chia tr c c cc bi ton kch thc nh hn na. Qu trnh trn s dn n nhng bi ton m li gii chng l hin nhin hoc d dng thc hin, ta gi cc bi ton ny l bi ton c s. Tm li k thut chia tr bao gm hai qu trnh: Phn tch bi ton cho thnh cc bi ton c s v tng hp kt qu t bi ton c s c li gii ca bi ton ban u. K thut ny c gi l top-down (i t trn xung). Hn ch ca phng php ny l phi gii quyt nhiu ln cc bi ton con ging nhau. Hn ch ny lm cho thut ton tr nn chm chp v km hiu qu. Bn cnh , k thut ny thng c ci t bng phng php quy nn d gy ra li khng khng gian stack (stack overflow) lu cc gi tr trung gian. VD: tnh Fn (dy s Fibonacci) F0 = F1 = 1 Fn = Fn-1 + Fn-2 (n 2) Ta c th gii theo phng php top-down (chia tr) nh sau: int F(int n) { if (n == 0 || n == 1) return 1; 4
Cu trc d liu v gii thut else return F(n-1) + F(n-2); } Cch thc hat ng nh sau: F4 / F3 / \ F2 F1 / \ F1 F0 \ F2 / \ F1 F0
Ng Hu Phc
Trong v d trn, ta thy ta phi tnh 2 ln F2, 3 ln F1 v 2 ln F0. Do phng php ny chy rt chm khi n ln, thm ch c th b trn stack. Cc thut ton Quick Sort, Merge Sort thit k theo phng php ny
1.3.2. QUY HOCH NG.
Nguyn l quy hoch ng cng da theo nguyn l chia tr nhng khc ch l phng php ny tip cn theo hng bottom-up (t di ln). u tin, chng ta xut pht t nhng bi ton c s, d dng c ngay li gii. T tp nhng li gii ca cc bi ton con nh th, ta tm c li gii ca bi ton ln hn. V c thc hin nh th cho n khi thu c bi ton cui cng mong mun. VD: Xt l bi ton s Fibonaci Bi ton trn c gii theo phng php quy hoch ng nh sau: int F(int n) { int Fi[100]; int i; Fi[0] = Fi[1] = 1; for (i = 2; i <=n; i++) Fi[i] = Fi[i-1] + Fi[i-2]; return Fi[n]; } Ta nhn thy, c th tit kim khng gian lu tr cc kt qu trung gian trong qu trnh tnh ton bng cch ch lu li 2 gi tr fi-1 v fi-2. int F(int n) 5
Cu trc d liu v gii thut { int f, f1, f2, i; f1 = f2 = 1; for (i = 2; i <= n; i++) { f = f1 + f2; f2 = f1; f1 = f; } return f; } BT: Bi ton chic Bal
Ng Hu Phc
C n loi vt, vt th i c th tch c[i] v c gi tr a[i]. Cn xp cc vt trn vo ba l c th tch V sao cho tng gi tr l ln nht. a. Mi loi c mt vt. b. Mi loi c t[i] vt cho trc. c. Mi loi c s lng vt khng hn ch. 1.3.4. K thut "THAM N" *) Bi ton ti u t hp L bi ton ti u c dng tng qut nh sau: Cho hm mc tiu . Mi phn t X D c dng X= (x1, x2, .. xn) c gi l mt phng n. Cn tm mt phng n X D sao cho hm f(X) t min (max). Phng n X nh th c gi l phng n ti u. Ta c th tm thy phng n ti u bng phng php vt cn ngha l xt tt c cc phng n trong tp D (hu hn) xc nh phng n tt nht. Mc d tp hp D l hu hn nhng tm phng n ti u cho mt bi ton kch thc n bng phng php vt cn ta c th cn mt thi gian m. Ni dung k thut tham n K thut tham n thng c vn dng gii bi ton ti u t hp bng cch xy dng mt phng n X. Phng n X c xy dng bng cch la chn tng thnh phn xi ca X cho n khi hon chnh ( n thnh phn). Vi mi xi, ta s chn xi ti u. Vi cch ny th c th bc cui cng ta khng cn g chn m phi chp nhn mt gi tr cui cng cn li. VD: Bi ton la chn cng vic. Bi ton pht biu nh sau: Gi s ta c mt tp S = N cc cng vic, ti mi 6
Cu trc d liu v gii thut Ng Hu Phc thi im ch c th thc hin mt cng vic. Mi cng vic i c thi gian bt u l si v thi gian kt thc l i, vi si i. Nu c chn, cng vic i chim ht khong thi gian [si,i]. Hy chn ra phng n thc hin cc cng vic trn sao cho s cng vic thc hin c l ln nht trong mt khong thi gian nht nh. Thut ton tham lam: u tin ta sp xp cc cng vic trn tng dn theo thi gian kt thc. Thc hin cng vic u tin. I=1 Cho j=i+1 to n Nu sj>ai th Chn tip j I=j; p dng k thut tham n s cho mt gii thut thi gian a thc, tuy nhin ni chung chng ta ch t c mt phng n tt ch khng phi l ti u.
1.3.5. K THUT QUI v QUI QUAY LUI
VD : Bi ton xp 8 hu ln bn c.
1.4. Quan h gia cu trc d liu v thut ton. - Thut ton ch ch ra cc bc tnh ton, cn i tng c dng tnh ton chnh l d liu. - D liu biu din cc thng tin cn thit cho bi ton: cc d liu u vo, trung gian, kt qu. Nu bit t chc d liu theo cu trc thch hp th vic x l s thun tin hn v t c hiu qu cao hn. - Vi mt cu trc d liu chn ta s c gii thut tng ng. Cu trc d liu thay i th gii thut cng thay i theo. Xt v d sau: Gi s u vo chng ta c mt cp danh sch: Tn n v, s in thoi. (a1,b1),(a2,b2), Ta mun c chng trnh tm s in thoi theo tn 7
Ng Hu Phc
Gii thut 1: Tm kim tun t t u danh sch tn cc n v c trong danh sch cho n khi tm thy hoc ht danh sch. Gii thut 2: Trc khi tm kim, ta t chc li d liu bng cc sp xp danh sch tng dn theo t in. Vic tm kim s thc hin t u danh sach cho n khi tm thy hoc tnnvcntm<=tnnvangxt hoc kt thc danh sch. Gii thut 3: T chc thm mt bng ch mc theo ch ci u tin tn ca cc n v. Nh vy khi tm: Hc vin KTQS, ta ch cn tm trong danh sch cc n v c ch ci u tin l ch H. Bi tp: 1) V s thut ton gii phng trnh ax+b=0 2) M t thut ton m cc s dng trong dy A. 1.5. phc tp thut ton. Khi xut mt thut ton ngoi vic quan tm n tnh ng n ca thut ton, ngi ta cn phi quan tm n mt s vn : tnh ph dng, phc tp thut ton - thi gian tnh ton ca thut ton ph thuc vo d liu u vo nh th no, Trc khi nghin cu phc tp thut ton, ta xem xt mt s khi nim sau: *) - Khi nim v tng ca hm: Mt trong cc khi nim thng c dng phn tch tng ca hm l khi nim O ( ln) c nh ngha nh sau: Cho f(x) v g(x), ta ni f(x) l O(g(x)) nu tn ti mt hng s C v k sao cho |f(x)|<=C|g(x)| vi mi x>k; VD1: f(x)=anxn+an-1xn-1++a1x+a0, vi ai l cc s thc (i=0..n). Khi f(x)=O(xn) CM: Vi x>1, ta c: => f(x) l O(xn) VD2:f(n)=1+2+3++n. Ch ra rng f(n) l O(n2) CM: f(n)<n+n+n++n=n.n=n2 => f(n) l O(n2) 8 |f(x)| = | anxn+an-1xn-1++a1x+a0| <= |an|xn+|an-1|xn-1++|a1|x+|a0| <=|xn|(|an|+|an-1|++|a1|+|a0|) t C=|an|+|an-1|++|a1|+|a0|; k=1, ta c |f(x)|<=C|xn| vi mi x>k
Cu trc d liu v gii thut VD3: Ch ra hm n! l O(nn) v log(n!) l O(nlogn) Ta c n!<=nn vi C=1,k=1. T n!<nn ta c log(n!)<nlogn vi C=1,k=1 - tng ca t hp cc hm:
Ng Hu Phc
Xt f1(x) l O(g1(x) v f2(x) l O(g2(x)), CMR: (f1(x)+f2(x)) l O(max{g1(x),g2(x)}) CM: theo gi thit ta c |fi(x)|<=Ci|gi(x)| |f1(x)+f2(x)|<= |f1(x)|+|f2(x)| <=C1| g1(x)|+ C2| g2(x)| <=C|g(x)| x>k Vi k=max{k1,k2} v C=C1+C2 g(x)=max{ |g1(x)|,|g2(x)|} *) phc tp ca thut ton + cc thut ng O(1)- phc tp hng s; O(n) phc tp tuyn tnh; O(nb) phc tp hm m. + phc tp tnh ton s c tnh theo s ln thc hin cc php ton s cp:cng, tr, nhn, chia, php gn,.. VD: Xt on chng trnh sau: For (int i=1; i<n;i++) { {c php tnh s cp; ko c vng lp y na} } => s ln lp s l n=> O(n) VD2: For ( int i=1; i<n ;i++) { For ( int j=1; j<m ;j++) { {c php tnh s cp; ko c vng lp y na} } } O(n2) 9
Ng Hu Phc
Ta ni mt i tng l qui nu i tng ny bao gm chnh n nh mt b phn hoc i tng c nh ngha di dng ca chnh n. V d 1: giai tha + 0!=1 + n !=n*(n-1) ! V d 2 : Cu trc th mc l mt dng nh ngha qui : th mc cha th mc con. 2.2. Gii thut qui v th tc qui - Nu li gii ca bi ton T c thc hin thng qua li gii ca mt bi ton T c kch thc nh hn T v c dng ging nh T, th l mt li gii qui. Gii thut tng ng vi li gii nh vy gi l gii thut qui. - Trong th tc c li gi n chnh n gi l th tc qui. 2.3. Thit k gii thut quy Khi bi ton c nh ngha di dng qui th ta rt d thit k gii thut . V d 1 : Hm giai tha n ! nh ngha n! n! =1 nu n=0 = n(n-1) ! nu n>0 #include <stdio.h> int f(int n) { if (n==0) return 1; else return n*f(n-1); } void main() { int fb; fb=f(4); printf("F=%d",fb); 10
Ng Hu Phc
VD 3: Bi ton 8 qun hu v gii thut qui quay lui. Cho bn c vua 8x8. Hy xp 8 con hu ln bn c sao cho khng con no khng ch con no. Hai con hu khng ch nhau nu chng trn cng mt hng, mt ct hoc mt ng cho. Phn tch bi ton: V tr ca mi qun hu c xc nh qua s th t ca dng v ct. Do ta coi con hu th i hng i v ct x[i]. Vy nghim ca bi ton c th coi l mt vector x gm 8 thnh phn vi ngha: 1. Con hu th i c t hng i v ct x[i]. x[i] ly gi tr trong tp {1,2 n} 2. Rng buc: cc gi tr x[i] khc nhau tng i mt v khng c 2 con hu trn cng mt ng cho. Dng thm cc mng nh du m t rng mt ng cho chnh v ph c mt con hu khng ch. Tc l khi ta c con hu i v tr (i,j), ta s nh du ng cho chnh i-j v ng cho ph i+j. Nh vy v cu trc d liu, ta dng 4 mng: 1. Mng x vi ngha: x[i] l ct ta s t con hu th i. 2. Mng cot vi ngha: cot[j]=1 nu ct j c mt con hu c t, ngc li th cot[j]=0. 3. Mng dcc vi ngha: dcc[k]=1 nu ng cho chnh th k c mt con hu c t, tc l ta t mt con hu j=k; ngc li th dcc[k]=0. 11
Cu trc d liu v gii thut k c mt con hu c t. Gi m ca thut ton xp hu nh sau: procedure Try(i); var j; begin for j := 1 to n do if (cot[j]=0) and (dcc[i-j]=0) and (dcp[i+j]=0) then begin x[i] := j;
Ng Hu Phc
if i=n then Update else Try(i+1); cot[j]:=0; dcc[i-j]:=0; dcp[i+j]:=0; end; end; procedure Update; begin count := count + 1; print(x); end; {tng cng c 92 cch xp 8 hu} 2.4. Kh qui. C nhng bi ton bn cnh gii thut qui vn c nhng gii thut lp kh n gin v hiu qu. Vd 1: n! int F(int n) {int tg; if ((n==0)||(n==1)) else { tg=1; for (int i=2;i<=n;i++) tg*=i; 12 { return 1; } {phc hi trng thi c}
Cu trc d liu v gii thut return tg; }} VD2: Fibonacci Function Fibo (n:byte):double; Begin If n<=2 then Fibo:=1 Else Begin F1:=1;f2:=1; For i:=3 to n do begin fn:=f1+f2; f1:=f2;f2:=fn end; Fibo:=fn; End; End;
Ng Hu Phc
Khi thay cc gii thut qui bng cc gii thut khng qui, ta gi l kh qui. Tuy nhin, qui vn c vai tr xng ng. C nhng bi ton vic ngh ra li gii qui d hn nhiu so vi li gii lp, v c nhng li gii qui c hiu lc cao (thut ton sp xp nhanh QuickSort). 2.5. Cu trc chung ca mt th tc quy. Mt th tc qui gm c hai phn chnh 1. Phn c nh: ga tr khi u cho hm, th tc qui. 2. Phn h bc:(phn qui): Tc ng ca hm qui c thc hin thng qua tc ng hay gi tr c nh ngha trc. Phn tch Fibonacci:
13 Fib(2)
Ng Hu Phc
chng minh tnh ng n ca mt gii thut qui ngi ta s dng phng php qui np ton hc. Vd: Chng minh gii thut qui tnh giai tha F(n). Gii thut: F(0)=1 F(n)=n(n-1)(n-2)2*1;(n>0) CM: +Nu n=0; theo gii thut f:=1 (nh vy gii thut ng khi n=0) + Gi s gii thut ng vi n=k, ngha l F(k)=k*(k-1)*2*1. + Ta phi chng minh gii thut ng vi n=k+1; Ta thy vi n=k+1 th F:=n*f(n-1) s c thc hin. Thay n=k+1 ta c F(k+1)=(k+1)F(k)=(k+1)*k*(k-1)*2*1.(dpcm) 2.7. Bi tp 1) Xt tnh qui: n+1 nu m=0 A(m,n) = A(m-1,1) nu n=0 A(m-1,A(m,n-1)) vi cc trng hp cn li. 2) Bi ton 8 qun hu v gii thut quay lui Bn c vua gm 8 hng, 8 ct. Qun hu l qun c c th n c bt k qun no nm trn cng hng, ct, ng cho. Bi ton: hy xp 8 con hu ln trn bn c sao cho cc qun hu khng th n c nhau. 3) Din tch bn c Cho bng ch nht A gm M dng v N ct. Trn mi ghi cc gi tr 0 v 1: gi tr 0 c hiu l nc, gi tr 1 c hiu l t. Hai t c cnh lin nhau c xem nh nm trong cng mt bn c. Hy xc nh din tch ca bn c ln nht (mi c xem nh 1 n v o). Nhn xt: - Mi c nh s 1 c xem nh l mt nh ca th. - Hai nh c gi l lin thng nu c chung cnh. Nh vy yu cu ca bi ton chnh l tm thnh phn lin thng c s nh ln nht. 14
Cu trc d liu v gii thut Bi 3: MNG V DANH SCH. 3.1. Cc khi nim.
Ng Hu Phc
Mng: l mt tp hp c th t cc phn t. Vector c lu trong mng mt chiu, mi phn t ca n ng vi mt ch s i. Ma trn c lu trong mt mng 2 chiu, mi phn t ng vi 2 ch s i,j. S phn t ca mng l c nh, c xc inh khi khai bo. Danh sch: l mt tp hp c th t cc phn t. S phn t ca danh sch khng c nh, c th thm hoc xa i. 3.2. Cc thao tc trn mng.
3.2.1. Truy cp cc phn t ca mng.
Trong C++, khai bo mng nh sau: type name [elements]; VD: int billy [5]; Khi to mng: int billy [5] = { 16, 2, 77, 40, 12071 }; Cc phn t ca mng trong C++ c nh s t 0:
jimmy[n][m]=(n+1)*(m+1);
3.2.2. Chn thm phn t vo gia mng.
chn mt phn t vo mng, ta cn phi xt xem mng cn ch trng khng? Nu cn, ta s y cc phn t t v tr cn chn i mt nh v cui mng ri t gi tr mi vo v tr cn chn. V d: a[1] a[2] a[3] a[4] a[5] a[6]
Gi s ta mun chn vo v tr s 4 ca mng ta thc hin nh sau: a[1] A[2] a[3] a[4] a[5] a[6] a[7] Thut ton: chn. Cc tham s: mng A; S phn t, Kch thc mng, v tr chn, gi tr cn void Insert(int *A, int N , int Size, int k, int x) { 15
Cu trc d liu v gii thut if (N<Size) { if (k<N-1) { for (int j=N;j>=k;j--) { A[j]=A[j-1]; } A[k]=x; } else A[k]=x; } }
3.2.3. Xo mt phn t ca mng
Ng Hu Phc
Bi ton in hnh ca cu trc mng l vic tm kim phn t trong mng tha mn iu kin no . C thut ton tm kim tun t, chia i.
3.2.5. V d
Cng 2 a thc: 3X2 xy+y2 + 2y x X2 +4xy-y2 + 2x Kt qu: 4X2+3 xy + 2y+x Khi cng hai a thc, ta phi tm kim tng s hng v phi phn bit c h s v m trong tng s hng. Vi a thc 2 bin x v y ta c th dng ma trn biu din: h s ca s hng xiyj s c lu to i,j (gi thit i,j bt u t 0). VD: Nh vy nu ta hn ch kch thc ca ma tra l 4x4 th s m cao nht ca x, y cao nht l 3. x y 0 1 2 3 0 0 -1 3 0 1 2 -1 0 0 2 1 0 0 0 3 0 0 0 0
16
Ng Hu Phc
1. Khi to danh sch rng: Initialize(var L: List) 2. Xc nh di ca danh sch: Length(L: List) 3. Loi phn t v tr th p ca danh sch: Delete(var L:List, p: position) 4. Chn phn t x vo v tr p ca danh sch: Insert(var L: List, p: position, x: item) 5. Tm x c trong danh sch L khng? Search(x:item, L: List, var p: position) 6. Kim tra danh sch c rng khng? IsEmpty(L:List)
3.3.2. Khi nim v cch s dng con tr. Khi nim
Con tr l mt khi nim c trong mt s ngn ng lp trnh nh c, c++, pascal dng qun l b nh ng. Bin tnh: l bin c xc nh vng nh khi chng trnh bt u chy v b hy khi chng trnh kt thc. Bin ng: l bin c to ra v c th hy b khi chng trnh ang thc hin. Bin con tr dng qun l b nh ng.
- Khai bo:
type * pointer_name;
VD:
int * i;char * c; float * f;
int *i; 17
Cu trc d liu v gii thut i= new int(1012); printf("i=%d",*i); - Thao tc trn vng nh cp pht thng qua con tr p + Gn gi tr cho vng nh: *pointer_name:=x; + Ly gi tr ca vng nh: y:=*pointer_name;
Ng Hu Phc
+ Hai con tr cng kiu c th thc hin php gn, php so snh q=p;==, !=,>=,... - Hy vng nh delete pointer_name;
3.3.3. Danh sch lin kt n.
Mi phn t ca danh sch n l mt cu trc cha 2 thng tin: Thnh phn d liu: lu tr cc thng tin v bn thn phn t . Thnh phn mi lin kt: lu tr a ch ca phn t k tip trong danh
sch, hoc lu tr gi tr NULL nu l phn t cui danh sch. Cch qun l: Nu bit c a ch ca phn t u tin trong danh sch n th c th da vo con tr Next truy xut n phn t th 2 trong xu, v li da vo con tr Next ca phn t th 2 truy xut n phn t th 3...
Head
Khai bo tng qut
struct NODE { int Info; struct NODE * pNext; }; NODE* Head; NODE *xNew; int x;
an
an
18
Ng Hu Phc
NODE* GetNode(int x) { NODE *p; p=new NODE(); if (p==NULL) { printf("Khng ?? b? nh?."); return NULL; } p->Info=x; p->pNext=NULL; return p; }
Head an p X Thut ton thm phn t p vo u danh sch : Bt u: B11 : p=GetNode(x); p->Next = Head; B12 : Head = p ; 19 an-1 an-2 a1
Ng Hu Phc
Head an an-1
q an-2 a1
x p
Bt u :
20
Ng Hu Phc
Head an
q an-1 an-2
p a1
Thut ton chn p vo cui danh sch: Nu danh sch rng th Head = p; Ngc li B21 : q:=head; B22 : trong khi p<> nil th Before:=q;q:=q^.next; B23:before^.next:=p;
Bt u :
21
Ng Hu Phc
Bt u: Nu (Head != NULL) th B1: B2: B21 : Head = Head->Next; B22 : delete p; Pr Head an an-1 P q an-2 an-3 a1 // tch p ra khi xu p = Head; // p l phn t cn hy
// Hy bin ng do p tr n
bool RemoveHead(NODE **h) { NODE *p; if ( *h != NULL) { p = *h; *h= (*h)->pNext; delete p;
22
Ng Hu Phc
Thut ton : Nu (q!= NULL) th B1: B2: p = q->Next; Nu (p != NULL) th // p l phn t cn hy // q khng phi l cui xu // tch p ra khi xu
Bt u:
// Hy bin ng do p tr n
} } }
Hy mt phn t c kho k
Thut ton : Bc 1: Tm phn t p c kha k v phn t q ng trc n Bc 2: Nu (p!= NULL) th // tm thy k Hy p ra khi danh sch tng t hy phn t sau q; Ngc li Bo khng c k;
23
Ng Hu Phc
X l danh sch
m cc phn t ca danh sch, Tm phn t tho iu kin, Hu ton b danh sch (v gii phng b nh)
Thut ton : Bc 1: p = Head; //Cho p tr n phn t u danh sch Bc 2: Trong khi (Danh sch cha ht) thc hin B21 : X l phn t p; B22 : p:=p->Next; // Cho p tr ti phn t k
Hy ton b danh sch void RemoveList(NODE **h) { NODE *p; while ( (*h) != NULL) { p=*h;(*h) = (*h)->pNext; delete p; } } In tan b danh sch void ProcessList (NODE *h)
24
Ng Hu Phc
3.3.4. Cc loi danh sch lin kt khc. Danh sch lin kt vng
Head
Khi x l danh sch ni vng nu khng cn thn s dn ti mt chu trnh (ko kt thc c). d dng cho vic x l ngi ta thng a vo mt nt c bit gi l nt u danh sch khng cha d liu v con tr pNext tr n chnh n. struct NODE { int info; Struct NODE *pNext; } Khi to: NODE *Head; Head=new NODE(); Head->info=0; Head->pNext=Head; InsertHead p=GetNode(x);p->pNext=Head->pNext; 25
an
an-1
Cu trc d liu v gii thut Head->pNext=p; DeleteHead p=Head->pNext; if (p!=NULL) { Head->pNext=p->pNext; Delete p; }
Danh sch lin kt i
Ng Hu Phc
3.4. Bi tp. 1. Thit k cu trc d liu biu din ma trn tha. 2. S dng danh sch lin kt vng gii bi ton Joesphus. 3. S dng cu trc danh sch biu din a thc hai bin s x v y. 4. Vit hm m s phn t trong mt danh sch lin kt ni vng. 5. Vit mt hm o ngc lin kt ca mt danh sch lin kt n. 6. Sp xp danh sch lin kt n theo trt t tng dn. 7. S dng cu trc danh sch lin kt biu din hai a thc P(x) v Q(x). a. Vit th tc cng hai a thc ny b. Vit th tc nhn hai a thc ny H s S m Link
26
Ng Hu Phc
Bi 4. NGN XP V HNG I.
4.1. Ngn xp.
4.1.1. Khi nim v ngn xp.
Ngn xp (Stack) l mt dng ca danh sch lin kt hot ng theo nguyn tc vo trc ra sau (First in last out- FILO). Phn t ph trn gi l nh ngn xp, pha di gi l y ngn xp. - V d: p dng Stack trong bi ton i c s ca mt s t h thp phn sang h nh phn. (m t thut ton i c s ng dng cu trc d liu Stack cho thut ton ny ) V d : (10)10=(1010)2
1 0 0
Ta c th to mt stack bng cch khai bo mt mng 1 chiu vi kch thc ti a l N (v d, N c th bng 1000). VD:
To stack S v qun l nh stack bng bin t ch s ca phn t trn cng trong stack: Khao bo int S[N]; t=-1;
1 0 1
27
Cu trc d liu v gii thut if (t<N-1) {t+=1; S[t]=x;} else printf(trn); Ly ra phn t - int Pop() if (t>=0) (Pop=S[t];t-=1;)
Ng Hu Phc
Khai bo struct NODE { }; NODE *S; 1. Khi to S=NULL; 2. Kim tra Stack rng bool IsEmpty(NODE *s) { return (s==NULL); } 3. Thm phn t mi void Push(NODE **s, int x) {NODE *tg; tg=GetNode(x); tg->pNext=*s; *s=tg; } 4. Ly ra mt phn t int Pop(NODE **s) { NODE *tg; 28 int info; struct NODE *pNext;
Cu trc d liu v gii thut int x; if (!IsEmpty(*s)) { x=(*s)->info; tg=*s; *s=(*s)->pNext; delete tg; return x; } return 0; }
4.1.4. ng dng ca ngn xp: tnh gi tr ca biu thc
Ng Hu Phc
1. Biu thc trung t: a*(b+c)-d/e 2. Bin i biu thc trung t sang dng hu t Biu thc s dng k php Balan l mt biu thc khng c ngoc php ton trong biu thc Balan t sau cc ton hng: Dng trung t a+b a*b a*(b+c)-d/e V d : E=a*(b+c)-d/e# E a * ( b + c ) S $ $ $* $*( $*( $*(+ $*(+ $*( $* $ $E1 a a a ab ab abc abc+ abc+ abc+* abc+* 29 Dng hu t ab+ ab* abc+*de-/
Thut ton 1 Bc 1 : c mt thnh phn ca biu thc E (dng trung t biu din bng xu, c t tri qua phi). Gi s thnh phn c c l x 1.1Nu x l ton hng th vit n vo bn phi biu thc E1 1.2Nu x l du ( th y n vo ngn xp 1.3Nu x l mt trong cc php ton +, -, *, / th 1.3.1 Xt phn t y nh ngn xp 1.3.2 Nu Pri(y)>=Pri(x) l mt php ton th loi y ra khi ngn xp v vit y vo bn phi ca E1 v quay li bc 1.3.1 1.3.3 Nu Pri(y)<Pri(x) th y x vo ngn xp 1.4Nu x l du ) th 1.4.1 Xt phn t y u ca ngn xp 1.4.2 Y l php ton th loi y ra khi ngn xp, vit y vo bn phi E1 v quay tr li 1.4.1 1.4.3 Nu y l du ( loi y ra khi ngn xp Bc 2 : Lp li bc 1 cho n khi ton b biu thc E c c qua Bc 3 :Loi phn t nh ngn xp v vit n vo bn phi E1. Lp li bc ny cho n khi ngn xp rng Hm Pri($)<Pri(()<Pri(+)=Pri(-)<Pri(*)=<Pri(/) $ k hiu nh ca Stack 3. Tnh gi tr ca biu thc di dng hu t Thut ton 2 Bc 1 : c ln lt cc phn t ca biu thc E1 (t tri qua phi) 1.1Nu gp ton hng th y n vo ngn xp 1.2Nu gp php ton th ly hai phn t lin tip trong ngn xp thc 30
Ng Hu Phc
Bc 2 : Lp li bc 1 cho n khi ht tt c cc phn t trong biu thc E1. lc nh ca ngn xp cha gi tr ca biu thc caanf tnh Bc 3. Kt thc
4.1.5. Bi tp
1.
Hy ch ra ni dung ca ngn xp sau mi thao tc trong chui sau E A S*Y**Q U E***S T***I*ON** . y cc k t ch c ngha l Push v cc k t * c ngha l Pop.
2. 3. 4. 5. 6.
PUSH(S,
4),
PUSH(S,
1),
PUSH(S,
3),
POP(S),
Hy ci t hai Stck da trn mng mt chiu. Stack c gi l y khi tng s phn t ca hai Stack bng s phn t ca mng. Vit th tc bng ngn ng Pascal chuyn biu thc t dng trung t sang dng hu t. Vit th tc tnh gi tr ca biu thc dng hu t Vit chng trnh i mt s t h thp phn sang h nh phn s dng cu trc d liu Stack.
vd : 2 3 4 + *
4.2. HNG I
4.2.1. Khi nim v hng i
Trn cu trc ny c hai thao tc c bn l : 1. Thm mi AddQUEUE 2. Loi b -RemoveQUEUE 3. Kim tra hng rng
31
Ng Hu Phc
Ta c th to mt hng i bng cch s dng mt mng 1 chiu vi kch thc ti a l N (v d, N c th bng 1000) theo kiu xoay vng (coi phn t an-1 k vi phn t a0). Ta k hiu n l NULLDATA nh nhng phn trc. Trng thi hng i lc bnh thng:
Q bin hng i, f qun l u hng i, r qun l phn t cui hng i. Trng thi hng i lc xoay vng (mng rng gia):
Cu hi t ra: khi gi tr f=r cho ta iu g ? Ta thy rng, lc ny hng i ch c th mt trong hai trng thi l rng hoc y. Hng i c th c khai bo c th nh sau: int Q[N]; int F, R; void init() { F=-1;R=-1; } void Insert(int *f, int *r, int x) { if (*f==-1) { *f=0; *r=0; Q[*r]=x; } else { if (*f==((*r+1)%N)) { 32
Cu trc d liu v gii thut printf("tran queue"); exit; } else {*r=(*r+1)%N; Q[*r]=x; } }
Ng Hu Phc
} int Remove(int *f, int *r) { int x; if (*f==-1) return -1; x=Q[*f]; if (*f==*r) { *f=-1;*r=-1; } else *f=(*f+1)%N; return x; }
4.2.3. Ci t hng i bng hng danh sch lin kt.
Front an - Khai bo struct Node { int info; struct Node *next; an-1 . a1
Rear
33
Ng Hu Phc
Rear
p a1
void Insert(Node **f,Node **r, int x) { Node *p; p=new Node(); if (*f==NULL) { *f=p; *r=p; } else { (*r)->next=p; *r=p; } } 34 p->info=x; p->next=NULL;
Cu trc d liu v gii thut - Loi mt phn t khi hng i int Remove (Node **f, Node **r) { Node *p;int x; if (*f==NULL) return 0; p=*f;x=p->info ; (*f)=(*f)->next ; if (*f==NULL) *r=NULL; delete p; return x; }
4.2.4. Bi ton m phng s dng hng i
Ng Hu Phc
Bi ton qun l kho hng :(qun l phiu nhp hng, qun l phiu xut, qun l hng tn kho, lng tin tn). qun tin tn, hng tn th ngi ta thng s dng hng i hng nhp trc s c bn trc. M phng my ch phc v cc yu cu t my gi n s dng cc dch v khc nhau. M phng trung tm thng tin phc v khch hng. M phng truyn tin gia hai my tnh.
4.2.5. Bi tp
1. Xy dng mt hng i m cc phn t l cc nhn vin trong mt cng ty. Yu cu : Nhn vin : h tn, tui, qu quan. Tm kim nhn vin theo hoten, tuoi, quequan. 2. Dng cc php ton c bn ca hng i v ngn xp, vit mt thut ton o ngc cc phn t ca hng i. 3. M phng trung tm thng tin phc v khch hng. 4.3. Hng i u tin Hng u tin l mt kiu d liu tru tng trn tp hp cng vi cc php ton : thm (INSERT) v xo phn t b nht (DELETEMIN), MAKENULL khi to. 35
Ng Hu Phc
Php ton DELETEMIN s cho ra kt qu l phn t c u tin nh nht trong tp hp v xa n khi tp hp ny. Nh vy ta c th coi DELETEMIN l t hp ca th tc DELETE v hm MIN tho lun trong chng. Thut ng hng gi cho chng ta hnh dung cc phn t ca tp hp ang xp hng ch phc v, thut ng u tin gi cho ta hiu rng khng phi l " n trc- c phc v trc". V d ti bnh vin, cc bnh nhn xp hng ch phc v nhng khng phi ngi n trc th c phc v trc m h c u tin theo tnh trng khn cp ca C th ci t hng i u tin bng danh sch lin kt hoc cu trc cy. bnh.
36
Ng Hu Phc
min = j;
37
Ng Hu Phc
i vi gii thut chn trc tip, c th thy rng bc th i, bao gi cng cn (n-i) php so snh xc nh phn t nh nht hin hnh. S lng php so snh ny khng ph thuc vo tnh trng ca dy s ban u, do vy trong mi trng hp c th kt lun : S ln so snh = S ln hon v (mt hon v bng 3 php gn) li ph thuc vo tnh trng ban u ca dy s, ta ch c th c lc trong tng trng hp nh sau : Trng hp Tt nht Xu nht 5.3. Sp xp chn.
S php gn 0 3n(n-1)/2
th t. tng chnh ca gii thut sp xp bng phng php chn trc tip l tm cch chn phn t ai vo v tr thch hp ca on c sp c dy mi a1 , a2 ,... ,ai tr nn c th t. V tr ny chnh l v tr gia hai phn t ak-1 v ak tha ak-1 < ai < ak (1<k<i). Cho dy ban u a1 , a2 ,... ,an, ta c th xem nh c on gm mt phn t a1 c sp, sau thm a2 vo on a1 s c on a1 a2 c sp; tip tc thm a3 vo on a1 a2 c on a1 a2 a3 c sp; tip tc cho n khi thm xong aN vo on a1 a2 ...aN-1 s c dy a1 a2.... aN c sp. Cc bc tin hnh nh sau :
Bc 1: i = 2;
// gi s c on a[1] c sp
Bc 3: Di ch cc phn t t a[pos] n a[i-1] sang phi 1 v tr dnh ch cho a[i] Bc 4: a[pos] = x; Bc 5: i = i+1; 38 // c on a[1]..a[i] c sp
Ng Hu Phc
V d Cho dy s a: 12 2 8 5 1 6 4 15
Ci t
Procedure InsertionSort(var a:m1c; N:integer); var pos, i,x:integer; Begin for i:=1 to N do begin x := a[i]; pos := i-1; while((pos >= 0) and (a[pos] > x)) do Begin a[pos+1] := a[pos]; pos:=pos -1; end; a[pos+1] := x; end; End;
a[i-1], do on c sp, nn c th s dng gii thut tm nh phn thc hin vic tm v tr pos, khi c gii thut sp xp chn nh phn :
nh gi gii thut i vi gii thut chn trc tip, cc php so snh xy ra trong mi vng lp while tm v tr thch hp pos, v mi ln xc nh v tr ang xt khng thch hp, s di ch phn t a[pos] tng ng. Gii thut thc hin tt c N-1 vng lp while , do s lng php so snh v di ch ny ph thuc vo tnh trng ca dy s ban u, nn ch c th c lc trong tng trng hp nh sau : Trng hp Tt nht S php so snh S php gn
39
Ng Hu Phc
5.4. Sp xp ni bt.
Gii thut tng chnh ca gii thut l xut pht t cui (u) dy, i ch cc cp
phn t k cn a phn t nh (ln) hn trong cp phn t v v tr ng u (cui) dy hin hnh, sau s khng xt n n bc tip theo, do vy ln x l th i s c v tr u dy l i. Lp li x l trn cho n khi khng cn cp phn t no xt. Cc bc tin hnh nh sau : Bc 1 : i = 1; // ln x l u tin
Bc 2 : j = N;
Bc 3 : i = i+1;
// ln x l k tip : Lp li Bc 2.
V d Cho dy s a: 12 2 8 5 1 6 4 15
40
Ng Hu Phc
Ci t
Procedure BubleSort(var a:m1c; N:integer ); var i, j,tg:integer; Begin for i:= 2 to N-1 do for j :=N-1 downto i do if (a[j]< a[j-1]) then begin tg:=a[j];a[j]:=a[j-1];a[j-1]:=tg; end; End;
nh gi gii thut i vi gii thut ni bt, s lng cc php so snh xy ra khng ph thuc vo tnh trng ca dy s ban u, nhng s lng php hon v thc hin ty thuc vo kt qa so snh, c th c lc trong tng trng hp nh sau: Trng hp Tt nht Xu nht S ln so snh S ln hon v 0
5.5. Sp xp nhanh. sp xp dy a1, a2, ..., an gii thut QuickSort da trn vic phn hoch dy ban u thnh hai phn: Dy con 1: Gm cc phn t a1.. ai c gi tr khng ln hn x Dy con 2: Gm cc phn t ai .. an c gi tr khng nh hn x
vi x l gi tr ca mt phn t ty trong dy ban u. Sau khi thc hin phn hoch, dy ban u c phn thnh 3 phn: 1. ak < x , vi k = 1..i 2. ak = x , vi k = i..j 3. ak > x , vi k = j..N
41
Ng Hu Phc
Trong dy con th 2 c th t, nu cc dy con 1 v 3 ch c 1 phn t th chng cng c th t, khi dy ban u c sp. Ngc li, nu cc dy con 1 v 3 c nhiu hn 1 phn t th dy ban u ch c th t khi cc dy con 1, 3 c sp. sp xp dy con 1 v 3, ta ln lt tin hnh vic phn hoch tng dy con theo cng phng php phn hoch dy ban u va trnh by .
Ci t
void QuickSort(int *a, int trai, int phai) { int int i,j; x; // ch?n ph?n t? gi?a lm gi tr? m?c
while(a[i] < x) i++; while(a[j] > x) j--; if(i <= j) { Hoanvi(&a[i],&a[j]); i++ ; j--; } } while(i < j); if(trai < j) QuickSort(a,trai,j); if(i < phai) QuickSort(a,i,phai); }
NHN XT
Ng Hu Phc
Gi tr mc x c chn s c tc ng n hiu qu thc hin thut ton v n quyt nh s ln phn hoch. S ln phn hoch s t nht nu ta chon c x l phn t median ca dy. Tuy nhin do chi ph xc nh phn t median qu cao nn trong thc t ngi ta khng chn phn t ny m chn phn t nm chnh gia dy lm mc vi hy vng n c th gn vi gi tr median
nh gi gii thut
Hiu qa thc hin ca gii thut QuickSort ph thuc vo vic chn gi tr mc. Trng hp tt nht xy ra nu mi ln phn hoch u chn c phn t median (phn t ln hn (hay bng) na s phn t, v nh hn (hay bng) na s phn t cn li) lm mc, khi dy c phn chia thnh 2 phn bng nhau v cn log2(n) ln phn hoch th sp xp xong. Nhng nu mi ln phn hoch li chn nhm phn t c gi tr cc i (hay cc tiu) l mc, dy s b phn chia thnh 2 phn khng u: mt phn ch c 1 phn t, phn cn li gm (n-1) phn t, do vy cn phn hoch n ln mi sp xp xong. Ta c bng tng kt Trng hp Tt nht Xu nht 5.6. Heap Sort.
5.6.1. tng:
phc tp n*log(n) n2
Nhn xt: Khi tm phn t nh nht bc i, phng php sp xp chn trc tip khng tn dng c cc thng tin c c do cc php so snh bc i1. V l do trn ngi ta tm cch xy dng mt thut ton sp xp c th khc phc nhc im ny. Mu cht gii quyt vn va nu l phi tm ra c mt cu trc d liu cho php tch ly cc thng tin v s so snh gi tr cc phn t trong qua 43
Ng Hu Phc
Trong mt phn t mc i chnh l phn t ln trong cp phn t mc i+1, do phn t mc 0 (nt gc ca cy) lun l phn t ln nht ca dy. Nu loi b phn t gc ra khi cy (ngha l a phn t ln nht v ng v tr), th vic cp nht cy ch xy ra trn nhng nhnh lin quan n phn t mi loi b, cn cc nhnh khc c bo ton, ngha l bc k tip c th s dng li cc kt qu so snh bc hin ti.
5.6.2. nh ngha Heap:
Heap c nh ngha l mt dy cc phn t ap, a2 ,... , aq tho cc quan h sau vi mi i thuc [p, q]: 1/. 2/. ai >= a2i ai >= a2i+1 {(ai , a2i), (ai ,a2i+1) l cc cp phn t lin i }
Mi dy a1 , a2 ,... , an, dy con aj, aj+1,, an to thnh mt heap vi j=(n div 2 +1).
5.6.4. Gii thut Heapsort :
Gii thut Heapsort tri qua 2 giai on : Giai on 1 :Hiu chnh dy s ban u thnh heap; Giai on 2: Sp xp dy s da trn heap: Bc 1: a phn t r = n; Honv (a1 , ar ); Bc 2: Loi b phn t ln nht ra khi heap: r = r-1; 44 ln nht v v tr ng cui dy:
Cu trc d liu v gii thut Hiu chnh phn cn li ca dy t a1 , a2 ... ar thnh mt heap.
Ng Hu Phc
Bc 3: Nu r>1 (heap cn phn t ): Lp li Bc 2 Ngc li : Dng Da trn tnh cht ca Heap ta c th thc hin giai on 1 bng cch bt u t heap mc nhin an/2+1 , an/2+2 ... an, sau thm dn cc phn t an/2, an/2-1, ., a1 ta s nhn c heap theo mong mun. // Heap sort Mang a bat dau tu 1 void Shift (int *a, int trai, int phai )// hieu chinh { int x,i,j; i = trai; j =2*i; // (ai , aj ), (ai , aj+1) l cc ph?n t? lin ??i x = a[i]; while (j<phai) { if (j<phai) else { a[i] = a[j]; i = j; // xt ti?p kh? n?ng hi?u ch?nh lan truy?n j = 2*i; a[i] = x; } } } void CreateHeap(int *a, int N )// N chi so ben phai cung { int trai; // a[l] l ph?n t? ghp thm trai = N/2+1; while (trai > 0) { Shift(a,trai,N); trai = trai -1; } 45 if (a[j]<a[j+1]) j = j+1; if (a[j]<x) break;// tho? quan h? lin ??i, d?ng.
Cu trc d liu v gii thut } void HeapSort (int *a, int N)// N chi so ben phai cung { int r;
Ng Hu Phc
CreateHeap(a,N); r = N; // r l v? tr ?ng cho ph?n t? nh? nh?t while(r > 0) { Hoanvi(&a[1],&a[r]); r = r -1; Shift(a,1,r); } }
46
Ng Hu Phc
Bi 6. CU TRC CY.
6.1. Khi nim v cy.
6.1.1. nh ngha:
Mt cy l mt tp hp hu hn cc nt, trong c mt nt c bit gi l nt gc, gia cc nt c quan h phn cp cha-con. C th nh ngha cy mt cch qui nh sau: 1/ Mt nt l mt cy v chnh l nt gc ca cy ny. 2/ Nu T1, T2,Tk l cc cy vi cc nt gc l n1, n2,, nk. Gi s n0 l mt nt c cc nt con l n1, n2,, nk th ta s c cy T vi nt gc l n0. Qui c cy khng c mt nt no c l cy rng Cc ng dng ca cy: + Biu din cy th mc
Cu trc d liu v gii thut mt nt trong cy ). Cy c bc n th gi l cy n-phn. Nt gc : nt khng c nt cha Nt l : khng c nt con - nt bc 0. Nt nhnh : l nt c bc khc 0 v khng phi l gc. Mc ca mt nt : + Mc (gc(T))=0. + Gi T1,T2,T3,.,Tn l cy con ca T0. Mc (T1)=Mc(T2)=Mc(T3)=.=Mc(Tn)=Mc(T0)+1.
Ng Hu Phc
Chiu cao ca mt nt: L di ng i t nt n nt l xa nht. su ca mt nt (mc ca mt nt): L chiu di ng i t nt gc n nt . Chiu cao ca mt cy: L chiu cao ca nt gc. Nhn xt Trong cu trc cy khng tn t chu trnh. T chc mt cu trc cy cho php truy cp nhanh n cc phn t ca n.
6.1.3. Cy c gc:
cy v nh hng cc cnh trn cy c hng t gc i ra th ta c mt th c Ch : Cng mt cy, nu ta chn gc khc nhau th cy c gc thu c s khc nhau. V d
a a b c d e f g h d e f g b c h a g b c e d f
48
Ng Hu Phc T2 T3
Nu ta phn bit th t cc nt con ca cng mt nt th cy gi l cy c th t, th t qui c t tri sang phi. Nh vy, nu k th t th hai cy sau l hai cy khc nhau:
Trong trng hp ta khng phn bit r rng th t cc nt th ta gi l cy khng c th t. Cc nt con cng mt nt cha gi l cc nt anh em rut (siblings). Quan h "tri sang phi" ca cc anh em rut c th m rng cho hai nt bt k theo qui tc: nu a, b l hai anh em rut v a bn tri b th cc hu du ca a l "bn tri" mi 6.2. Cy nh phn.
6.2.1. Cc khi nim c bn.
hu
du
ca
b.
nh ngha: Cy nh phn l mt cu trc cy c c im mi nt c ti a 2 nt con. Tnh cht: (1) S lng ti a cc nt mc i trn cy NP l 2i CM: i=0 => c ti a 1 nt ng I=1 => c ti a 2 nt ng Gi s ng vi i-1 => c 2i-1 nt Cn chng minh ng vi i: mc i -1 c 2 i-1 nt, vi cy NP mi nt c ti a 2 nt con => mc i c ti a 2.2i-1 = 2i (pcm) (2) S lng ti a cc nt trn cy NP c chiu cao h l 2(h+1)-1 (h>=0) T (1)=> s nt ti a trn cy c chiu cao h l 20+21+ ...+ 2h=a1* (1-qn)/(1-q)=20*(1-2h+1)/(1-2)=2(h+1)-1 49
Ng Hu Phc
+) Dng mng biu din cy nh phn nh s cc nt theo chiu t tri sang phi, t trn xung di ta thy xut hin qui lut sau: Con ca nt th i l cc nt v tr 2*i v 2*i+1. Cha ca nt j l nt v tr j div 2 => c th lu tr cy NP bng mng VD:
Hn ch: vi cy NP khng y mng s rng nhiu. +) Dng danh sch mc ni struct NODE { }; NODE *Root; void init(NODE **Root) 50 int Key; struct NODE *pLeft, *pRight;
Ng Hu Phc
void LRN(NODE *r) { { if (r != NULL) LRN(r->pLeft); LRN(r->pRight); printf ("%d--",r->Key ); } } 6.4. Bi tp. 51
Ng Hu Phc
Bi 7. CY NH PHN TM KIM.
7.1. Khi nim cy nh phn tm kim.
nh ngha: Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt, kha ca nt ang xt ln hn kha ca tt c cc nt thuc cy con tri v nh hn kha ca tt c cc nt thuc cy con phi. Di y l mt v d v cy nh phn tm kim:
Nh rng buc v kha trn CNPTK, vic tm kim tr nn c nh hng. Hn na, do cu trc cy vic tm kim tr nn nhanh ng k. Nu s nt trn cy l N th chi ph tm kim trung bnh ch khong log2N. Trong thc t, khi xt n cy nh phn ch yu ngi ta xt CNPTK. 7.2. Tm mt phn t x trong cy. NODE* searchNode(NODE *r, int X) { if(r!=NULL) { if(r->Key == X) if(r->Key > X) return searchNode(r->pLeft, X); else return searchNode(r->pRight, X); } return NULL; 52 return r;
Cu trc d liu v gii thut } Kh qui NODE *searchNode1(NODE *r, int x) { NODE *p; p = r; while (p != NULL) { if(x == p->Key) return p; else if(x < p->Key) else } return NULL; } p = p->pLeft; p = p->pRight;
Ng Hu Phc
D dng thy rng s ln so snh ti a phi thc hin tm phn t X l h, vi h l chiu cao ca cy. Nh vy thao tc tm kim trn CNPTK c n nt tn chi ph trung bnh khong O(log2n) . V d: Tm phn t 55
7.3. Thm mt phn t x vo cy. Vic thm mt phn t X vo cy phi bo m iu kin rng buc ca CNPTK. Ta c th thm vo nhiu ch khc nhau trn cy, tuy nhin thm vo mt nt l s l d thc hin nht, do ta c th thc hin qu trnh tng t thao tc tm kim. Khi chm dt qu trnh tm kim cng chnh l lc tm c ch cn thm. 53
Cu trc d liu v gii thut cng: int insertNode(NODE **r, int X) { if((*r)!=NULL) { if((*r)->Key == X)return 0; if((*r)->Key > X) return insertNode(&((*r)->pLeft), X); else return insertNode(&((*r)->pRight), X); } (*r) = new NODE(); = X; if((*r) == NULL) return -1; (*r)->Key return 1; } 7.4. Xa nt trn cy. (*r)->pLeft =NULL; (*r)->pRight = NULL;
Ng Hu Phc
Vic hy mt phn t X ra khi cy phi bo m iu kin rng buc ca CNPTK. C 3 trng hp khi hy nt X c th xy ra: X - nt l. X - ch c 1 cy con (tri hoc phi). X c c 2 cy con Trng hp th nht: ch n gin hy X v n khng mc ni n phn t no khc. Trng hp th hai: trc khi hy X ta mc ni cha ca X vi con duy nht ca n. Trng hp cui cng: ta khng th hy trc tip do X c 2 con Ta s hy gin tip. Thay v hy X, ta s tm mt phn t th mng Y. Phn t ny c ti a mt con. Thng tin lu ti Y s c chuyn ln lu ti X. Sau , nt b hy tht s s l Y ging nh 2 trng hp u. Vn l phi chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK. C 2 phn t tha mn yu cu: 54
Cu trc d liu v gii thut Phn t nh nht (tri nht) trn cy con phi. Phn t ln nht (phi nht) trn cy con tri. // Remove mot nut void searchFor(NODE **p, NODE **q) { if( (*q)->pLeft!=NULL ) searchFor(p, &((*q)->pLeft) ); else { (*p)->Key= (*q)->Key; *p=*q;// nut can xoa *q } } int delNode(NODE **r, int X) { if((*r)==NULL) if((*r)->Key > X) return delNode ( &((*r)->pLeft), X); if((*r)->Key < X) return delNode (&((*r)->pRight), X); else { //T->Key == X NODE *p = *r; if((*r)->pLeft == NULL) (*r) (*r) else { delete p; } } searchFor(&p, &((*r)->pRight)); = (*r)->pRight; else if((*r)->pRight == NULL) = (*r)->pLeft; return 0; = (*q)->pRight;
Ng Hu Phc
55
Ng Hu Phc
Trong cy trn th n1, n2,..., n7 l cc tn nt cn *, +, -, a, b, c l cc nhn ca nt. Mi nt l s biu din cho mt ton hng n c. Mi nt trung gian s biu din cho mt ton t. Gi s nt n biu din cho ton t 2 ngi, nt con bn tri biu din cho biu thc E1, nt con bn phi biu din cho biu thc E2 th nt n s biu din cho biu thc E E2 Thm cc nt trn cy theo th t trc cho chng ta biu thc tin t (Prefix), Theo th t gia cho chng ta biu thc trung t (Infix) V theo th t sau cho chng ta biu thc hu t (Postfix) ca biu thc ton hc ban u. V d: i vi cy biu thc c cho v d trn, ta c: + Biu thc tin t : * + a b - a c. + Biu thc trung t : a + b * a - c. + Biu thc hu t : a b + a c - *. 7.6. Cy quyt nh: Cy biu din li gii ca bi ton thng qua nhiu la chn gi l cy quyt nh. V d:
56
Ng Hu Phc
57
Ng Hu Phc
Mun thc hin tm kim nh phn th trc ht chng ta phi sp xp d liu u vo (gi s sp xp tng dn). TTon: B1: Phm vi tm kim l ton b danh sch. B2: So snh phn t cn xc nh Item vi phn t chnh gia ca phm vi tm kim (gi l x). Nu: Item> x th phm vi tm kim mi s l cc phn t sau ca x. Nu: Item< x th phm vi tm kim mi s l cc phn t trc ca x. Nu: Item=x th thng bo l tm thy, kt thc chng trnh. B3: Nu tn ti phm vi tm kim th lp li bc 2, ngc li th kt thc chng trnh v thng bo l khng tm thy. int Binary_Search(int *a, int n, int Item) { int last, first, mid; bool found; found=false; 58
Cu trc d liu v gii thut first=0; last=N-1; while ((!found)&&(first<=last)) { mid=int((first+last)/2); if (a[mid]>Item) last=mid-1; else if (Item>a[mid]) first =mid+1; else { } } return -1; } BT1: Lit k cc bc tm kim s 9 trong dy: 1, 3, 4, 5, 6, 8, 9, 11
8.3.2. Tm kim trn cy nh phn (trong phn CNPT)
Ng Hu Phc
Trong hu ht cc ng dng, kho c dng nh mt phng thc truy xut d liu mt cch gin tip. Hm bm l hm c dng nh x mt kho vo mt a ch trn bng bm. Chng ta gi h(k) l gi tr hm bm ca kha k. Trng hp h(ki) =h(kj) th hm bm b ng , khi ta phi x l thm sao cho vn lu tr c ia ch ring bit ca cc bn ghi c kha ki v kj.
8.4.2. Hm bm kiu chia
Ng Hu Phc
8.5. Cc phng php khc phc ng C nhiu phng php khc nhau khc phc ng , tuy nhin chung ta c th chia chng thnh 2 loi: (1) Phng php a ch m: Da trn nguyn tc nh sau: vi a ch bn th ngi ta tm cc a ch cn trng ngay tip sau thay th. (2) Phng php mc xch: Cc bn ghi xy ra ng c lu vo mt danh sch tuyn tnh.
8.5.1. Phng php a ch m
*) Phng php th tuyn tnh Gi s x l kha m ta cn xc nh a ch trong bng bm. h0 = h(x) nu h0 bn th ta tm cc a ch tip theo hi=(h0+i) mod m vi i=1,2,.. Khi n cui bng m vn cha tm c a ch trng th quay v u bng, tm tip cho n khi thy a ch trng hoc quay v ng a ch ban u => bng bm trn. vd: cho cc kha k[i]=140, 122, 178, 110, 160, 147, 291, 182,300,305 m=7 h(ki) mod 7 =0, 3, 3, 5,6,0,4,0,6,4 0 1 2 140 147 182 60
Cu trc d liu v gii thut 3 4 5 6 7 8 9 Nxt: 122 178 110 160 291 300 305
Ng Hu Phc
Bng bm ny ch ti u khi bm u, ngha l, trn bng bm cc khi c cha vi phn t v cc khi cha s dng xen k nhau, tc truy xut lc ny c bc 0(1). Trng hp xu nht l bm khng u hoc bng bm y, lc ny hnh thnh mt khi c c n phn t, nn tc truy xut lc ny c bc 0(n). *) Phng php cu phng h0=h(x) = x mod m; Nu h0 bn th cc a ch tip theo s c xt: hi=( h0+i) mod m;i =1,2,.., m div 2. Nhc im: C th xy ra trng hp c (m div 2) a ch th u bn => bng bm trn, tuy nhin l trong bng bm vn cn a ch trng.
8.5.2. Phng php mc xch
*) Phng php mc ni ngoi #define M 100 struct node { int key; struct node *next }; //khai bao kieu con tro chi nut Node * hashTable[M]
61
Ng Hu Phc
Ch dng khng gian a ch c ca bng bm (khng cp php thm nh trong phng php mc ni ngoi). Thm kha x: nu h(x) cn trng th thm vo a ch ny v n s l a ch u tin ca danh sch mc ni. Nu h(x) bn th xy ra 2 kh nng: (gi k l kha hin din ti a ch h(x)) - Nu h(k)=h(x) => kha x s thuc danh sch lin kt c nt u tin ti h(k). Tm kha x trong danh sch ny: Nu thy php tm kim tha mn. Nu khng thy x th phi tm mt a ch trng (d tun t) thm kha x vo v b sung x vo danh sch lin kt. - Nu h(k)<>h(x) => Ta phi tm trng a kha k sang . Ch phi iu chnh cc con tr ti n v xut pht t n. a kha x vo v tr h(x). 8.6. ng dng ca hm bm - Trong bo mt thng tin: M ha RSA, ch k s PP m ho RSA: Chn 2 s nguyn t p,q ln, N=p*q; Chn s nguyn t E (1<E<n) lm kho m; Tnh kho gii m D (D*E=1 mode ((p-1)*(q-1))). Kho E l cng khai dng m ha, D l m b mt dng gii m. VD: c tp T cn m ho M ho C=(T^E) mode N Gii m T=(C^D) mode N Mt ngi X, mun d liu c gi t nhng ngi khc n anh ta c bo mt, khi X s gi cho h m cng khi E, N v cng thc m ha tp cn m ha T l C=(T^E) mode N. VD: V d: 62
Cu trc d liu v gii thut P=5; Q=11; chn E=7; Tnh D theo cng thc E*D=1 (mod (p1-)*(q-1))= 1 (mod 40) 7 * D = 1 (mod 40) 7 * D = K * 40 + 1, K l mt s no Chn K=4 -> D=23 7 * 23 = 161 = 4 * 40 + 1
Ng Hu Phc
E l kha cng khai dng m ha, D l kha ring (b mt) dng gii m Tin hnh m ha, gii m hai s 31 v 7 M ha: 31^7 (mod 55) = 27512614111 (mod 55) =26 7^7 (mod 55) = 823543 (mod 55) =28 Gii m: 26^23 (mod 55) = 350257144982200575261531309080576 (mod 55) =31 28^23 (mod 55) = 1925904380037276068854119113162752 (mod 55) = 7 Ch k s: Gi s c mt cng ty bun bn qu cho php nhn n hng qua Internet, c cc yu cu sau: +Ch cng ty mi c kh nng nhn n hng. (khch hng mun n hng ca h c gi b mt) +Cng ty c th kim tra chnh xc mt n hng c phi ca khch hng X hay khng. Cch thc hin: Mi khch hng X chn mt eX lm m cng khai, dX m b mt. Cng ty cng chn eC v dC Vi yu cu 1: X s m ha H bng eC Cty gii m bng dC Vi yu cu th 2: X s m ha bng dX, sau li m tip bng eC Cty gii m bng dC, sau bng eX. - S dng hm bm to cc file ch s trong h qun tr CSDL SQL Server v Oracle.
63
Ng Hu Phc
64