You are on page 1of 64

Cu trc d liu v gii thut

Ng Hu Phc

MN HC CU TRC D LIU V GII THUT


Bi 1: GII THIU V THUT TON V CU TRC D LIU 1.1. Khi nim thut ton
1.1.1. nh ngha:

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:

Khi hnh bnh hnh in cc gi tr. Cc ng ni cc nt vi nhau.

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

Cu trc d liu v gii thut n v.

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

Cu trc d liu v gii thut Bi 2 : QUY 2.1. Khi nim v quy.

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

Cu trc d liu v gii thut } v d 2 : Dy Fibonacci fib(n)=fib(n-2)+fib(n-1) nu n>2 fib(n)=1; nu n<=2


int F(int n) { if (n == 0 || n == 1) return 1; else return F(n-1) + F(n-2); }

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

4. Tng t ta dng mng dcp vi ngha: dcp[k]=1 nu ng cho ph th

cot[j]:=1; dcc[i-j]:=1; dcp[i+j]:=1;{ghi nhn trng thi mi}

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)

Cu trc d liu v gii thut 2.6. Tnh ng n ca cc gii thut quy

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:

Truy cp n phn t ca mng: Billy[2]=100; x=Billy[1];


Mng nhiu chiu: int jimmy [3][5];

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

xo mt phn t ca mng, ta ch cn y cc phn t t v tr cn xo i mt nh v u mng.


3.2.4. Tm kim cc phn t trong mng

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

3.2.6. Bi tp. Vit mt chng trnh cng hai s nguyn ln c di n 300 ch s.

16

Cu trc d liu v gii thut 3.3. DANH SCH LIN KT.


3.3.1. Mt s php ton trn danh sch

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 v s dng con tr C++

- Khai bo:
type * pointer_name;

VD:
int * i;char * c; float * f;

- Cp pht vng nh v dng con tr p qun l


Pointer_name = new type ([Init_value])

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

Cu trc d liu v gii thut


Khi to danh sch rng: Head=NULL; To mt phn t cho danh sch

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; }

Kim tra danh sch c rng hay khng


bool Empty(NODE *h) { return (h==NULL); }

Thm mt phn t vo u danh sch

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

Cu trc d liu v gii thut


NODE* InsertHead(NODE **h, int x) { NODE* xNew = GetNode(x); if (xNew ==NULL) return NULL; if (*h==NULL) { *h = xNew; } else { xNew->pNext = *h; *h = xNew; } return xNew; }

Ng Hu Phc

Chn mt phn t vo sau phn t q trong danh sch

Head an an-1

q an-2 a1

x p

Thut ton chn phn t p: Nu ( p != NULL) th B1 : p -> Next = q->Next; B2 : q->Next = p ;

Bt u :

NODE * InsertAfter(NODE **q, int x) { NODE* new_ele = GetNode(x);

20

Cu trc d liu v gii thut


if (new_ele ==NULL) return NULL; if ( *q!=NULL) { new_ele->pNext = (*q)->pNext; (*q)->pNext = new_ele;

Ng Hu Phc

} else //chn vo ??u danh sch InsertHead(&Head, x); }

Chn phn t vo cui danh sch

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 :

NODE* InsertTail(NODE **h, int x) { NODE* new_ele = GetNode(x);

if (new_ele ==NULL) return NULL; if (*h==NULL) {

21

Cu trc d liu v gii thut


*h = new_ele; } else { NODE *p; p=*h; while (p->pNext !=NULL) p=p->pNext ; p->pNext = new_ele; } return new_ele; }

Ng Hu Phc

Th tc xa mt phn t ra khi danh sch Hy phn t u xu:

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

Cu trc d liu v gii thut


} return true; }

Ng Hu Phc

Hy mt phn t ng sau phn t q

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:

B21 : q->Next = p->Next; B22 : dispose(p);


{ NODE *p; if ( q != NULL) { p = q ->pNext ; if ( p != NULL) { bool RemoveAfter ( NODE *q)

// Hy bin ng do p tr n

q->pNext = p->pNext; delete p;

} } }

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;

bool RemoveNode(NODE *h, int k) { NODE *p = h;

23

Cu trc d liu v gii thut


NODE *q = NULL; while( p != NULL) { if(p->Info == k) break; q = p; p = p->pNext; } if(p == NULL) return false; //Khng tm th?y k if(q != NULL) { q->pNext = p->pNext; delete p; } else //p l ph?n t? ??u xu { RemoveHead(&Head); } return true; }

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)

duyt danh sch (v x l tng phn t) ta thc hin cc thao tc sau:

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

Cu trc d liu v gii thut


{ NODE *p; p = h; while (p!= NULL) { printf("%d == ",p->Info ); p = p->pNext; } printf("\n"); } Tm kim NODE *Search(NODE *h, int k) { NODE *p; p = h; while((p!= NULL)&&(p->Info != k)) p = p->pNext; return p; }

Ng Hu Phc

3.3.4. Cc loi danh sch lin kt khc. Danh sch lin kt vng

Con tr ca phn t u tin tr v phn t t cui danh sch.

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

Danh sch lin kt i ni vng

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

Cu trc d liu v gii thut

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

4.1.2. Ci t Stack bng mng.

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

B sung vo Stack void Push (int S[], t,x)

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

4.1.3. Ci t ngn xp bng danh sch lin kt.

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

Di y l thut ton bin i t dng trung t sang dng hu t

Cu trc d liu v gii thut D $/ $-/ E $-/ # $$

Ng Hu Phc abc+*d abc+*d abc+*de abc+*de/ 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

Cu trc d liu v gii thut hin php ton, kt qu c y vo trong ngn xp

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.

Gii thch cc php


PUSH(S,

PUSH(S,

4),

PUSH(S,

1),

PUSH(S,

3),

POP(S),

8), v POP(S) trn cu trc Stack S rng.

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

Hng i l mt cu trc d kiu hot ng theo nguyn tc vo trc ra trc -FIFO. u vo u ra

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

Cu trc d liu v gii thut


4.2.2. Ci t hng i bng mng:

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

Cu trc d liu v gii thut }; Node *F, *R;

Ng Hu Phc

- Khi to hng i : F=NULL; R=NULL; - Thm mt phn t p vo hng i Front a1 Rear

Front an an-1 an-2

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

Cu trc d liu v gii thut Mi phn t a trong hng i c u tin l p(a).

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

Cu trc d liu v gii thut

Ng Hu Phc

Bi 5. CC THUT TON SP XP.


5.1. Bi ton sp xp. Sp xp l qu trnh b tr li cc phn t ca mt tp hp no (hoc cc mu tin) theo mt th t xc nh. V d th t tng dn (gim dn) i vi mt dy s, theo th t t in i vi mt dy k t, 5.2. Sp xp chn. tng ca thut ton chn trc tip m phng mt trong nhng cch sp xp t nhin nht trong thc t: Chn phn t nh nht trong N phn t ban u, a phn t ny v v tr ng l u dy hin hnh; sau khng quan tm n n na, xem dy hin hnh ch cn N-1 phn t ca dy ban u, bt u t v tr th 2; lp li qu trnh trn cho dy hin hnh... n khi dy hin hnh ch cn 1 phn t. Dy ban u c N phn t, vy tm tt tng thut ton l thc hin N-1 lt vic a phn t nh nht trong dy hin hnh v v tr ng u dy. Cc bc tin hnh nh sau : Bc 1: i = 1; Bc 2: Tm phn t a[min] nh nht trong dy hin hnh t a[i] n a[N] Bc 3 : Hon v a[min] v a[i] Bc 4 : Nu i <N-1 th i = i+1; Lp li Bc 2 Ngc li: Dng. //N-1 phn t nm ng v tr. V d Cho dy s a: 12 2 8 5 1 6 4 15

Ci t thut ton sp xp chn trc tip thnh hm SelectionSort


void SelectionSort (int *a, int n) { int i, min,tg; for ( i=0 ; i<= n-2;i++) { min = i; for (int j = i+1 ;j<=n-1;j++) if (a[j ] < a[min]) if (min!=i) { tg=a[i];a[i]=a[min];a[min]=tg; } } } int A[N]; SelectionSort(A,n);

min = j;

37

Cu trc d liu v gii thut nh gi gii thut

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 ln so snh n(n-1)/2 n(n-1)/2

S php gn 0 3n(n-1)/2

Gii thut Gi s c mt dy a1 , a2 ,... ,an trong i phn t u tin a1 , a2 ,... ,ai-1 c

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 2: x = a[i]; Tm v tr pos thch hp trong on a[1] n a[i1] chn a[i] vo

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

Cu trc d liu v gii thut Nu i< n : Lp li Bc 2. Ngc li : Dng.

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 :

Ci tin thut ton : khi tm v tr thch hp chn a[i] vo on a[0] n

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

Cu trc d liu v gii thut Xu nht

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;

//Duyt t cui dy ngc v v tr i

Trong khi (j < i) thc hin: Nu a[j]<a[j-1]: a[j]?a[j-1];//xt cp phn t k cn j = j-1;

Bc 3 : i = i+1;

// ln x l k tip : Lp li Bc 2.

Nu i >N-1: Ht dy. Dng Ngc li

V d Cho dy s a: 12 2 8 5 1 6 4 15

40

Cu trc d liu v gii thut

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

Cu trc d liu v gii thut

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

x = a[(trai+phai)/2]; i =trai; j = phai; do {

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

V nguyn tc, c th chn gi tr mc x l mt phn t ty trong dy,


42

Cu trc d liu v gii thut c chn, khi k = (l +r)/ 2

Ng Hu Phc

nhng n gin, d din t gii thut, phn t c v tr gia thng

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

Cu trc d liu v gii thut trnh sp xp.

Ng Hu Phc

Gi s d liu cn sp xp l dy s : 5 2 6 4 8 1 c b tr theo quan h so snh v to thnh s dng cy nh sau :

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 }

5.6.3. Tnh cht ca Heap :

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

Cu trc d liu v gii thut

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

+ Biu din cc tp bao nhau

+ Biu din biu thc s hc

6.1.2. Cc khi nim:

Bc ca mt nt : l s con ca nt . Bc ca mt cy : l bc ln nht ca cc nt trong cy ( s cy con ti a ca 47

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:

nh ngha: hng gi l cy c gc.

Trong mt cy, nu ta chn mt nh c bit gi l gc ca

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

Cu trc d liu v gii thut T1


6.1.4. Cy c th t:

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

Cu trc d liu v gii thut


6.2.2. Biu din cy nh phn.

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;

Cu trc d liu v gii thut { *Root=NULL; } 6.3. Thm cc nt trn cy.


6.3.1. Thm cc nt trn cy theo th t trc (Node-Left-Right).

Ng Hu Phc

void NLR(NODE *r) { { if (r != NULL) printf ("%d--",r->Key ); NLR(r->pLeft); NLR(r->pRight); } }


6.3.2. Thm cc nt trn cy theo th t gia (Left- Node -Right).

void LNR(NODE *r) { { if (r != NULL) LNR(r->pLeft); printf ("%d--",r->Key ); LNR(r->pRight); } }


6.3.3. Thm cc nt trn cy theo th t sau (Left-Right-Node).

void LRN(NODE *r) { { if (r != NULL) LRN(r->pLeft); LRN(r->pRight); printf ("%d--",r->Key ); } } 6.4. Bi tp. 51

Cu trc d liu v gii thut

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

Hm insert tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh

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

Cu trc d liu v gii thut 7.5. Cy biu thc.


V d : Cy sau y s biu din cho biu thc (a + b) * (a - c)

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

Cu trc d liu v gii thut

Ng Hu Phc

57

Cu trc d liu v gii thut

Ng Hu Phc

Bi 8. CC PHNG PHP TM KIM


8.1. Bi ton tm kim. Bi ton tm kim c m t nh sau: Hy xc nh v tr ca phn t x trong mt bng lit k cc phn t phn bit x1, x2, x3, , xn hoc xc nh n khng c mt trong bng lit k . Li gii ca bi ton l v tr xut hin ca x trong bng lit k hoc a ra thng bo l x khng c trong bng. 8.2. Tm kim tun t. Tm kim tun t l phng php tm kim n gin v t nhin nht, phng php ny thng c nhiu ngi s dng, nht l trong trng hp tm kim trn file. Tuy vy tc tm kim ca phng php ny thng rt chm. TTon: TTon bt u bng vic so snh phn t cn xc nh Item vi phn u tin x1, nu cha thy th so snh vi cc phn t k tip cho n khi tm ra phn t cho hoc l t n phn t cui cng ca danh sch. 8.3. Tm kim nh phn.
8.3.1. Tm kim nh phn trn cu trc mng

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

found=true; return mid;

8.4. Tm kim da vo gi tr kha


8.4.1. Hm bm.

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

L hm c tnh ton d trn pha chia ly phn d h(k)= k mod m, m l mt s nguyn t. 59

Cu trc d liu v gii thut 7= 3


8.4.3. Hm bm kiu nhn

Ng Hu Phc

Nh vy k s nhn cc gi tr 0, 1, 2,, m-1.Vd: m=7; k=10-> h(k)= 10 mod

Gi tr kha c nhn vi chnh n. Vd: S th t 1 2 K 11 111 H(k) Ly 3 ch s u tin 121 123

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

Cu trc d liu v gii thut *) Phng php mc ni trong

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

Cu trc d liu v gii thut

Ng Hu Phc

Bi 9. Cy cn bng Bi 10. Mt s thut ton nn


10.1. Run Length 10.2. Huffman 10.3. LZ77,LZ78 10.4. LZW

64

You might also like