You are on page 1of 122

Smith Nguyen Studio.

Cu trc d liu v gii thut

Ngi thc hin: GVC. TS. Nguyn Trung Ha Email: ntrhoa@yahoo.com in thoi: 0904 162168

Ti liu tham kho


cng chng trnh
1. Cu trc d liu v gii thut
Xun Li, NXB HQGHN,2004

2. Cm nang thut ton R. Sedgewick, NXB Khoa hc v K thut,1994

http://gg.gg/sns

Smith Nguyen Studio.

Chng 1. Gii thut

1.1. Khi nim gii thut 1.2. Thit k gii thut 1.3. Phn tch v nh gi gii thut

1.1. Khi nim gii thut

1.1.1. Gii thut l g? 1.1.2. Cu trc d liu 1.1.3. Din t gii thut

http://gg.gg/sns

Smith Nguyen Studio.

1.1.1. Gii thut l g?

1.1.1. Gii thut l g?


V d m u
Cho mt dy cc s thc a1,a2,,an. Tm gi tr ln nht m ca cc s cho v ch s ln nht i trong cc s t gi tr m. V phi tm s ln nht vi ch s ln nht, ta s xut pht t s cui cng ca dy l an v s so snh vi cc s trc , khi tm thy mt gi tr ln hn th ta ghi li (nh du) v li tip tc so snh s ny vi cc s trc , cng vic s c thc hin cho n khi so vi s u tin.

http://gg.gg/sns

Smith Nguyen Studio.

1.1.1. Gii thut l g?


Gii thut l:
Cch lm gii quyt bi ton Mt dy c trnh t cc thao tc trn mt s i tng no sao cho sau mt s hu hn bc thc hin ta t c kt qu mong mun.
Vo Cc bcthc hin Ra

Mt gii thut c
u vo (Input): tp cc i tng (d liu) u ra(Output): mt tp cc gi tr (thng tin)

1.1.1. Gii thut l g?


Cc c trng ca gii thut
Tnh c i lng vo/ra Tnh xc nh Tnh hu hn (tnh dng) Tnh tng qut Tnh hiu qu

Mt vi c im cn lu
Khng cn bit gi tr c th ca kt qu sau mi bc, ch cn bit cch chuyn t bc trc ti bc sau; Kt qu c th ca gii thut c th khng phi l kt qu ng (chnh xc) mc du phng php l ng.

http://gg.gg/sns

Smith Nguyen Studio.

1.1.2. Cu trc d liu


D liu c cu trc:
Tp hp d liu C mi quan h vi nhau trong bi ton xc nh

La chn cu trc d liu v gii thut thch hp: rt quan trng


Vd: vit chng trnh tm kim s in thoi theo tn n v Gii thut + Dliu = Chng trnh

Biu din cu trc d liu trong b nh:


Lu tr trong
Thng qua cc bin

Lu tr ngoi
Tp (nh kiu v khng nh kiu)

1.1.3. Din t gii thut


Ngn ng t nhin
Ngn ng lit k cc bc

http://gg.gg/sns

Smith Nguyen Studio.

1.1.3. Din t gii thut


Gi ngn ng (my tnh)
Ch thch: /**/ hoc // Cc on ca thut ton c th c nh s th t. K t v biu thc
26 ch ci Latin + 10 ch s Php ton s hc: +, -, *, /, ^(ly tha), % Php ton quan h: <, >, ==, <=, >=, != Php ton logic: &&, ||, ! Gi tr logic: true, false Bin c ch s ha: ai, aij

Th t u tin ca cc php ton:


nh trong ngn ng C v cc ngn ng chun khc

Lnh gn: a = b; Khi lnh: { S1; S2; S3; }

1.1.3. Din t gii thut


Lnh iu kin:
if (B) S; if (B) {s1;s2;s3;} if (B) S1; else S2;

Lnh lp
for (i = 0 ; i<n; i++)
S;

for ( i = n; i>= 0; i--)


S;

do S while (B); while (B) S;

http://gg.gg/sns

Smith Nguyen Studio.

1.1.3. Din t gii thut


Lnh vo/ra:
read (<danh sch bin>) write (<danh sch bin hoc dng k t>)

Chng trnh con:


function <tn hm> (<danh sch tham s>) { S1; S2; Sn; return; // nu chng trnh con tr li mt gi tr }

Gi chng trnh con:


<tn hm> (<danh sch tham s thc s>)

1.1.3. Din t gii thut


lu
Mt s k hiu quy c
Bt u/ kt thc

Lnh gn
Lnh vo, lnh ra iu kin Ni tip on lnh Lung thc hin

Lnh iu khin c th l:
Khi lnh Lnh iu kin Lnh lp

http://gg.gg/sns

Smith Nguyen Studio.

1.1.3. Din t gii thut


Khi lnh
C php:
{ S1; S2; S3; } S1

S2

S3

1.1.3. Din t gii thut


Lnh iu kin
Cphp
If (iu_kin) hnh_ng

if (B) S1 Else S2;

B S2 S1

http://gg.gg/sns

Smith Nguyen Studio.

1.1.3. Din t gii thut


Lnh lp
Cphp:
while (B) S;

for (khi_to; iu_kin; cp_nht) hnh_ng

1.1.3. Din t gii thut


Do hnh_ng
While (iu_kin)

http://gg.gg/sns

Smith Nguyen Studio.

1.1.3. Din t gii thut


Ngn ng lp trnh
Ci t gii thut: ngn ng C/C++

1.2. Thit k gii thut

1.2.1. M un ha v vic gii quyt bi ton 1.2.2. Phng php tinh chnh tng bc (Stepwise Refinement) 1.2.3. V d

http://gg.gg/sns

10

Smith Nguyen Studio.

1.2.1. M un ha v vic gii quyt bi ton

Module ha bi ton
Chia bi ton ln (module chnh) thnh cc bi ton (module) nh hn Mi module thc hin cng vic c th no Lp i lp li cho n khi cc module l c ng, n th v bit cch gii quyt.
=> chin thut Chia tr

1.2.1. M un ha v vic gii quyt bi ton


Thit kTopdown t nh xung, hay t khi qut n chi tit.
Bc 1: Xc nh d kin u vo, yu cu t ra Bc 2: Xc nh cc cng vic ch yu (mi cng vic tng ng vi 1 module) Bc 3: Gii quyt tng cng vic mt cch chi tit bng cch lp i lp li bc 1 + 2

V d: Bi ton Qun l v bo tr cc h s v hc bng ca sinh vin, thng k lp bo co tng kt.

http://gg.gg/sns

11

Smith Nguyen Studio.

1.2.1. M un ha v vic gii quyt bi ton


Thit kTopdown Bc 1
Bc 1: Xc nh d kin u vo v cc yu cu t ra
u vo: Tp cc file bao gm cc thng tin vhc bng ca sinh vin: M SV, imTB, Mc HB Yu cu:
Tm kim v hin th thng tin ca bt k sinh vin no Cp nht thng tin ca mt sinh vin cho trc In bn tng kt

1.2.1. M un ha v vic gii quyt bi ton


Thit kTopdown Bc 2
Bc 2: Xc nh cc cng vic ch yu
c cc thng tin ca sinh vin t file vo b nh trong (c file) X l cc thng tin (X l thng tin) Lu thng tin cp nht vo file (Ghi file)

http://gg.gg/sns

12

Smith Nguyen Studio.

1.2.1. M un ha v vic gii quyt bi ton


Thit k Topdown Bc 3
Bc 3: Lp li bc 1 + 2
c file:
u vo: File thng tin trn a Yu cu: c file v lu vo mng: mi phn t mng lu thng tin ca mt sinh vin c ng

Ghi file:
u vo: Mng lu thng tin ca cc sinh vin Yu cu: Lu tr li file c ng

1.2.1. M un ha v vic gii quyt bi ton

Xl TT
u vo: Mng lu thng tin ca cc sinh vin Yu cu: Tm mt sinh vin cho trc Hin th thng tin ca sinh vin Cp nht thng tin ca sinh vin In bn tng kt

http://gg.gg/sns

13

Smith Nguyen Studio.

1.2.2 Phng php tinh chnh tng bc


Ban u gii thut c trnh by dng ngn ng t nhin Chi tit ha dn tinh chnh hng v pha ngn ng lp trnh Giai on trung gian gi ngn ng

1.2.3. V d
Bi ton: Sp xp mt dy n s nguyn theo th t tng dn Ngn ng t nhin ca gii thut:
T dy s nguyn cha c sp xp chn ra s nh nht v t vo u dy c sp xp Loi s nguyn ra khi dy cha c sp xp Lp li cho n khi dy cha c sp xp l rng

http://gg.gg/sns

14

Smith Nguyen Studio.

1.2.3. V d
Cu trc d liu:
Dy s ban u c lu tr trong mt mng mt chiu Dy sp xp s c lu trng vi dy cha sp xp => Gii thut: t s nh nht ca lt th i vo dy sp xp bng cch i ch vi s th i trong dy

Gi ngn ng
Tinh chnh ln 1 For (i=0; i<n; i++) { 1. Xt t ai n an-1 tm s nh nht aj 2. i ch ai v aj }

1.2.3. V d
Tinh chnh ln 2 Gii thut bc 1: Xt t ai n an-1 tm s nh nht aj
Coi ai l s nh nht ( j = i) So snh s nh nht v ai+1, s no nh hn th coi l s nh nht (nu ai+1< aj th j = i+1) Tip tc so snh s nh nht vi ai+2, ai+3, an-1, an Xc nh s nh nht bng cch nm c ch s ca n Tinh chnh bc 1 j = i; for (k = i+1; k<n; k++) If (ak< aj) j = k;

http://gg.gg/sns

15

Smith Nguyen Studio.

1.2.3. V d
Gii thut bc 2: i ch ai v aj, s dng mt bin trung chuyn Tinh chnh bc 2
tmp = ai; ai = aj; aj= tmp;

Tinh chnh ln 3
function SapXep(a, n) /* a l mng cc s nguyn, n l s phn t mng */ { For (i = 0; i<n; i++) {

1.2.3. V d
/* 1. Tm s nh nht */ j = i; for (k = i+1; k<n; k++) If (ak< aj) j = k+1; /* 2. i ch*/ tmp = ai; ai = aj; aj= tmp; } }

Bi tp: Trnh by ngn ng t nhin, cc bc tnh chnh v gii thut gii bi ton: Cho mt dy cc s nguyn a1,a2,,an. Tm gi tr ln nht m ca cc s cho v ch s ln nht i trong cc s t gi tr m.

http://gg.gg/sns

16

Smith Nguyen Studio.

Gii bi tp
Ngn ng t nhin
V phi tm s ln nht vi ch s ln nht, ta s xut pht t s cui cng ca dy l an v s so snh vi cc s trc , khi tm thy mt gi tr ln hn th ta ghi li (nh du) v li tip tc so snh s ny vi cc s trc , cng vic s c thc hin cho n khi so vi s u tin.

Tinh chnh ln u.
nht m l an, tt nhin lc ny k=n; 1) Xt i=i-1; 2) Nu i=0, th vit ra k, m (vic tm l xong - thut ton kt thc). 3) Nu ngc li th (so snh ai vi m) Nu ai > m th coi m l ai, k=i Quay li 1) (Chuyn qua xt s trc s th i).

0) xut pht t s cui cng ca dy l an (i=n) v tm thi coi gi tr ln

Gii bi tp
Tinh chnh ln 1:
i=n; m=ai i=i-1; While (i != 0) do { (1). Nu m<ai th ghi li m=ai v i (2). Gim i }

Tinh chnh ln 3:
function timmax(a,n,m,k); /* a l mng cc s nguyn, n l kch thc dy, m l gi tr ln nht, k l v tr cc i*/ { i=n; m=ai i=i-1; While (i > 0)

Tinh chnh ln 2:

Tinh chnh bc (1).


If (m<ai) { m=ai; k=i }

{ If (m<ai) { m=ai; k=i; } i=i-1;


}
}

Tinh chnh bc (2).


i=i-1

http://gg.gg/sns

17

Smith Nguyen Studio.

1.3. Phn tch gii thut

1.3.1. Ti sao cn phn tch gii thut? 1.3.2. Phn tch thut ton 1.3.3. phc tp gii thut

1.3.1.Ti sao cn phn tch gii thut?


Vit mt chng trnh chy thng l cha Chng trnh c th thc hin cha hiu qu! Nu chng trnh chy trn mt tp d liu ln, th thi gian chy s l mt vn cn lu Vd: Bi ton la chn Cho mt dy gm N s, hy tm phn t ln th k, vi k N.
Thut ton1:
(1) c N s vo mt mng (2) Sp xp mng theo th t gim dn (3) Tr li phn t v tr th k

http://gg.gg/sns

18

Smith Nguyen Studio.

1.3.1.Ti sao cn phn tch gii thut?


Thut ton2:
(1) c k phn t u tin vo mng v sp xp chng theo th t gim dn (2) Mi phn t cn li ch c mt ln Nu phn t l nh hn phn t th k, b qua Ngc li, t n vo v tr ph hp ca mng, y phn t hin ti ra khi mng. (3) Phn t ti v tr th k l phn t cn tm.

1.3.1.Ti sao cn phn tch gii thut?


Thut ton no l tt hn khi
N =100 v k = 100? N =100 v k = 1?

iu g s xy ra khi N = 1,000,000 v k = 500,000? Cn c nhng thut ton tt hn?

http://gg.gg/sns

19

Smith Nguyen Studio.

1.3.2. Phn tch thut ton


i tng phn tch
Chng ta ch phn tch nhng thut tonng Mt thut ton l ng?
Nu,vi mt d liu u vo, thut ton dng v a ra kt qu ng

Thut ton khng ng


C th khng dng vi mt s d liu u vo Dng nhng a ra kt qu sai

D on lng ti nguyn m thut ton yu cu


Ti nguyn gm
B nh Bng thng giao tip Thi gian tnh Thi gian thc hin GT(thng l quan trng nht)

1.3.2. Phn tch thut ton


Thi gian thc hin gii thut
Cc nhn t nh hng n thi gian tnh
My tnh Chng trnh dch Thut ton c s dng D liu u vo ca thut ton
Gi trca d liu nh hng n thi gian tnh Thng thng, kch thc ca d liu u vo l nhn t chnh quyt nh thi gian tnh Vi bi ton sp xp: s phn t cn sp xp Vi bi ton nhn ma trn: kch thc (s phn t) ca 2 ma trn

http://gg.gg/sns

20

Smith Nguyen Studio.

1.3.2. Phn tch thut ton


phc tp v thi gian Thut ton A mt 2 pht chy vi d liu u vo X. Thut ton B mt 1 pht 45 giy chy vi cng d liu X. Liu B c phi l thut ton tt hn A?
Khng hn l nh vy!
Ch kim tra vi mt b d liu X. C th vi d liu X ny B chy nhanh hn A, nhng vi phn ln cc d liu khc B chy chm hn A. Thut ton A b ngt bi cc tin trnh khc. Thut ton B c chy trn my tnh ccu hnh cao hn.

Php o cn phi khng ph thuc vo my.


o bng cch m s cc php tnh c s (php gn, php so snh, cc php tnh s hc, v.v.). Ta thng k hiu s lng cc php tnh, cc thao tc c bn (gn, so snh) ca mt thut ton l f(n).

1.3.2. Phn tch thut ton


Vd Bi ton Tnh tng cc s nguyn t 1 n n.
Thut ton 1
intsum = 0; for (int i = 1; i <= n; i++) sum = sum+ i;

Thut ton 2
intsum = ((n+1)*n) / 2;

http://gg.gg/sns

21

Smith Nguyen Studio.

1.3.2. Phn tch thut ton


Trng hp ti nht / trung bnh / tt nht Thi gian tnh tt nht: Thi gian ti thiu cn thit thc hin thut ton vi mi b d liu u vo kch thc n. Thi gian tnh ti nht: Thi gian nhiu nht cn thit thc hin thut ton vi mi b d liu u vo kch thc n. Thi gian trung bnh: cn thit thc hin thut ton trn tp hu hn cc u vo kch thc n. Vic xc nh phc tp tnh ton nhiu khi cn ph thuc vo tnh trng ca d liu. Do ta phi xt ti f(n) trong trng hp thun li nht, f(n) trong trng hp xu nht v f(n) trong trng hp trung bnh. Tuy nhin vic xc nh f(n) trong trng hp trung bnh thng kh khn. V vy, trong cc trng hp f(n) xc nh kh khn ta ly f(n) trong trng hp xu nht nh gi phc tp tnh ton ca gii thut.

1.3.2. Phn tch thut ton


iu quan trng i vi gii thut l
Mt bao nhiu giy chy vi d liu u vo c kch thc n? Thi gian tnh ph thuc vo kch thc d liu u vo

Mt s tc thay i ca thi gian tnh khi n tng.


Thut ton c thi gian hng s: nu thi gian chy ca n l khng i khi kch thc d liu thay i. Thut ton c thi gian tuyn tnh: nu thi gian chy ca n t l thun vi n. Thut ton c thi gian tnh l hm s m nu thi gian chy tng theo mt hm s m ca n.

http://gg.gg/sns

22

Smith Nguyen Studio.

1.3.3. phc tp gii thut


nh ngha bc O-ln Gi s f(n) v g(n) l hai hm xc nh trn mt tp hp cc s nguyn dng. Ta ni rng f(n) c bc O-ln ca g(n), v vit f(n)=O(g(n)) hoc f=O(g) nu tn ti hng s C>0 sao cho vi n ln, cc hm f(n) v g(n) u dng, ng thi f(n)<Cg(n). O(g) c trng cho tng ca hm. V d. Nu f(n) l a thc adnd+ad-1nd-1++a1n+a0 trong ad>0 th f(n)=O(nd) Mt vi tnh cht
Nu f1(n)=Og(n), f2(n)=Og(n) th f1+f2=O(g) Nu f1=O(g1), f2=O(g2) th f1f2=O(g1g2) Nu tn ti gii hn

lim
n

f ( n) g ( n)

th f=O(g)

Vi mi s >0 th log(n)=O(n)

1.3.3. phc tp gii thut


nh ngha
Mt thut ton c gi l c phc tp a thc (hoc gi l c thi gian a thc) nu s php tnh cn thit thc hin thut ton khng vt qu O(logd(n)), trong n l ln ca d liu u vo v d l s nguyn dng no .

c lng phc tp ca gii thut ngi ta thng so snh khi lng tnh ton f(n) ca mt gii thut vi mt hm g(n) no thng qua bc Oln ca g(n), m thng thng g(n) l cc hm sau y (vi th t c tng ln dn):

http://gg.gg/sns

23

Smith Nguyen Studio.

1.3.3. phc tp gii thut


g(n)=1; g(n)=logn; g(n)=n; g(n)=nlogn; g(n)=n2; g(n)=n2logn; g(n)=n3; g(n)=2n; g(n)=n! thi gian hng s thi gian logarit thi gian tuyn tnh bnh phng m 3 hm s m n giai tha

1.3.3. phc tp gii thut


Bng minh ha phc tp ca gii thut
phc tp f(n)

http://gg.gg/sns

24

Smith Nguyen Studio.

1.3.3. phc tp gii thut


nh ngha
Gi s f(n) v g(n) l hai hm xc nh trn mt tp hp cc s nguyn dng. Ta ni rng f(n) c bc Omega-ln ca g(n), v vit f(n)=(g(n)) hoc f= (g) nu tn ti hng s C>0 sao cho vi n ln, cc hm f(n) v g(n) u dng, ng thi f(n)>Cg(n). iu c ngha l f(n) tng khng chm hn g(n) vi n ln Tc tng ca f(n) ln hn hoc bng tc tng ca g(n).

1.3.3. phc tp gii thut


nh ngha
Gi s f(n) v g(n) l hai hm xc nh trn mt tp hp cc s nguyn dng. Ta ni rng f(n) c bc Theta-ln ca g(n), v vit f(n)=(g(n)) hoc f= (g) nu tha mn ng thi f(n)= O(g(n)) v f(n)= (g(n)). iu c ngha l f(n) giao ng chung quanh g(n) vi n ln Tc tng ca f(n)bng tc tng ca g(n).

Mt squy tc
Nu f(n) lmt a thc bc k, th f(n) = (nk). Vi cc hm logarit logmn = (log n).

http://gg.gg/sns

25

Smith Nguyen Studio.

1.3.3. phc tp gii thut


Nh vy, xc nh phc tp ca mt gii thut khi bit hm c lng khi lng tnh ton cn thit ca gii thut , ta cn tnh gii hn ca t s f ( n) lim n g ( n) v nh gi theo quy tc sau

f = ( g ) & f ( g ) 0 f ( n) lim = c 0, f = ( g ) n g ( n) , f = ( g ) & f ( g )


Nu gii hn ca t s

lim
n

f ( n) g ( n)

khng xc nh th khng kt lun c mi lin h gia phc tp f(n) v g(n)

V d 1: f(n) = 60n2 + 9n+ 9 V


60n2 + 9n + 9 60n2 + 9n2 + n2 = 70n2 vi mi n1, Chn C1= 70 th 60n2 + 9n + 9 = O(n2).

V
60n2 + 9n + 9 60n2 vi mi n 1, Chn C2=60 th 60n2 + 9n + 9 = (n2).

V
60n2 + 9n + 9 = O(n2) v 60n2 + 9n + 9 = (n2) nn 60n2 + 9n + 9 = (n2).

http://gg.gg/sns

26

Smith Nguyen Studio.

1.3.3. phc tp gii thut


Xc nh phc tp
Cc cu lnh k tip
Quy tc cng: phc tp ca khi lnh k tip l tng khi lng tnh ton ca cc cu lnh.

Nu f1(n)=Og1(n), f2(n)=Og2(n) th f1+f2=Omax(g1,g2) Vi mt vng lp


phc tp l tng khi lng tnh ton s hc v so snh ca cc cu lnh bn trong vng lp nhn vi s ln lp.

Vi cc vng lp lng nhau


Quy tc nhn: phc tp ca khi lnh lp lng nhau l tng khi lng tnh ton ca cc cu lnh trong mi vng lp nhn vi tch ca cc kch thc ca cc vng lp.

Nu f1=O(g1), f2=O(g2) th f1f2=O(g1g2)

1.3.3. phc tp gii thut


Vd 1:
Cu lnh gn x = x + 1; c thi gian thc hin bng C (hng s) nn c nh gi l O(1).

V d 2.
Cu lnh for (i = 1; i <= n; i++) x := x + 1; c thi gian thc hin l T(n) = O(n.1) = O(n).

V d 3.
Cu lnh sau: for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) x := x + 1; c thi gian thc hin T(n) = O(n.n) = O(n2).

V d 4.
Cho on chng trnh: for (i = 0; i < n; i++) getch(A[i]); for (i = 0; i < n; i++) printf(%d,A[i]); Khi T(n) =T1(n) +T2(n) = O(max(n,n)) = O(n)

http://gg.gg/sns

27

Smith Nguyen Studio.

Bi tp

http://gg.gg/sns

28

Smith Nguyen Studio.

Chng 2. Kiu d liu v m hnh d liu

2.1. Biu din d liu v cc kiu d liu n 2.2. Kiu d liu c cu trc Cu trc d liu 2.2. H kiu ca ngn ng C 2.3. M hnh d liu v kiu d liu tru tng

2.1. Biu din d liu v cc kiu d liu n


2.1.1. S cn thit ca vic biu din d liu 2.1.2. Kiu d liu n 2.1.3. T chc cc kiu d liu n trong my tnh

http://gg.gg/sns

29

Smith Nguyen Studio.

2.1.1. S cn thit ca vic biu din d liu


D liu s cp - Biu din nh phn Bit, Byte, Word thanh ghi, Cc php tnh s hc v logic b x l s hc v logic Cc kiu d liu S tru tng ha trong ton hc ca cc i tng trong th gii hin thc l cc khi nim biu din c trng v mt s lng v cc quan h ca cc i tng. Cc d liu trong ngn ng lp trnh bc cao (FORTRAN, BASIC, PASSCAL, C ...), biu din c trng v mt s lng v cc quan h ca cc i tng. Trn c s cc khi nim ton hc ny, ngi ta a vo trong cc ngn ng lp trnh bc cao cc kiu d liu n (bao gm cc kiu: s, k t, con tr...) v cc tc v (cc php ton) tc ng ln cc kiu c bn, cc hm th vin, cc chng trnh con do ngi lp trnh vit thm.
9 September 2010 2.1. Biu din d liu 59

2.1.2. Kiu d liu n


Kiu d liu l g? Trong cc ngn ng lp trnh bc cao, cc d liu c phn lp thnh cc lp d liu da vo bn cht ca d liu. Mi mt lp d liu c gi l mt kiu d liu. Kiu d liu l mt tp hp cc phn t cng chung thuc tnh no cc phn t ca tp c gi l cc gi tr ca kiu. Thng thng trong mt h kiu ca mt ngn ng lp trnh s c mt s kiu d liu c gi l kiu d liu n (single) hay kiu d liu phn t (atomic).
9 September 2010 2.1. Biu din d liu 60

http://gg.gg/sns

30

Smith Nguyen Studio.

2.1.2. Kiu d liu n


H kiu ca mt ngn ng
bao gm cc kiu d liu n v cc phng php cho php ta t cc kiu d liu c xy dng nn cc kiu d liu mi.

Cc ngn ng lp trnh khc nhau c th c cc kiu d liu n khc nhau.


Chng hn, trong ngn ng Pascal, cc kiu d liu integer, real, boolean, char v cc kiu lit k c gi l cc kiu d liu n. trong Fortran c cc kiu d liu l integer, real, logical, complex v double complex trong C l char, int, float, double, con tr,
9 September 2010 2.1. Biu din d liu 61

2.1.2. Kiu d liu n


Cc c trng ca cc kiu d liu n
1.

2.

Kch thc ca kiu: Mi gi tr thuc kiu chim dng mt dung lng khng i b nh cn thit. Phm vi ca kiu: Mi kiu d liu xc nh mt tp hp c nh cc gi tr thuc kiu.
Chng hn, kiu integer trong ngn ng Pascal (int trong C) gm tt c cc s nguyn c biu din bi hai byte, tc l gm cc s nguyn t -32768 n + 32767.

3.

Cc ton t trn kiu: Mi kiu d liu, cn phi xc nh mt tp hp no cc php ton, cc hm chun c th thc hin c trn cc d liu ca kiu.
Chng hn, vi kiu real, cc php ton c th thc hin c l cc php ton s hc thng thng +, -, *, / , v cc php ton so snh =, < >, < , < =, >, > =; cc hm chun abs(.), sin(.), round(.),.

9 September 2010

2.1. Biu din d liu

62

http://gg.gg/sns

31

Smith Nguyen Studio.

2.1.3.T chc cc kiu d liu n trong my tnh


S nh phn
S nh phn khng m
Chui n bit biu din 00000000 0; 00000001 1; 00000010 2; 00000011 3; 00000100 4; 00000101 5; 00000110 6; 00000111 7; 00001000 8; 00001001 9; 00111011 1+21+23+24+25=59; 00100110 25+22+21=38; Chui c n bit s biu din cc s (khng m) trong phm vi 0 n 2n-1, do nu c 8 bit (1 byte) s biu din c cc s t 0 n 255 11111111 (=28+27+26+25+24+23+22+2+1=128+64+32+16+8+4+2+1).

9 September 2010

2.1. Biu din d liu

63

2.1.3.T chc cc kiu d liu n trong my tnh


S nh phn dng b 1
c dng biu din cc s nguyn nh phn c c s m v s khng m.
S dng c biu din nh trn S m hon i tr 0 thnh 1, tr 1 thnh 0 trong biu din gi tr tuyt i ca n

Nh vy, biu din mt s m x di dng nh phn b 1 ta thc hin cc bc sau:


Biu din x (gi tr tuyt i ca x) di dng nh phn khng m o bit

V d: -38 00100110 11011001 Chui c n bit s biu din cc s (khng m) trong phm vi t -2n-1+1 n 2n-1-1, do nu c 8 bit (1 byte) s biu din c cc s t -127 n 127 Vi s nh phn 8 bit dng b 1 c hai gi tr 0 l 00000000 (0 dng) v 11111111 (0 m).

9 September 2010

2.1. Biu din d liu

64

http://gg.gg/sns

32

Smith Nguyen Studio.

2.1.3.T chc cc kiu d liu n trong my tnh


S nh phn dng b 2
c dng biu din cc s nguyn nh phn c c s m v s khng m. biu din mt s m x di dng nh phn b 2 ta thc hin cc bc sau:
Biu din x di dng nh phn b 1 Cng thm 1

V d: -38 00100110 11011001 11011010 Chui c n bit s biu din cc s (khng m) trong phm vi t -2n-1 n 2n-1-1, do nu c 8 bit (1 byte) s biu din c cc s t -128 n 127 Vi s nh phn 8 bit dng b 2 c mt gi tr 0 l 00000000
9 September 2010 2.1. Biu din d liu 65

2.1.3.T chc cc kiu d liu n trong my tnh


S nguyn dng thp phn khng m
c t chc theo dng m ha thnh nh phn (binary coded decimal). Mi k s thp phn c i bi mt xu nh phn 4 bit tng ng V d: 0 0000; 1 0001; 2 0010; 3 0011; 6 0110; 7 0111; 8 1000; 9 1001; i ngc li, s thp phn m ha nh phn sang thp phn, ta thc hin chia xu bit thnh tng nhm 4 bit (t phi sang tri), sau i mi nhm thnh s thp phn. V d: 0010 0110 26 1000 1001 0010 892
9 September 2010 2.1. Biu din d liu 66

http://gg.gg/sns

33

Smith Nguyen Studio.

2.1.3.T chc cc kiu d liu n trong my tnh


S hu t (thc)
c t chc bng mt chui c nh cc bit (32 bit) Mi s c chia thnh 3 thnh phn
Phn nh tr c biu din bi 24 bit dng b 2 Phn c s c ngm nh l 10 Phn s m c biu din bi 8 bit dng b 2

Biu din phn nh tr v phn m nhng bin ny tun theo chun IEEE (Institute of Electrical and Electronics Engineers) v s thc du chm ng. Hu ht cc trnh bin dch C hin nay u theo chun ny (Xem thm trong hc phn Kin trc my tnh). Ch rng biu din s thc ni chung ch l biu din gn ng, xp x bi mt s hu t.
9 September 2010 2.1. Biu din d liu 67

2.1.3.T chc cc kiu d liu n trong my tnh


K t

Mi k t c t tng ng bi mt s nguyn trong b m ASCII bng chui 8 bit (1 byte),


chng hn
00100110 &; 01000001 A; 01000010 B; 01000011 C

Chui k t

Chui k t c t chc trong b nh bng dy m ASCII ca tng k t thuc chui


Chng hn
01000001 01000010 AB 01000001 01000010 01000011 ABC

Vn cn tm hiu thm l vi mt dy nh phn, c ch no my tnh bit c u l s nguyn, u l s thc, u l xu k t, u l con tr.


9 September 2010 2.1. Biu din d liu 68

http://gg.gg/sns

34

Smith Nguyen Studio.

2.2. Cc kiu d liu c cu trc


2.2.1. Cu trc d liu l g?
2.2.2. Ba phng php thng thng to CTDL 2.2.3. Qu trnh gii mt bi ton trn my tnh

2.2.1. Cu trc d liu l g?


Cc kiu d liu n cha mnh khai thc my tnh. Cu trc d liu l cc d liu phc tp, c xy dng nn t cc d liu c, n gin hn bng cc phng php lin kt no . Tu tng ng dng, ta s xy dng nhng cu trc d liu no m cc thao tc cn thc hin l hiu qu nht c th c. C th hnh dung mt cu trc d liu c to nn t cc khi, mi khi c th xem nh mt ci hp cha cc d liu thnh phn. Mt cu trc d liu bao gm
Mt tp hp no cc d liu thnh phn, Cc d liu thnh phn ny c lin kt vi nhau bi mt phng php no . Cc thao tc trn cu trc
9 September 2010 2.1. Biu din d liu 70

http://gg.gg/sns

35

Smith Nguyen Studio.

2.2.1. Cu trc d liu l g?


Nh vy, khi t chc mt cu trc d liu cn thit phi quan tm ti cc yu t sau:
Cc d liu thnh phn tham gia to nn cu trc . Cch b tr, sp xp cc thnh phn nh th no (c cu?). Kh nng truy nhp v x l cc thao tc, cc php ton.

Cc d liu thnh phn c th l d liu n, hoc cng c th l mt cu trc d liu c xy dng. Hu ht cc ngn ng lp trnh bc cao u cc cu trc d liu nh xu k t, mng, bn ghi, tp hp, tp.

9 September 2010

2.1. Biu din d liu

71

2.2.2. Ba phng php thng thng to CTDL


Sp xp cc t bo cha cc d liu cng mt kiu thnh mt dy
Xu k t, Mng, Tp

Kt hp mt s t bo (c th cha cc d liu c kiu khc nhau) thnh mt i tng


Bn ghi (cu trc)

S dng con tr lin kt cc khi, mi khi l mt bn ghi gm hai phn INFOR v LINK, phn INFOR c th c mt hay nhiu trng d liu, cn phn LINK c th cha mt hay nhiu con tr tr n cc khi khc c quan h vi khi .
Danh sch
9 September 2010 2.1. Biu din d liu 72

http://gg.gg/sns

36

Smith Nguyen Studio.

2.2.3. Qu trnh gii mt bi ton trn my tnh


Qu trnh gii mt bi ton trn my tnh c th quy v 3 giai on k tip nh sau
G 1
Xy dng m hnh m ta bi ton. Thit k thut ton hnh thc bng cch s dng cc thao tc, cc php ton trn cc m hnh d liu.

G 2
Biu din cc m hnh d liu bi cc kiu d liu tru tng. Biu din cc thut ton bng gi ngn ng

G 3
La chn cu trc d liu Th hin thut ton bi cc thu tc (hm) trong ngn ng lp trnh no o.
9 September 2010 2.1. Biu din d liu 73

2.3. H kiu ca ngn ng C

2.3.1. Cc kiu d liu n trong C 2.3.2. Cc kiu d liu c cu trc trong C

http://gg.gg/sns

37

Smith Nguyen Studio.

2.3.1.Cc kiu d liu n trong C


Cc kiu d liu n trong C
Tn char int float double con tr ngha K t S nguyn S thc S thc a ch nh Phm vi -128..127 -32768..32767 3.4E-38.. 3.4E38 1.7E-308.. 1.7E308 0..65535 Kch thc 1 byte 2 byte 4 byte 8 byte 4 byte

Tuy nhin c th thm mt s kiu trong C bng cch thay i khai bo cc kiu char, int thng qua vic b sung cc tin t signed, unsigned, short, long (Xem Help ca C);
9 September 2010 2.2. H kiu ca ngn ng C 75

2.3.1.Cc kiu d liu n trong C


Con tr

Bin con tr l mt loi bin c bit, c kch thc c nh, khng dng lu tr d liu m lu tr a ch ca mt bin khc nhm gip truy nhp v qun l d liu c lu tr trong vng nh dnh cho bin . Kch thc bin con tr ph thuc cch biu din a ch b nh. Trong my PC thng s dng hai thanh ghi 16 bit biu th a ch b nh nn kch thc ca bin con tr l 4 byte. Kiu con tr l g?
Mi kiu d liu c tr bi mt bin con tr no th bin con tr y phi c khai bo c th truy xut c d liu m n tr n. V vy m c kiu con tr C cc kiu con tr nguyn, con tr thc, con tr k t, con tr mng,
9 September 2010 2.2. H kiu ca ngn ng C 76

http://gg.gg/sns

38

Smith Nguyen Studio.

2.3.1. Cc kiu d liu n trong C


Ch :
Kiu con tr khng phi l kiu lu gi gi tr ca con tr
Kiu lu gi gi tr ca con tr bao gi cng l kiu c nh (nguyn khng m) Kiu con tr l kiu c bit tng ng vi kiu ca d liu c con tr y tr n Bin con tr P Bin c tr bi bin con tr *P

9 September 2010

2.2. H kiu ca ngn ng C

77

2.3.2. Cc kiu d liu c cu trc trong C


Mng
Mng l g?
Mng l mt tp hp hu hn cc phn t c cng kiu, c sp xp theo mt trt t no y trong b nh. Mt mng c c nh s phn t (gi l kch thc mng). Kch thc ny phi c khai bo tng minh trong phn khai bo mng v n xc nh v tr v kch thc ca vng nh trong b nh c cp pht cho mng. Cc phn t ca mng phi c cng kiu va c sp th t nh ch s ca phn t. Php ton c bn thc hin trong mng l truy nhp trc tip n tng v tr ca mng nh ch s ca phn t c th lu tr hoc thu nhn thng tin (ct vo hoc ly ra). Ch s ca phn t cn c gi l a ch tng minh.

9 September 2010

2.2. H kiu ca ngn ng C

78

http://gg.gg/sns

39

Smith Nguyen Studio.

2.3.2. Cc kiu d liu c cu trc trong C


Chnh vic c th truy nhp trc tip (hay ngu nhin) vo tng phn t ca mng thng qua a ch tng minh m thi gian truy nhp n mi phn t ca mng l nh nhau, ngha l thi gian cn thit truy nhp n phn t th 5 cng nh thi gian cn thit truy nhp n phn t th 75 trong mt mng c n75 phn t.

Trong cc ngn ng lp trnh mt mng c khai bo nh l mt bin, trong o gia tr ca n l mt tp hp c th t cc phn t, th t o c xc nh theo mt quy lut no o va c xc nh nh ch s ca n.
Nu mt ch s c dng thi mng c gi l 1 chiu, Nu nhiu ch s c dng ta gi l mng nhiu chiu (2chiu, 3-chiu, ...).

9 September 2010

2.2. H kiu ca ngn ng C

79

2.3.2. Cc kiu d liu c cu trc trong C


Mng 1 chiu
L mt dy lin tip Nmax nh lu tr cc phn t ca mng. Mi nh l mt khi dnh lu tr d liu c kiu l kiu phn t ca mng Nmax-1 0 1 2 i n x[0]
ch c s

x[1]

x[2]

x[i]

x[n]

ch ca ph t c ch s i = ch c s +i*kch thc ca kiu ph t

Lu rng trong C v trong Pascal c s khc bit v


mi lin h gia ch s v th t ca cc phn t ca mng Vic kim tra trn ca mng (Pascal c kim tra, cn C th khng)

9 September 2010

2.2. H kiu ca ngn ng C

80

http://gg.gg/sns

40

Smith Nguyen Studio.

2.3.2. Cc kiu d liu c cu trc trong C


Mng 2 chiu c kch thc mmaxnmax
L mt dy lin tip gm mmaxnmax nh lu tr cc phn t ca mng. Mi nh l mt khi dnh lu tr d liu c kiu l kiu phn t ca mng
0 mmax-1 mmax 2 mmax-1 (nmax-1) mmax (nmax) mmax-1

X[0][0] X[mmax-1][0]

X[0][1] X[mmax-1][1]

X[0][nmax-1]

X[mmax-1] [nmax-1]

ch c s

ch ca ph t c ch s i,j = ch c s +(jmmax+i)kch thc ca kiu ph t

nh ngha tng t cho mng c s chiu ln hn 2.


9 September 2010 2.2. H kiu ca ngn ng C 81

2.3.2. Cc kiu d liu c cu trc trong C


Xu k t
L mng 1 chiu cc k t C im khc mng l ch c c ch xc nh di ca xu
Trong Pascal, l v tr ca thnh phn c ch s 0 Trong C, l k t NUL (\0) cui xu kt thc xu.

Nh vy, mt xu k t mun c chiu di n cn phi tn n+1 byte.

9 September 2010

2.2. H kiu ca ngn ng C

82

http://gg.gg/sns

41

Smith Nguyen Studio.

2.3.2. Cc kiu d liu c cu trc trong C


Cu trc
L mt kiu d liu bao gm nhiu thnh phn c th thuc nhiu kiu d liu khc nhau. Mi thnh phn c gi l mt trng Cc thnh phn c truy cp thng qua tn Tng ng vi khi nim cu trc trong C l khi nim bn ghi trong Pascal C th thnh phn ca mt cu trc l mt cu trc (con) Truy nhp cp trc c thc hin thng qua tn bin cu trc v tn trng
9 September 2010 2.2. H kiu ca ngn ng C 83

2.4. M hnh d liu v kiu d liu tru tng

2.4.1. M hnh d liu 2.4.2. Kiu d liu tru tng

http://gg.gg/sns

42

Smith Nguyen Studio.

2.4.1. M hnh d liu


Cn xy dng m hnh d liu m t bi ton.
Do tnh a dng ca cc bi ton cn x l bng MTT, ch s dng cc kiu d liu c sn trong cc ngn ng lp trnh bc cao l cha m t cc bi ton.

Trong tin hc, m hnh d liu


l s tru tng ho cc c trng ca cc i tng thuc phm vi vn m ta quan tm v bao gm cc mi quan h gia cc i tng .

Mt m hnh d liu
s c biu din bi cu trc d liu. c th c biu hin bi nhiu cu trc d liu khc nhau.
2.3. M hnh d liu v kiu d liu tru tng

9 September 2010

85

2.4.2. Kiu d liu tru tng


Mt kiu d liu tru tng (abstract data type)
l kt qu ca mt qu trnh tru tng ha nhm xy dng mt m hnh cho mt kiu d liu mi kt hp vi cc tc v lin quan, l mt m hnh d liu c xt cng vi mt s xc nh cc php ton no . Chng hn, cc tp hp no , ch xt vi cc php ton:
thm mt phn t vo mt tp cho, loi mt phn t khi mt tp hp cho, tm xem mt phn t cho c nm trong mt tp hp hay khng, nu c th ni dung ca n l g lp thnh kiu d liu tru tng (KDLTT) danh sch
2.3. M hnh d liu v kiu d liu tru tng

9 September 2010

86

http://gg.gg/sns

43

Smith Nguyen Studio.

2.4.2. Kiu d liu tru tng


Cn kiu d liu tru tng hng i l m hnh d liu danh sch nhng ch vi hai php ton chnh l:
thm mt phn t mi vo mt u danh sch, loi mt phn t mt u khc ca danh sch.

Biu din s hu t a/b vi cc tc v cng, nhn, chia hai s hu t s c thc hin nh th no?
M t d liu: t s, mu s (l cc s nguyn) Cc tc v: Cng: cong(s hu t 1, s hu t 2) Nhp a v b l t v mu tng ng ca s hu t 1 Nhp c v d l t v mu tng ng ca s hu t 2 Xut ad+bc l t ca tng; bd l mu ca tng
9 September 2010 2.3. M hnh d liu v kiu d liu tru tng 87

2.4.2. Kiu d liu tru tng


Nhn: nhan(s hu t 1, s hu t 2) Nhp a v b l t v mu tng ng ca s hu t 1 Nhp c v d l t v mu tng ng ca s hu t 2 Xut ac l t ca tch; bd l mu ca tch Chia: chia(s hu t 1, s hu t 2) Nhp a v b l t v mu tng ng ca s hu t 1 Nhp c v d l t v mu tng ng ca s hu t 2 Xut ad l t ca thng; bc l mu ca thng

9 September 2010

2.3. M hnh d liu v kiu d liu tru tng

88

http://gg.gg/sns

44

Smith Nguyen Studio.

2.4.2. Kiu d liu tru tng


Chng ta s nghin cu k mt s kiu d liu tru tng quan trng nht : Danh sch tuyn tnh (hng), Ngn xp (stack), Hng i (Queue). Cy (Tree). Vi mi kiu d liu tru tng, cc cu trc d liu biu din n s c nghin cu. Chng ta cng s tm hiu cc php ton trong tng cch ci t v nh gi hiu qu ca cc thut ton thao tc trn n.
2.3. M hnh d liu v kiu d liu tru tng

9 September 2010

89

Chng 3.
Gii thut quy
3.1. Khi nim gii thut quy 3.2. Thit k gii thut quy 3.3. quy v lp

http://gg.gg/sns

45

Smith Nguyen Studio.

3.1. Khi nim gii thut quy


Khi nim quy Mt i tng c coi l quy nu n bao gm chnh n nh l mt b phn ca n hoc n c nh ngha di dng ca chnh n. Gii thut quy L gii thut trong bi ton T c thc hin bng T c dng ging nh T Gii thut chung:
Bc c s: Nu vn tha iu kin dng th gii trc tip Bc quy: Nu khng tha th gii bi ton ng dng vi kch thc nh hn.

Gii thut quy phi tha mn 2 iu kin:


Phi c im dng: l trng hp c s (suy bin) nh nht, c thc hin khng cn quy Phi lm cho kch thc bi ton thu nh hn: do lm cho bi ton gim dn n trng hp c s

3.1. Khi nim gii thut quy


Th tc quy:
C li gi n chnh n ( quy trc tip) hoc cha li gi n th tc khc v th tc ny cha li gi n n ( quy gin tip) Sau mi ln gi, kch thc bi ton thu nh hn Phi kim tra im dng

V d
Tm file trong th mc (trn my tnh)
Nu khng c th mc con, tm trong danh sch file Nu c th mc con, tm file trong th mc (con)

Tm t trong t in (ln)
Nu t in l mt trang, tm trong trang Nu khng,
Chia i t in thnh hai (t in) Xc nh t cn tm thuc t in mi Tm t trong t in (nh)

http://gg.gg/sns

46

Smith Nguyen Studio.

3.2. Thit k gii thut quy


Thng s ha bi ton
Tm cc thng s biu th kch thc ca bi ton. Cc thng s ny quyt nh phc tp ca bi ton

Tm iu kin dng
L (cc) trng hp gii khng quy (trng hp c s) Thng l (cc) trng hp bi ton c kch thc nh nht V d: Thiu trng hp c s -> bi ton khng dng.

Phn r bi ton thnh cc thnh phn:


Hoc l trng hp khng quy Hoc l bi ton trn nhng kch thc nh hn. V d: khng th phn r theo kiu n!=(n+1)!/(n+1)

Hot ng ca gii thut quy tnh giai tha n


V d
Tnh n! (Giaithua(n))
Nu n=0 th n!=1 Nu khng th n!=(n-1)! *n

Vic tnh giaithua(4) thng qua quy c th xem nh c thc hin bi 4 my:
My 4 tnh (4 * 3!) -> khi ng my 3 My 3 tnh (3 * 2!) -> khi ng my 2 My 2 tnh (2 * 1!) -> khi ng my 1 My 1 tnh (1 * 0!) -> trng hp c s

http://gg.gg/sns

47

Smith Nguyen Studio.

Hot ng ca gii thut quy tnh giai tha n

Giaithua(4) =24 4 Giaithua(3) =6 3 Giaithua(2) =2 2 Giaithua(1) =1 1 Giaithua(0) =1

3.2. Thit k gii thut quy


Tnh tng s=1+2+3++(n-1)+n
Nu n=1 th s=1 Nu khng th s=s(n-1)+n

Tnh nx
Nu n=1 th nx=x Nu khng th nx=(n-1)x+x

Tnh xn
Nu n=0 th xn=1 Nu khng th xn=xn-1x

http://gg.gg/sns

48

Smith Nguyen Studio.

3.2. Thit k gii thut quy


Bi ton thp H ni
C n a kch thc nh dn ang xp thnh chng. Hy chuyn chng a sang v tr khc vi iu kin mi ln chuyn 1 a, khng t a to ln trn a nh v ch c s dng mt chng trung gian (chng tm). Trng hp n gin nht 1 a Chuyn a sang chng ch Trng hp c hai a Chuyn a nh (trn) sang chng tm Chuyn a ln (y) sang chng ch Chuyn a nh (tm) sang chng ch

3.2. Thit k gii thut quy


Trng hp c nhiu hn 2 a (lm tng t) Chuyn chng trn sang chng tm Chuyn a y sang chng ch Chuyn chng tm sang chng ch

Chng trnh con


Cn mt tham s kch thc n v 3 tham s v tr A, B, C ChuyenDia(n,A,B,C) k hiu l (CD(n,A,B,C)) if (n=1) chuyen t A sang C k hiu l (C1D(A,C)) else ChuyenDia(n-1, A,C,B) /* C rng */ Chuyen t A sang C ChuyenDia(n-1,B,A,C)

http://gg.gg/sns

49

Smith Nguyen Studio.

Hot ng ca gii thut quy chuyn a trong bi ton thp H ni


Vi n=4, ta phn tch qu trnh thc hin nh sau
CD(4,A,B,C) 1 CD(3,A,C,B) 2 CD(3,B,A,C) 9

CD(2,A,B,C) 3
C1D(A,B)

CD(2,C,A,B) 6
C1D(C,A)

CD(2,B,C,A) 10
C1D(B,C)

CD(2,A,B,C) 13
C1D(A,B)

4
C1D(B,C)

11

14

C1D(A,B)

C1D(C,A)

12

C1D(B,C)

15

Hot ng ca gii thut quy chuyn a trong bi ton thp H ni

Chng A

Chng B

Chng C

http://gg.gg/sns

50

Smith Nguyen Studio.

Hot ng ca gii thut quy chuyn a trong bi ton thp H ni

Chng A

Chng C

Chng B

3.3. quy v lp
Hiu lc ca quy
u im:
n gin, ngn gn, d vit code Bi ton vit c di dng cng thc quy => n gin Mt s gii thut quy cng c hiu lc cao, v d nh Quick sort

Nhc im:
Tn khng gian nh Tc chm

http://gg.gg/sns

51

Smith Nguyen Studio.

3.3. quy v lp
quy v Stack
S dng hm/th tc quy gy pht sinh b nh lin tc dn n nguy c trn b nh. V d trong s hot ng ca bi ton thp H ni ta thy

3.3. quy v lp
CD(4,A,B,C) 1 CD(3,A,C,B) 2 CD(3,B,A,C) 9

CD(2,A,B,C) 3
C1D(A,B)

CD(2,C,A,B) 6
C1D(C,A)

CD(2,B,C,A) 10
C1D(B,C)

CD(2,A,B,C) 13
C1D(A,B)

11

12

14

15
C1D(B,C)

C1D(B,C)

C1D(A,B)

C1D(C,A)

5 4 3 3 3 3 3 6 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1

14 15 7 8 11 12 6 6 6 6 1010 10 10 10 13 13 13 13 13 2 2 2 2 2 9 9 9 9 9 9 9 9 9 9 9 9 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

http://gg.gg/sns

52

Smith Nguyen Studio.

3.3. quy v lp
nh gi gii thut Thp H ni
Gi f(n) l s ln chuyn a cn thit chuyn n a t ct1 sang ct 3.
Ta c f(1) = 1; f(n) = 2 f(n1) + 1, if n > 1 = 2(2 f(n2) + 1) + 1=22 f(n-2) + 2 + 1 = = 2n-1 f(1) + 2n-2 + + 2 + 1 = 2n-1+ 2n-2+ + 2 + 1 = 2n1

Nh vy, s ln chuyn a theo gii thut quy l qu ln, nu mt ln chuyn 1 a mt 1 giy th mt ngi chuyn 64 a s mt 5 1011 nm= 25 ln tui ca v tr. Khi chuyn xong chng a th n ngy tn th!

3.3. quy v lp
Ci t danh sch lin kt bng gii thut quy Type kieudl=string[20]; tropt=^kieupt; kieupt=record nd:kieudl; t:tropt; end; Var goc:tropt; d:pointer; pt:kieudl; Procedure xuly(nut:tropt); begin write(nut^.nd); end; Procedure xltruoc(nut:tropt); Begin if nut<>nil then begin xuly(nut); xltruoc(nut^.t); end; End; Procedure xlsau(nut:tropt); Begin if nut<>nil then begin xlsau(nut^.t); xuly(nut); end; End;

http://gg.gg/sns

53

Smith Nguyen Studio.

3.3. quy v lp
Procedure Tim_bosung(var goc:tropt; st:kieudl); Begin if goc=nil then Begin New(goc); with goc^ do begin nd:=st; t:=nil; end; end else with goc^ do if st<>nd then tim_bosung(t,st) else writeln('Da co du lieu'); End; BEGIN writeln('Vi du ve danh sach tuyen tinh '); mark(d); goc:=nil; repeat write('Nhap du lieu (Enter de ke thuc): '); readln(pt); if length(pt)>0 then tim_bosung(goc,pt) until length(pt)=0; writeln; writeln('Duyet truoc'); xltruoc(goc); writeln; writeln('Duyet sau'); xlsau(goc); writeln; release(d); readln; END.

3.3. quy v lp
Nhiu gii thut quy u c th thay th bng gii thut khng quy (s dng vng lp) Mi cng thc truy hi u c th tnh c bng gii thut quy. Mi cng thc truy hi cp k u c th tnh c qua php lp bng cch s dng k bin ph. Hiu qu hn nhiu khi dng quy. V d
Tnh fibonaci(n) thng qua gii thut lp
f0=0; fibo=f1=1 for (i=1;i<=n;i++) { f0=f1; f1=fibo; fibo=f0+f1; { return fibo;

Tuy nhin khng phi mi gii thut quy u c th chuyn c v gii thut lp.

http://gg.gg/sns

54

Smith Nguyen Studio.

3.4. quy v quy np ton hc


T tm hiu

Chng 4.
Danh sch tuyn tnh

4.1. Khi nim v danh sch 4.2. Danh sch lin kt n 4.3. Cc thao tc c bn trn danh sch lin kt n 4.4. Cc dng khc ca danh sch lin kt 4.5. S dng danh sch mc ni V d bi ton cng a thc 4.6. Ngn xp v Hng i

http://gg.gg/sns

55

Smith Nguyen Studio.

4.1. Khi nim v danh sch


4.1.1. Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt 4.1.2. Lu tr danh sch tuyn tnh

4.1.1.Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt
Danh sch
L tp hp cc phn t d liu c cng kiu c cu trc, sp xp theo mt trt t no

Danh sch nhng ngi n khm bnh


Ban u cha c ai C ngi mi n C ngi khm xong i v

Danh sch sinh vin trong lp hc phn


Ban u cha c ai (cha ai ng k) B sung thm (ln lt b sung sinh vin) Loi b (do nhu cu sinh vin hoc do thiu iu kin tin quyt).

Danh sch cc th mc trong a D


Ban u cha c th mc no Ln lt to cc th mc Loi b mt s th mc khng cn na
9-Sep-10 3.1. Khi nim v danh sch 112

http://gg.gg/sns

56

Smith Nguyen Studio.

4.1.1.Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt
Danh sch tuyn tnh L tp hp cc phn t d liu c cng kiu c cu trc, sp xp (logic) theo mt trt t tuyn tnh
Nh vy, danh sch tuyn tnh l
Mt chui cc phn t Tn ti phn t u v phn t cui Mi phn t c phn t trc v phn t sau
Phn t 1 Phn t 2 Phn t 3 Phn t n

9-Sep-10

3.1. Khi nim v danh sch

113

4.1.1.Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt
Mt danh sch tuyn tnh c S phn t bin i Mt phn t thng l mt bn ghi (record trong Pascal) hoc mt cu trc (struct trong C) Cc thao tc thng s dng nht Thm phn t Xa phn t Duyt danh sch Cc thao tc khc: Sp xp Tm kim Ghp 2 danh sch Tch 1 danh sch thnh nhiu danh sch Sao chp danh sch Cp nht
9-Sep-10 3.1. Khi nim v danh sch 114

http://gg.gg/sns

57

Smith Nguyen Studio.

4.1.1.Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt
Phn loi danh sch tuyn tnh

9-Sep-10

3.1. Khi nim v danh sch

115

4.1.1.Cc khi nim danh sch, danh sch tuyn tnh, danh sch lin kt
Danh sch lin kt L tp hp cc phn t d liu c cng kiu bn ghi (cu trc), trong c t nht mt trng thuc kiu con tr lm nhim v tr n phn t khc trong danh sch S cu to: c nhiu dng ty theo cu trc, c ch ca s lin kt (S trnh by chi tit sau). V d:

9-Sep-10

3.1. Khi nim v danh sch

116

http://gg.gg/sns

58

Smith Nguyen Studio.

4.1.2. Lu tr danh sch tuyn tnh


Lu tr k tip (s dng mng) S dng mng 1 chiu u im Tm kim d dng (tun t hoc tm kim nh phn) Truy cp nhanh (ngunhin, thi gian truy cp n mi phn t l nh nhau) Duyt cc phn t d dng s dng ch s:
for(i = 0; i <= N; ++i)
if(a[i])

Nhc im Thm v xa KHNG d dng Danh sch thng xuyn thm bt phn t => Khng bit trc s phn t Tn b nh v phi cp pht nhiu hn cn thit gi ch.
9-Sep-10 3.1. Khi nim v danh sch 117

4.1.2. Lu tr danh sch tuyn tnh


Thm mt phn t th i vo mng
Chuyn cc phn t t I n n xung cc v tr t i+1 n n+1; Thm phn t cn thm vo v tr th i.

9-Sep-10

3.1. Khi nim v danh sch

118

http://gg.gg/sns

59

Smith Nguyen Studio.

4.1.2. Lu tr danh sch tuyn tnh


Xa phn t th i khi mng Chuyn cc phn t t i+1 n n vo cc v tr t i n n-1 Khng hiu qu v lun phi dch chuyn phn t. n/2 ln dch chuyn (trung bnh) Cc thao tc thm v xa c thi gian chy l O(n). Vy cn thit phi Lu tr mc ni (s dng danh sch lin kt)
9-Sep-10 3.1. Khi nim v danh sch 119

4.2. Danh sch lin kt n


4.2.1. Bn ghi/cu trc cha con tr (bn ghi/cu trc t tr) 4.2.2. nh ngha v s cu to danh sch lin kt n 4.2.3. Mt s lu

http://gg.gg/sns

60

Smith Nguyen Studio.

4.2.1. Bn ghi/cu trc cha con tr (bn ghi/cu trc t tr)


Bn ghi/cu trc t tr l c s ci t danh sch lin kt bng cch to ra chui cc phn t c lin kt vi nhau qua trng con tr lu gi a ch. Mi bn ghi t tr s c coi l mt nt (node) trong mt cu trc danh sch Mi nt phi bao gm
D liu (data) Con tr mc ni ti nt tip theo trong danh sch (a ch ca nt tip theo).

9-Sep-10

3.2. Danh sch lin kt n

121

4.2.2. nh ngha v s cu to danh sch lin kt n


nh ngha L tp hp cc phn t d liu c cng kiu bn ghi, trong c mt trng thuc kiu con tr lm nhim v tr n (kt ni vi) phn t khc trong danh sch

S cu to chung

a
(con tr danh sch) P

Mi danh sch nht thit phi km theo mt con tr (con tr danh sch) qun l danh sch.

9-Sep-10

3.2. Danh sch lin kt n

122

http://gg.gg/sns

61

Smith Nguyen Studio.

4.2.2. nh ngha v s cu to danh sch lin kt n


Nh vy
Mt danh sch lin kt n l mt chui cc phn t, gi l nt, c mc ni vi nhau Mi nt phi bao gm D liu Mc ni (a ch) ti nt tip theo trong danh sch

Phi c mt con tr lu gi a ch ca mt nt trong danh sch, sao cho t c th truy cp c n mi nt khc ca danh sch
9-Sep-10 3.2. Danh sch lin kt n 123

4.2.3. Mt s lu
Nu khng c quy c g th node pha con tr danh sch c gi l node u tin, node pha kia c gi l node cui cng ca danh sch. Con tr trong Node cui cng tr vo Nil (Null) Mt s ngi thng nhc n hai loi danh sch FIFO v LIFO nh l hai danh sch lin kt n ni chung. Tuy nhin c s nhm ln gia hai gii thut khc nhau to danh sch vi hai kiu c bit ca danh sch. Mt vi quy c
Nu th t cc phn t ca danh sch c thit lp (theo th t thi gian) l d,c,b,a th ta s gi gii thut to danh sch l gii thut LIFO

Nu th t cc phn t ca danh sch c thit lp (theo th t thi gian) l a,b,c,d th ta s gi gii thut to danh sch l gii thut FIFO, Trong gii thut ny ta cn thm mt con tr na tr vo d.

9-Sep-10

3.2. Danh sch lin kt n

124

http://gg.gg/sns

62

Smith Nguyen Studio.

4.3. Cc thao tc c bn trn danh sch lin kt n

4.3.1. Gii thiu chung 4.3.2. Khi to v lp danh sch lin kt n 4.2.3. Duyt danh sch 4.3.4. Sp xp danh sch 4.3.5. Tm kim trong danh sch 4.3.6. B sung phn t vo danh sch 4.3.7. Loi b mt phn t ra khi danh sch

4.3.1. Gii thiu chung


Gii thiu cc thao tc
Khi to v lp danh sch Duyt danh sch Sp xp danh sch Tm kim trong danh sch B sung vo danh sch Loi b khi danh sch Sao chp v kt ni

Cc thao tc ny thng c lp i lp li nhiu ln trong mt chng trnh c ci t danh sch lin kt n, do chng thng c vit di dng chng trnh con s dng nhiu ln.
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 126

http://gg.gg/sns

63

Smith Nguyen Studio.

4.3.1. Gii thiu chung


Mt s quy c quan trng
Con tr danh sch: TroDS, TroDS1, (thng l con tr tng qut khng kiu) Tr n mt node (tr c kiu): Tam, Tam1, D liu ca node c tr bi Tam: DL(Tam) Con tr lin kt ca node c tr bi Tam: Ke(Tam); Cp mt node v lu a ch vo Tam: Tam<=Avail Tr nh ang c tr bi Tam: Tam=>Avail
3.3. Cc thao tc c bn trn danh sch lin kt n

9-Sep-10

127

4.3.2. Khi to v lp danh sch (Gii thut kiu LIFO to danh sch)
Bt u TroDS=NULL Tam<=Avail b Nhp d liu vo DL(Tam) Ke(Tam)=TroDS c TroDS=Tam Tr tm _ Kim tra kin dng + Kt thc
3.3. Cc thao tc c bn trn danh sch lin kt n

TroDS
DL

a d

DL

DL

DL

9-Sep-10

NULL

128

http://gg.gg/sns

64

Smith Nguyen Studio.

4.3.2. Khi to v lp danh sch (Gii thut kiu FIFO to danh sch)
Bt u TroDS=NULL Tam<=Avail Nhp d liu vo DL(Tam) Tm Ke(Tam)=NULL
TroDS==NULL DL DL

TroDS
DL

a b c

TroDS=Tam

Ke(Tr cui)=Tam _
9-Sep-10

Tr cui Tr cui=Tam

DL

Kim tra iu kin dng

+ Kt thc

3.3. Cc thao tc c bn trn danh sch lin kt n

NULL

129

4.3.3. Duyt danh sch


(xem danh sch)
Bt u Tr duyt=TroDS _
DL b DL b

TroDS a b

DL a

DL a

Tr duyt !=NULL + vit ra DL(tr duyt) Tr duyt c


DL c DL c

Tr duyt=Ke(tr duyt) d Kt thc


3.3. Cc thao tc c bn trn danh sch lin kt n

DL d

DL d

9-Sep-10

130

http://gg.gg/sns

65

Smith Nguyen Studio.

4.3.4. Sp xp danh sch


Nhc li thut ton ni bt sp xp dy (mng):
Vi i=1 n n-1 (t u n p cht)
Vi j:=i+1 to n (t ngay sau i n ht) Nu a[i]>a[j] (khng tha iu kin sp xp) th
Tro a[i] v a[j]

Ta s bt chc thut ton trn, p dng vo danh sch lin kt Cc bin chy i, j thut ton trn ng vai tr cung cp cc a ch ca cc phn t ca dy.
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 131

4.3.4. Sp xp danh sch


Vi thut ton sp xp danh sch lin kt, bin chy thut ton ta s xy dng l cc bin con tr
Tm1, Tm2

Qu trnh chy
Tm1: T u (tr danh sch) n p cht (tam1^.ke=NULL) Tm2: t ngay sau tm1 n ht (NULL)

T ta c gii thut sau:


3.3. Cc thao tc c bn trn danh sch lin kt n

9-Sep-10

132

http://gg.gg/sns

66

Smith Nguyen Studio.

4.3.4. Sp xp danh sch


Bt u Tam1=TroDS Ke(Tam1)!=NULL + Tam2=Ke(Tam1) _

Gii thut sp xp
Tm1:=TroDS; Khi tm1^.k<>nil thc hin Tm2:=tm1^.k; Khi tm2<>nil thc hin Nu tm1^.nd>tm2^.nd th tro tm1^.nd v tm2^.nd Tm2:=tm2^.k; Tm1:=tm1^.k; Lu khi vit chng trnh con th tham s duy nht ca chng trnh con l con tr danh sch, n l tham tr.

Tam2!=NULL _ + DL(Tam1)>DL(Tam2) _ + Tro DL(Tam1) v DL(tam2) Tam2=Ke(Tam2) Tam1=Ke(Tam1) Kt thc


9-Sep-10

3.3. Cc thao tc c bn trn danh sch lin kt n

133

4.3.5. Tm kim trong danh sch


Tm kim thc cht l duyt v so snh kha tm kim (vi thng tin ca d liu thuc trng tng ng). C th duyt ht hoc khng ht ty theo yu cu tm kim Lu khi chn kiu vng lp v iu kin dng
Chn while hay repeat? Ty thuc vo trng thi ban u v yu cu tm kim!

iu kin dng thng l biu thc cng logic or Dng th tc: u ra l thng bo trc tip hoc l tham bin truyn gi tr tm c ra ngoi. Dng hm boolean: thng s dng tr li cu hi c/khng?
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 134

http://gg.gg/sns

67

Smith Nguyen Studio.

4.3.5. Tm kim trong danh sch


Thut ton chung Tm:= tr danh sch;
Khi (tm<> nil) hoc (cha tha yu cu) thc hin tm:=tm^.k; Nu tha yu cu th gn tr cho bin ra hoc/v thng bo c nu khng tha th thng bo khng
V d? Bt u Tm=TroDS (Tm !=NULL) V(cha tha yu cu) _ _

Tm=Ke(Tm) +

tha yu cu

Khng tm c

Gn tr tm c cho bin ra

Kt thc
3.3. Cc thao tc c bn trn danh sch lin kt n

9-Sep-10

135

4.3.6. B sung mt phn t vo danh sch

t bi ton:
B sung g ?
(mt phn t vo danh sch)

B sung vo u?
(vo danh sch ang c tr (qun l) bi trods)

V tr no?
(cn mt con tr Q na?) Bn tri hay bn phi Q^? Trc hay sau Q^?

Vy ta c cc bi ton sau:
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 136

http://gg.gg/sns

68

Smith Nguyen Studio.

4.3.6. B sung mt phn t vo danh sch


Bi ton 1: Xy dng gii thut v vit chng trnh con b sung phn t d liu pt vo danh sch lin kt n ang c tr bi trods, ti v tr ang c tr bi con tr Q, sao cho sau khi b sung con tr k ca phn t mi c gi tr bng Q.
Q^ a Trods b c Q d e

Tm t tn l Bosungtruoc(...)
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 137

4.3.6. B sung mt phn t vo danh sch


Bt u Tam<=Avail Nhp d liu vo DL(Tam) Ke(Tam)=Q + Q!=TroDS _ trods:=tam Q e Kt thc
3.3. Cc thao tc c bn trn danh sch lin kt n 138

Trods a

Tam1 b

Tam DL d c

tam1=trods Ke(Tam1)!=Q _ + tam1=Ke(Tam1) Ke(Tam1)=Tam


9-Sep-10

http://gg.gg/sns

69

Smith Nguyen Studio.

4.3.6. B sung mt phn t vo danh sch

Bi ton 2:
Vit chng trnh con b sung phn t d liu pt vo danh sch lin kt n ang c tr bi trods, ti v tr ang c tr bi con tr Q, sao cho sau khi b sung con tr k ca phn t c tr bi Q tr vo phn t va c b sung.
Q^ a Trods b Q c d e

Tm t tn l Bosungsau(...)
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n 139

4.3.6. B sung mt phn t vo danh sch


Bt u Tam<=Avail Nhp d liu vo DL(Tam) Ke(Tam)=Ke(Q) Ke(Q)=Tam DL Kt thc a Trods
9-Sep-10

Tam

Q^ b Q
3.3. Cc thao tc c bn trn danh sch lin kt n 140

http://gg.gg/sns

70

Smith Nguyen Studio.

4.3.7. Loi b khi danh sch lin kt mt phn t

Loi b trong danh sch no? Loi b phn t no? (v tr no) Bi ton: Loi b mt phn t ra khi danh sch ang c tr bi Trods ti v tr c tr bi Q Chng trnh con cn c hai tham s: tham s TroDS v tham s con tr Q, trong TroDS cn thit l tham bin
3.3. Cc thao tc c bn trn danh sch lin kt n

9-Sep-10

141

4.3.7. Loi b khi danh sch lin kt mt phn t


Bt u Q==TroDS _ Tam=TroDS + Ke(Tam)!=Q _ + Tam b Q TroDS a

Tam=Ke(Tam)

Ke(Tam)=Ke(Q) TroDS=Ke(Q)

Q=>Avail Kt thc
9-Sep-10 3.3. Cc thao tc c bn trn danh sch lin kt n

d
142

http://gg.gg/sns

71

Smith Nguyen Studio.

4.4. Cc dng khc ca danh sch lin kt tuyn tnh

4.4.1. Danh sch ni vng 4.4.2. Danh sch lin kt i

4.4.1. Danh sch ni vng


L danh sch lin kt n Nt cui cng cha a ch ca nt u tin (Con tr ca nt cui khng tr vo NULL m tr n nt u tin ca danh sch).
a b c d

L danh sch lin kt n, sao cho vic kt ni gia cc phn t to thnh mt chu trnh.

http://gg.gg/sns

72

Smith Nguyen Studio.

4.4.1. Danh sch ni vng


Nhn xt: trong danh sch ni vng mi phn t u c vai tr nh nhau trong vic kt ni v con tr dng qun l danh sch c th tr n mt phn t bt k trong danh sch Mt u im ca danh sch ni vng l tr danh sch c th di chuyn c.

Khi no th kt thc duyt? (kim tra Ke(tam) == TroDS?) Bi tp: Vit gii thut to danh sch ni vng, duyt v xem danh sch, sp xp danh sch.

4.4.2. Danh sch lin kt i


Khi nim:
Danh sch lin kt i l danh sch tuyn tnh, trong mi nt c cha hai con tr lm nhim v tr n nt trc v nt sau n trong danh sch

S cu to:
Mi nt Danh sch
a TroDS b DL Ketruoc Kesau

http://gg.gg/sns

73

Smith Nguyen Studio.

4.4.2. Danh sch lin kt i


Mi nt khng ch ni n nt tip theo m cn ni n nt trc n C 2 con tr tr ti NULL: ti nt u v nt cui ca danh sch u im:
ti mt nt c th thm nt trc n mt cch d dng. Cho php duyt danh sch theo chiu ngc li Con tr danh sch khng cn thit phi cht ti mt im duy nht

4.4.2. Danh sch lin kt i


Khai bo kiu ci t danh sch lin kt i
typedef struct Node{ <KieuDL> DL; struct Node* Kesau; struct Node* Ketruoc; } kieupt;
DL Ketruoc Kesau

http://gg.gg/sns

74

Smith Nguyen Studio.

4.4.2. Danh sch lin kt i


Thm nt nm ngay trc phn t c tr bi Q (trng hp tng qut): Xin cp vng nh mi Nhp d liu mi Nu TroDS==NULL
To 2 kt ni t phn t mi ti NULL TroDS=Tam

Nu khng, Nu Q==TroDS
To mt kt ni (sau) n phn t u ang tr bi Q To kt ni (trc) ti NULL Thay kt ni trc ca Q Thay a ch ca TroDS

Nu khng,
To 2 kt ni t phn t mi ti danh sch Thay 2 kt ni t danh sch ni ti phn t mi

Bt u Tam<=Avail Nhp d liu vo DL(Tam) TroDS==NULL + Ketruoc(Tam)=Kesau(Tam)=NULL Ketruoc(Tam)=Ketruoc(Q) _ Kesau(Ketruoc(Q)=Tam Ketruoc(Q)=Tam Kt thc Q==TroDS _

TroDS=Tam

Kesau(Tam)=Q + TroDS=Tam

http://gg.gg/sns

75

Smith Nguyen Studio.

4.4.2. Danh sch lin kt i


Loi b nt c tr bi Q
Nu Q==Trods
Nu (Kesau(Q)!=NULL) Ketruoc(Kesau(Q))=NULL TroDS=Kesau(Q)

Nu khng,
Nu (Kesau(Q)=NULL) Kesau(Ketruoc(Q))=NULL Nu khng
Ketruoc(Kesau(Q))=Ketruoc(Q) Kesau(Ketruoc(Q))=Kesau(Q)

Q=>Avail

Bt u + + Q==TroDS _ _

TroDS Q

Kesau(Q)==NULL

_ Kesau(Q)==NULL + Kesau(Ketruoc(Q))=NULL

Ketruoc(Kesau(Q))=NULL

Ketruoc(Kesau(Q))=Ketruoc(Q) TroDS=(Kesau(Q)) Kesau(Ketruoc(Q))=Kesau(Q) Q=>Avail d Kt thc c

http://gg.gg/sns

76

Smith Nguyen Studio.

4.5. V d s dng danh sch lin kt Ci t a thc

T c v t ci t

4.6. Ngn xp v Hng i


4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp 4.6.2. M hnh thit k ngn xp 4.6.3. ng dng ca ngn xp 4.6.4. Hng i v cc thao tc c bn trn cc hng i 4.6.5. Ci t hng i

http://gg.gg/sns

77

Smith Nguyen Studio.

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


nh ngha:
Mt ngn xp (stack) l mt m hnh (c cu) m cc tc ng vo n ch c thc hin ti mt pha ca n. Pha ny c gi l nh ca ngn xp. Trong tin hc, mt ngn xp l l mt danh sch tuyn tnh m cc tc ng vo n ch c thc hin ti mt pha ca n. Pha ny c gi l nh ca ngn xp.

V d:
Ta hnh dung ngn xp nh mt ngn ko ng ti liu (ca mt bn lm vic) m ta ch c th thm vo hoc bt i cc phn t (ti liu) trong t mt trn (nh) ca ngn ko. on o chiu toa xe la. Hp bng n ca sng AK. Mt chng cc vt cng kiu (sch, bt, o, ng xu, hp n sng my AK47)
V vy m c tn gi Stack (danh sch kiu xp chng)

http://gg.gg/sns

78

Smith Nguyen Studio.

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


Vi kiu ngn xp, ta ch c th thc hin cc thao tc sau:
Khi to mt ngn xp. y (push) mt phn t mi vo ngn xp nu ngn xp cha y. Phn t d liu mi lun c thm ti nh. Ly (pop) mt phn t ra khi ngn xp nu ngn xp khc rng. Phn t b loi l phn t ang nm ti nh. Kim tra xem ngn xp c hay khng c phn t (rng hay khng). Kim tra xem ngn xp y hay cha Mi tc ng khc vo ngn xp u phi thng qua cc thao tc ny.

Nh vy:
Cc phn t ca ngn xp c cng mt kiu no Ngn xp l mt trng hp ring ca danh sch, c s dng trong cc ng dng c lin quan n s o ngc. Trong CTDL ngn xp, vic thm hay ly d liu ch c thc hin ti mt u. D liu thm vo sau s ly ra trc, tnh cht ny cn c gi l vo sau ra trc (Last In First Out LIFO). V vy, t nay v sau khi ni n ngn xp ta hiu l danh sch kiu LIFO

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


Ta s thy trong v d sau, cc thao tc push v pop l cc thao tc quan trng, c s dng thng xuyn khi lm vic vi ngn xp.
Push Q vo stack Push A vo stack Pop mt phn t (A) khi stack Pop mt phn t (Q) khi stack Push R vo stack Push D vo stack Push M vo stack Pop mt phn t (M) khi stack Push Q vo stack Push G vo stack
Q A Q A Q

Stack rng
R Stack rng D R M D R M D R Q D R G Q D R G Q M D A R Q

Stack

http://gg.gg/sns

79

Smith Nguyen Studio.

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


V d: IT-IS-A-STACK
Push I vo stack Push T vo stack Pop mt phn t (T) khi stack Push I vo stack Push S vo stack Pop mt phn t (S) khi stack Push A vo stack Pop mt phn t (A) khi stack Push S vo stack Push T vo stack Push A vo stack Push C vo stack Push K vo stack
K C A T A S T I I

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


V d i mt s nguyn dng, chng hn 23, sang c s 2, ta thc hin nh sau:
23 2 1 11 2 1 5 1 2 2 0 2 1 2 1 0 1 1 Vit ra kt qu

1 1 0 Qu trnh chia lin tip t s d vo Ngn xp

Nh vy ta phi nhiu ln thc hin thao tc push(s, sodu) trong qu trnh thc hin chia lin tip cho 2 v sau khi thc hin xong dy cc php chia li phi lin tip vit ra pop(s) cho n khi ngn xp s rng

http://gg.gg/sns

80

Smith Nguyen Studio.

4.6.1. Ngn xp v cc thao tc c bn trn cc ngn xp


Begin repeat write('Cho so tu nhien n: '); readln(n); ktaonx(tronx); while n>0 do begin r:=n mod 2; push(r,tronx); n:=n div 2; end; while not la_rong(tronx) do write(pop(tronx)); writeln; write('Co doi nua khong? (C/K)'); readln(ch); until upcase(ch)='K'; End.

4.6.2. M hnh thit k ngn xp


Thc hin m hnh ha ngn xp
Ta cn to mt cu trc danh sch tuyn tnh v chun b cc thao tc c th lm vic vi danh sch ny vi t cch l mt ngn xp Cn nh ngha mt kiu danh sch coi n nh ngn xp, bao gm cu trc d liu c s dng v i tng lm nh ca ngn xp. Do c th chn danh sch lin kt n vi mt con tr n u (nh) danh sch hoc mng mt chiu vi mt tham s nguyn ch v tr nh ca ngn xp Cn to cc th tc/hm thao tc trn danh sch ny vi t cch l thao tc ngn xp bao gm 5 thao tc ni trn.

http://gg.gg/sns

81

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh danh sch lin kt ca ngn xp) M hnh danh sch lin kt ca ngn xp
Cu trc d liu ca mi phn t thuc ngn xp s chnh l mt bn ghi gm cc trng ni dung v mt trng kiu con tr lm nhim v lin kt. Ngn xp S l mt danh sch c qun l bi con tr danh sch S v cc thao tc khi to, push, pop, kim tra rng, kim tra y s c tham s ha bi cc hm/th tc: khoitao(s), push(s,pt), pop(s), la_rong(s), la_day(s) Vic lu tr d liu vo ngn xp s thc cht l vic thc hin mt hay nhiu ln thao tc push(s,pt) vi s l con tr dng qun l ngn xp (tr n nh ca n) v pt l mt phn t d liu cn lu tr. Vic ly d liu ra khi ngn xp c lm tun t bng cc thao tc pop(s)

4.6.2. M hnh thit k ngn xp


(M hnh danh sch lin kt ca ngn xp)
Khai bo v th tc trong Pascal
Type kieudl=<kiu d liu>; tropt=^kieupt; kieupt=record nd:kieudl; ke:tropt; end; Var r:kieudl; tronx:pointer; n:longint;

http://gg.gg/sns

82

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh danh sch lin kt ca ngn xp)
Procedure ktaonx(var tronx:pointer); Begin tronx:=nil; End; Procedure push(pt:kieudl; var tronx: pointer); Var them:tropt; Begin new(them); them^.nd:=pt; them^.ke:=tronx; tronx:=them; End;

4.6.2. M hnh thit k ngn xp


(M hnh danh sch lin kt ca ngn xp)
Function pop(var tronx:pointer):kieudl; var tam:tropt; Begin tam:=tronx; pop:=tam^.nd; tronx:=tam^.ke; dispose(tam); end; Function la_rong(tronx:pointer):boolean; begin la_rong:=(tronx=nil); end; Ni chung khi ci t bi danh sch lin kt ta t phi quan tm nhiu n vic ngn xp l y hay cha.

http://gg.gg/sns

83

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh mng ca ngn xp) M hnh mng ca ngn xp
Cu trc d liu ca mi phn t thuc ngn xp s chnh l cu trc d liu ca phn t ca mng. Ngn xp s l mt cu trc/bn ghi gm mng cc phn t d liu c qun l km theo mt bin nh (s nguyn) xc nh v tr ca nh ngn xp v cc thao tc khi to, push, pop, kim tra rng, kim tra y s c tham s ha bi cc hm/th tc: khoitao(s), push(s,pt), pop(s), la_rong(s), la_day(s). V mng c kch thc c nh nn hm kim tra y (la_day(s)) l cn thit

4.6.2. M hnh thit k ngn xp


(M hnh mng trong C ca ngn xp)
Cu trc ngn xp
typedef struct intstack{ int *stackAry; /*mng lu tr cc phn t.*/ int count; /*s phn t hin c ca stack */ int stackMax; /*gii hn ti a cc phn t c lu tr*/ int top; /*ch s ca phn t nh*/ } IntStack; int PushStack(IntStack *stack, int dataIn) { if(stack->count == stack->stackMax) return 0; /*kim tra trn*/ else{ /* Thm phn t vo stack */ (stack->count)++; (stack->top)++; /* Tng nh */ stack->stackAry[stack->top] =dataIn; return 1;} } /* PushStack*/

http://gg.gg/sns

84

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh mng trong C ca ngn xp)
int PopStack(Int Stack *stack,int *dataOut){ if(stack->count == 0)return 0; /* Kim tra stack rng */ *dataOut=stack->stackAry[stack->top]; /* ly gi tr phn t b loi*/ (stack->count)--; (stack->top)--; /* gim nh */ return 1; }/* PopStack*/ /* Xem phn t nh ca stack, tr li 1 nu thnh cng v tr li 0 nu stack rng, dataOut cha kt qu */ int TopStack(IntStack *stack, int* dataOut){ if(stack->count ==0) return 0; /* Stack rng */ *dataOut = stack->stackAry[stack->top]; return 1; }/* Topstack*/

4.6.2. M hnh thit k ngn xp


(M hnh mng trong C ca ngn xp)
/* Kim tra stack rng, tr li 1 nu l rng, Tr li 0 nu khng rng */ int IsEmptyStack(IntStack *stack){ return(stack->count == 0); }/* IsEmptyStack*/ /* Kim tra stack y. Tr li 1 nu l y, tr li 0 nu khng y*/ int IsFullStack(IntStack *stack){ return(stack->count==stack->stackMax); }/* IsfullStack*/

http://gg.gg/sns

85

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh mng trong C ca ngn xp)
Int Stack *CreateStack(int max){ IntStack *stack; stack=(IntStack*)malloc(sizeof(IntStack)); if(stack == NULL) return NULL; /*Khi to stack rng*/ stack->top = -1; stack->count = 0; stack->stackMax= max; stack->stackAry=malloc(max*sizeof(int)); return stack ; }/* createStack*/

4.6.2. M hnh thit k ngn xp


(M hnh mng trong Pascal ca ngn xp)

Cu trc ngn xp
Type
Nmax=100; Kieudl=<kiu d liu>; Kieumang=array[1..100] of kieudl; Kieunx=record dl:kieumang; dinh:integer; end;

Var
S: kieunx;

http://gg.gg/sns

86

Smith Nguyen Studio.

4.6.2. M hnh thit k ngn xp


(M hnh mng trong Pascal ca ngn xp)
Th tc/hm: khoitao(s), s.dinh:=0; Th tc/hm: push(s,pt): s.dinh:=s.dinh+1; s.dl[dinh]:=pt; Hm: pop(s), return(s.dl[dinh]); s.dinh:=s.dinh-1; Hm la_rong(s) if s.dinh=0 return true Ham la_day(s) if s.dinh=nmax return true

4.6.3. ng dng ca ngn xp (x l biu thc)


i c s nh gi biu thc hu t
K php trung t v k php hu t ca biu thc K php trung t (cch vit biu thc thng thng)
Vi php ton 2 ngi: Mi ton t c t gia hai ton hng a+b*c c hiu l a+(b*c) Vi php ton mt ngi: Ton t c t trc ton hng Tuy nhin theo cch vit ny ta cn phi quy c: trong dy cc php tnh th nhn (chia) thc hin trc, cn cng (tr) thc hin sau (k t tri qua phi), nu mun thay i (quy nh th t khc i) th phi s dng n cc du ngoc theo ngha trong ngoc s c thc hin trc. (a+b)*c Sp xp gim dn ca th t u tin ca ton t: () >^ >*=% =/ >+ =

Vic nh gi (tnh gi tr) biu thc trung t kh phc tp

http://gg.gg/sns

87

Smith Nguyen Studio.

4.6.3. ng dng ca ngn xp (x l biu thc)


minh ho ta xt biu thc trung t: 5(((9+8) (4+6))+7) 5((1710)+7) 5(170+7) 5 177 885 K php hu t (PRN)
L k php trnh by mt biu thc, theo ton hng t trc ton t. Do nh ton hc BaLan, Jan Lukasiewicz xut vo u nhng nm 50 ca th k trc nn c tn gi l k php nghch o BaLan (Polish Reverse Notation PRN). Biu thc (a+b)*c trong k php trung t c vit li l a b+ c *

Biu thc hnh bn c th vit li l:


5 9 8 + 4 6 + 7+ 5 17 10 7 + 5 170 7 + 5 177 885

R rng cch vit ny c u im l khng cn n cc du ngoc, ng thi qu trnh tnh gi tr ca biu thc ny c minh ha bi hnh v sau

4.6.3. ng dng ca ngn xp (x l biu thc)


Ta s lu tr cc ton hng cho n khi mt ton t (php ton) xut hin. Vi php ton ny hai ton hng cui cng (trong danh sch cc ton hng c lu tr) s c ly ra v sau khi thc hin php ton, kt qu li c a vo lu tr. Do vic s dng mt ngn xp l hp l.
5 9 8 + 4 6 + 7+ 5 17 10 7 + 5 170 7 + 5 177 885
6 10 4 7 8 170 17 177 9 885 5

http://gg.gg/sns

88

Smith Nguyen Studio.

4.6.3. ng dng ca ngn xp (x l biu thc)


Thut ton tnh gi tr mt biu thc dng RPN
Khi to mt ngn xp rng Lp c thnh phn (tip theo) trong biu thc Nu l mt ton hng th t n vo ngn xp nu khng (tc l ton t-php ton) th lp nu ngn xp rng th biu thc c li thot ra khi thut ton nu khng th ly ra khi ngn xp mt phn t cho n khi ly hai phn t Thc hin php ton va c vi hai phn t va c ly ra t kt qu vo ngn xp cho n khi c du hiu kt thc biu thc

Bt u Khi to(s) c thnh phn (tip theo) ca biu thc i=0 La_Rong(s) _ _ L ton hng + Push(s,ton hng) Ht biu thc + _

i=i++; tam[i]=pop(s); i<2 _

Bo li b thc (Return 0)

Push(s, op(Tam[1],tam[2])) _ Ht biu thc + Return pop(s) Kt thc

http://gg.gg/sns

89

Smith Nguyen Studio.

4.6.3. ng dng ca ngn xp (x l biu thc)


Thut ton i mt biu thc dng trung t thnh mt biu thc dng RPN. chuyn mt biu thc dng trung t sang dng RPN (hu t) ta cn phi thc hin cc thao tc no? xy dng thut ton chuyn i ny ta hy xem xt mt v d: 5 ((9+8) (4+6)+7)=5 ((9 8 +) (4 6 +) )7+ 5 9 8 + 4 6 + 7+ v mt v d khc: (7+5)/2-3 2=((7+5)/2)-(3 2)=7 5 + 2 / 3 2 N s c thc hin bng cch ln lt c t tri qua phi cc thnh phn ca biu thc trung t. Cc k hiu php ton (ton t) v cc du m ngoc s c t vo mt ngn xp tm thi trc khi c vit nghp vi cc ton hng, cc ton hng s c vit ra ngay trong biu thc RPN khi c thy chng trong biu thc trung t. C th l:

4.6.3. ng dng ca ngn xp (x l biu thc)


Khi to mt ngn xp rng Lp c thnh phn (tip theo) trong biu thc Nu thnh phn l ton hng th vit ra nu khng th (n l du ngoc quy nh mc u tin hoc l mt ton t) Nu l du '(' (du ngoc tri) th t n vo ngn xp Nu l du ')' (du ngoc phi) th Lp Ly ra phn t thuc ngn xp Nu phn t ny khng phi l du '(' th vit ra cho n khi phn t c ly ra l du '( Nu l du ton t th (chc chn phi c t vo ngn xp)
Nu ngn xp khc rng th

http://gg.gg/sns

90

Smith Nguyen Studio.

4.6.3. ng dng ca ngn xp (x l biu thc)


Lp Ly ra phn t nh ca ngn xp Nu phn t va ly ra ny c u tin hn ton t ang xt th vit phn t va ly ra cho n khi ton t ang xt c u tin hn phn t va ly ra hoc ngn xp rng Nu ton t ang xt c u tin hn phn t va ly ra th t tr li ngn xp phn t va ly ra t ton t ang xt vo ngn xp nu khng th t ton t ang xt vo ngn xp cho n khi gp du kt thc biu thc Khi ngn xp ang cn th ly ra v vit cc phn t ca ngn xp.

Bt u Khi to(s) c thnh phn-tp (tip theo) ca b thc tt _ La((tp) Push(s,tp) L ton hng(tp) Latt(tp) Pt=pop(s) + _ + Vit tip(bt,tp) La_Rong(s) Push(s,pt) Push(s,tp) Ht biu thc _

La)(tp) Pt=pop(s) La((pt) _

Vit tip(bt,pt) Vit tip(bt,pop(s) _

_ Pt >=tp + Vit tip(bt,Pt)

La_Rong(s) + Kt thc

http://gg.gg/sns

91

Smith Nguyen Studio.

4.6.4. Hng i v cc thao tc c bn trn cc hng i


nh ngha: Mt hng i (queue) l mt m hnh (c cu) m tc ng b sung vo n c thc hin mt pha ca n v tc ng loi b mt phn t c thc hin pha cn li. Trong tin hc, mt hng i l mt danh sch tuyn tnh m thao tc b sung ch c thc hin mt u v thao tc bt i c thc hin pha cn li ca n. V d: Ta hnh dung hng i nh mt dy ngi xp hng ti mt quy hng mua mt mt hng no m ch c th thm vo hng i t cui v bt i phn t u ca hng i. Mt vi v d khc:
Mt dy cc cng vic trong mt h thng my tnh ang ch mt thit b no (chng hn nh my in). Mt dy my bay ang trong ng dn ra ng bng chun b ct cnh

4.6.4. Hng i v cc thao tc c bn trn cc hng i


Hng i l mt cu trc d liu tru tng, l mt danh sch tuyn tnh. Tuy nhin im khc cn bn, c th xem nh i lp vi ngn xp l trong khi ngn xp hot ng theo nguyn l vo sau - ra trc (LiFo Last in - First out) th hng i hot ng theo nguyn l vo trc - ra trc (FiFo First in - First out).

Kim tra an ninh ti ga hng khng (security check)

http://gg.gg/sns

92

Smith Nguyen Studio.

4.6.4. Hng i v cc thao tc c bn trn cc hng i


Vi kiu hng i, ta quy c ch c th thc hin cc thao tc sau:
Khi to mt hng i. t (put) mt phn t mi vo hng i nu hng i cha y. Phn t d liu mi lun c thm ti ui. Nhn li (get) mt phn t t hng i nu hng i khc rng. Phn t b loi l phn t ang nm ti u. Kim tra xem hng i c hay khng c phn t (rng hay khng). Kim tra xem hng i y hay cha Mi tc ng khc vo hng i u phi thng qua cc thao tc ny.

Nh vy:
Cc phn t ca hng i c cng mt kiu no Hng i l mt trng hp ring ca danh sch, c s dng trong cc ng dng c lin quan n s bor tn th t. Trong CTDL hng i, d liu thm vo trc s ly ra trc, tnh cht ny cn c gi l vo trc ra trc (First In First Out -FIFO). V vy, t nay v sau khi ni n hng i ta hiu l danh sch kiu FIFO

4.6.5. M hnh thit k hng i


Thc hin m hnh ha hng i
Ta cn to mt cu trc danh sch tuyn tnh v chun b cc thao tc c th lm vic vi danh sch ny vi t cch l mt hng i Cn nh ngha mt kiu danh sch coi n nh hng i, bao gm cu trc d liu c s dng v cc i tng lm u v ui ca hng i. Do c th chn danh sch lin kt n vi mt con tr n u danh sch v mt con tr tr n cui (ui) hoc mng mt chiu vi hai tham s nguyn ch v tr u v ui ca hng i. i khi cn gn thm mt bin nguyn lu tr thng tin v kch thc thc t ca hng i. Cn to cc th tc/hm thao tc trn danh sch ny vi t cch l thao tc hng i bao gm 5 thao tc ni trn.

http://gg.gg/sns

93

Smith Nguyen Studio.

4.6.5. M hnh thit k hng i


(M hnh danh sch lin kt ca hng i)
M hnh danh sch lin kt ca hng i
Cu trc d liu ca mi phn t thuc hng i s chnh l mt bn ghi gm cc trng ni dung v mt trng kiu con tr lm nhim v lin kt. hng i Q l mt danh sch c qun l bi con tr danh sch H tr ti u v mt con tr ph T tr n ui cng cc thao tc khi to, put, get, kim tra rng, kim tra y s c tham s ha bi cc hm/th tc: khoitao(H,T), put(H,T,pt), get(H,T), la_rong(H,T), la_day(H,T) Vic lu tr d liu vo hng i Q thc cht l vic thc hin mt hay nhiu ln thao tc put(H,T,pt) vi H l con tr dng qun l hng i (tr n nh ca n), T l con tr tin b sung phn t v pt l mt phn t d liu cn lu tr. Vic ly d liu ra khi hng i c lm tun t bng cc thao tc get(H,T).

4.6.5. M hnh thit k hng i


(M hnh danh sch lin kt ca hng i)

Khai bo v th tc/hm trong Pascal Khai bo v hm trong C

http://gg.gg/sns

94

Smith Nguyen Studio.

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)
M hnh mng ca hng i
Cu trc d liu ca mi phn t thuc hng i s chnh l cu trc d liu ca phn t ca mng. Hng i q l mt cu trc/bn ghi gm mt mng cc phn t d liu c qun l km theo hai bin u, ui (s nguyn) xc nh v tr ca u v ui ca hng i, mt bin nguyn ch kch thc hin thi ca n v cc thao tc khi to, put, get, kim tra rng, kim tra y s c tham s ha bi cc hm/th tc: khoitao(q), put(q,pt), get(q), la_rong(q), la_day(q) V mng c kch thc c nh nn hm kim tra y (la_day(q)) l cn thit. Mt im cn lu khi ci t hng i bi mng
Trong qu trnh x l d liu, nu khng kho th gy lng ph nh trong khi vn b bo trn (u v ui tng lin tc). Do cn X l quay vng.

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)

http://gg.gg/sns

95

Smith Nguyen Studio.

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)
1 u 2 ui 3 1 u 2 ui
ui

4 3

1 u 2

ui

4 3

1 u 2

ui

4 3 2
u

ui u

4 3

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)

Cc gii thut
Khai bo cu trc v bin hng i (q) gm
Mng (ng) lu tr cc phn t d liu (qarr) vi kch thc ti a l maxsize Cc bin nguyn (dau, duoi) tr tng minh n u v ui ca hng i Bin nguyn (kth) xc nh kch thc hin thi ca hng i

Khoitao(q)

/*to hng i q rng*/

Cp mng lu d liu vi kch thc maxsize; Dau=duoi=-1; Kth=0;

http://gg.gg/sns

96

Smith Nguyen Studio.

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)
La_day(q) /* hng i y */
return( q->kth == q->maxsize);

Put(q,pt) /*t vo ui hng i q phn t d liu pt*/


(q->duoi)++; If (q->duoi == q->maxsize) /* Queue wraps to element 0 */ q->duoi = 0; q->qarr[q->duoi] = pt; (q->kth)++; if(q->kth == 1) /* Inserting into null queue */ q->dau = 0; return;

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)
La_rong(q) /* hng i rng*/
return(q->kth == 0);

Get (q) /*ly ra t u hng i q phn t d liu */


Pt=q->qarr[q->dau]; /* gn gi tr cho bin ra pt*/ (Q->dau)++ if(q->dau == q->maxsize) q->dau = 0; /* queue front has wrapped to element 0 */ if(q->kth == 1) /* Deleted only item in queue */ q->duoi = q->dau = -1; (q->kth)--; Return pt;

http://gg.gg/sns

97

Smith Nguyen Studio.

4.6.5. M hnh thit k hng i


(M hnh mng ca hng i)
Khai bo v hm trong C
typedef struct chqueue{ ch *qarr; int maxsize; int kth; int dau; int duoi; }IntQueue;
qarr max size kth dau duoi

10

duoi

dau

i t i s q u e u e ! 0 1 2 3 4 5 6 7 8 9

Chng 5. Cy

5.1. Cy v cc khi nim v cy 5.2. Cc php ton trn cy 5.3. Ci t cy 5.4. Cy nh-phn

http://gg.gg/sns

98

Smith Nguyen Studio.

5.1. Cy v cc khi nim v cy

5.1.1. nh ngha cy 5.1.2. Cc khi nim lin quan 5.1.3. Cy c sp 5.1.4. V d

5.1.1. nh ngha cy
S cn thit phi s dng cu trc cy Danh sch tuyn tnh ch th hin c cc mi quan h tuyn tnh. Thng tin cn c th c quan h dng phi tuyn, nh ngha cy (c gc) L mt danh sch T khc rng trong
Hoc T ch bao gm mt phn t r. Hoc nu nhiu hn mt phn t r th r gi l gc v c mt quan h F trn n phn cn li (tr gc r) c chia thnh m (m>0) cy vi cc gc r1, r2,,rm sao cho vi mi i (1 i m) u c r F ri.. Quan h F c gi l quan h chacon.
Nu x F y th ta gi x l cha ca y hoc y l con ca x. Cc cy vi cc gc r1, r2,,rm c gi l cc cy con ca cy r

http://gg.gg/sns

99

Smith Nguyen Studio.

5.1.1. nh ngha cy
Biu din cy bi th
A B G

Mi phn t thuc T t nay c gi l mt nh ca cy

5.1.2. Cc khi nim lin quan


S cc con ca mt nh gi l bc (cp) ca nh . Cc nh c bc 0 c gi l l ca cy. Cc nh c t nht mt con c gi l nh trong. Cc con c cng mt cha c gi l anh em. Mt dy cc nh a1, a2, ... an (n 1), sao cho ai (i = 1, 2, ... , n-1) l cha ca ai+1 c gi l ng i trong quan h cha-con t a1 n an. di ca ng i ny l n-1. Nu c mt ng i t nh a n nh b c di k 1, th ta ni a l tin thn ca b v b l hu th ca a. di ca ng i di nht t nh a n mt l c gi l cao ca nh a. cao ca gc c gi l cao ca cy. di ca ng i t gc n a c gi l mc ( su) ca nh a.

http://gg.gg/sns

100

Smith Nguyen Studio.

5.1.2. Cc khi nim lin quan


Nh vy, t cc nh ngha trn ta suy ra rng:
Mi nh ca cy l gc ca cc con ca n. L l nh khng c con. Cc nh ca cy hoc l l hoc l nh trong. Lun lun tn ti mt ng i duy nht trong quan h cha-con F t gc ti mt nh bt k trong cy. Vi mi x,y (x r y) thuc T u tn ti mt phn t z thuc T c mt ng i trong quan h F t z n x v mt ng i trong quan h F t z n y. Gc ca cy c mc 0.

5.1.2. Cc khi nim lin quan


V d. Trong cy bn: A B G
nh C l cha ca cc nh D,E. Cc nh D,E,I,J,K, F, L l l, cc nh cn li l nh trong. A,B,C,E l ng i c di 3 t A n E. nh B l tin thn ca cc nh C,F,D,E. nh B c cao l 2, cy c cao l 3. Cc nh B,G c mc 1 ; cc nh C,F,H,L c mc 2, cn mc ca cc nh D,E,I,J,K l 3.

http://gg.gg/sns

101

Smith Nguyen Studio.

5.1.3. Cy c sp
Trong mt cy, nu cc cy con ca mi nh c sp theo mt th t nht nh, th cy c gi l cy c sp (t tri qua phi). Sau ny chng ta ch quan tm n cc cy c sp. Do khi ni n cy th cn c hiu l cy c sp. Gi s trong mt cy c sp T, nh a c cc con c sp theo th t : b1, b2, ..., bk (k 1). Khi ta ni b1 l con trng ca a, v bi l anh lin k ca bi+1 (bi+1 l em lin k ca bi), i = 1,2, ..., k-1. Ta cn ni, vi i < j th bi bn tri bj (bj bn phi bi). Quan h ny c m rng nh sau: Nu a bn tri b th mi hu th ca a bn tri mi hu th ca b. V d. Trong cy cho I l con trng ca H, v l anh lin k ca nh J. nh K l con t ca H ( tn cng bn bn phi trong s cc con ca H.

5.1.4. V d
Cy biu din cc t chc
Chnh ph B A B B B Z V T

S X

Cc Y

Ban r

Ban s

Cy th mc

http://gg.gg/sns

102

Smith Nguyen Studio.

5.2. Cc php ton trn cy


5.2.1. Cc php ton c bn trn cy 5.2.2. i qua cy (duyt cy)

5.2.1. Cc php ton c bn trn cy


Tm cha ca mi nh
tm cha ca mi nh x, cn thit phi xy dng hm Parent(x) tr v a ch l a ch ca nh cha ca x. Trng hp x l gc hm c th tr v NULL.

Tm con bn tri ngoi cng (con trung) ca mi nh.


Hm EldestChild (x) cho ta con trng ca nh x. Trong trng hp x l l (x khng c con) th EldestChild (x) = NULL.

Tm em lin k ca mi nh.
Hm NextSibling (x) xc nh em lin k ca nh x. Trong trng hp x khng c em lin k (tc x l con ngoi cng bn phi ca mt nh no ) th NextSibling(x) = NULL.

http://gg.gg/sns

103

Smith Nguyen Studio.

5.2.1. Cc php ton c bn trn cy


V d. Gi s T l cy cho trong hnh bn. Khi
Parent(E) = C, Parent(A) = NULL, EldestChild(C) = D, C EldestChild(H) = I, EldestChild(K) = NULL, NextSibling(g) = NULL, D NextSibling(H) = L.
B

A G

5.2.2. i qua cy (duyt cy)


Do nh ngha cy mang tnh quy nn cc thut ton trn cy cng thng c s dng bi quy. Duyt tin th t
Nu T l cy gm mt nh duy nht th nh (Thm gc) Nu l cy c gc (th
Thm gc Duyt cy con th nht theo tin th t. Duyt cc cy con cn li theo tin th t. C B

A G

Trong cy bn, th t cc nh c duyt theo tin th t l A B C D E F G H I J KL

http://gg.gg/sns

104

Smith Nguyen Studio.

5.2.2. i qua cy (duyt cy)


Duyt trung th t
Nu T l cy gm mt nh duy nht th thm nh (Thm gc). Nu l cy c gc th
Duyt cy con th nht theo trung th t. Thm gc Duyt cc cy con cn li theo trung th t.
C A B G

Trong cy bn, th t D cc nh c duyt theo trung th t l D, C, E, B, F, A, I, H, J, K, G, L.

5.2.2. i qua cy (duyt cy)


Duyt hu th t
Nu T l cy gm mt nh duy nht th thm nh (Thm gc). Nu l cy c gc th
Duyt cy con th nht theo hu th t. Duyt cc cy con cn li theo hu th t. Thm gc
C A B G

Trong cy bn, th t D cc nh c duyt theo hu th t l D, E, C, F, B, I, J, K, H, L, G, A.

http://gg.gg/sns

105

Smith Nguyen Studio.

5.3. Ci t cy

5.3.1. Biu din cy bng danh sch cc con ca mi nh 5.3.2. Biu din cy bng con trng v em lin k ca mi nh 5.3.3. Biu din cy bi cha ca mi nh

5.3.1. Biu din cy bng danh sch cc con ca mi nh


ci t cy, v nguyn tc l phi lu tr c cy (tp hp) v thng tin v quan h cha-con gia cc nh. Phng php thng dng biu din cy l, vi mi nh ca cy ta thnh lp mt danh sch cc nh con ca n theo th t t tri sang phi. Ci t bi mng: s dng mt mng lu gi cc nh ca cy. Mi thnh phn ca mng l mt t bo cha thng tin gn vi mi nh v danh sch cc nh con ca n.
A B G

http://gg.gg/sns

106

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Cc nh ca cy c nh s t 1 n N
1 2 3 4 5 6 7 8 9 10 11 12 A B G C F H L D E I J K 2 4 6 8 10 3 5 7 9 12 11

A 1 B 2 G 3

C 4

F 5

H 6

L 7

D 8

E 9

I 10

J 11

K 12

5.3.1. Biu din cy bng danh sch cc con ca mi nh


V s con ca mi nh c th khc nhau nhiu, cho nn ta s s dng danh sch lin kt. Nh vy mi phn t mng dng m t nh ca cy l mt bn ghi gm hai trng : trng DL cha thng tin gn vi nh, trng trocon l con tr, tr ti danh sch cc con ca nh .
const N = ... ; { N l s ln nht cc nh m cy c th c } type tropt = ^kcon : kcon = record id : 1..N ; kesau: tropt end ; kptu = record DL : kieudl ; trocon : tropt end ; kcay = array [1 ... N] of kptu ;

http://gg.gg/sns

107

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


trong cch ci t ny, vi mi nh k ta xc nh ngay v tr ca con trng ca n trong mng T c kiu kcay bi hm sau. function EldestChild ( k : 1..N ; T : kCay): 0..N ; var P : tropt ; begin if T[k].trocon < > nil then begin P : = T[k]. trocon ; EldestChild : = P^. id ; end else EldestChild: = 0 end ;

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Tuy nhin trong cch ci t ny, vic tm cha v em lin k ca mi nh li khng n gin. Chng hn, tm cha ca nh k, ta phi duyt cc danh sch cc con ca mi nh. Nu pht hin ra trong danh sch cc con ca nh m c cha k th Parent (k) = m. Hm Parent (k) c xc nh nh sau :
Function Parent (k : 1..N ; T : kCay) : 0..N ; var P : tropt ; i : 1 ... N ; found : boolean ; begin i:=1; found : = false ;

http://gg.gg/sns

108

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


while ( i < = N) and (not found) do begin P : = T[i].trocon ; while (P < > nil) and (not found) do if P^.id = k then begin Parent : = i : found : = true ; end else P : = P^.kesau ; i: = i + 1 end ; if not found then Parent : = 0 ;

end ;

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Bng cch tng t (duyt cc danh sch cc con), ta cng c th tm c em lin k ca mi nh. M t chi tit hm NextSibling c li xem nh bi tp.

http://gg.gg/sns

109

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Ci t bi con tr
C th s dng cc con tr tr ti cc nh ca cy. Ti mi nh, ta s s dng mt danh sch cc con tr tr ti cc con ca n, danh sch ny c ci t bi mng cc con tr. Mt con tr Root c s dng tr ti gc ca cy. Ta c th khai bo cu trc d liu biu din cy trong cch ci t ny nh sau. const K = ..... ; {K l s ti a cc con ca mi nh} type tropt = ^Node ; Node = record infor : item ; child : array [1...K] of tropt end ; var Root : tropt ;

5.3.1. Biu din cy bng danh sch cc con ca mi nh


A Trng d liu

Mng cc con tr
B G

http://gg.gg/sns

110

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Gi s P l mt con tr tr ti mt nh no trong cy, ta s gi nh ny l nh P. Sau y ta s xt xem php ton tm cha ca n Parent (P) c thc hin nh th no. T tng ca thut ton tm cha ca nh P cng khng c g khc trc, khi cy ci t bi mng, tc l ta cng phi duyt cc nh con ca mi nh. Khi cc nh ca cy c lu trong mng, vic i ln lt qua cc nh ca cy xt cc con ca n c thc hin rt d dng. Ta s s dng mt hng i H lu cc nh c xt.
u tin hng i cha gc Root ca cy. Ti mi thi im ta s loi nh Q u hng ra khi hng v xt cc con ca n. Nu mt trong cc nh con ca Q l P th Parent (P) = Q, Ngc li ta s a cc nh con ca Q vo cui hng.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


Hm Parent c xc nh nh sau.
function Parent (P : tropt ; Root : tropt) : tropt ; var Q, R : tropt ; H : Queue ; found : boolean ; begin Initialize (H) ; {khi to hng rng H} Addqueue (Root, H) ; {a Root vo hng} found : = false ; while (not Emty (H) and (not found) do begin DeleteQueue (H, Q) ; {Loi Q khi u hng} i: = 0 ;

http://gg.gg/sns

111

Smith Nguyen Studio.

5.3.1. Biu din cy bng danh sch cc con ca mi nh


repeat i:=i+1; R : = Q^. child [i] ; if R < > nil then if R = P then begin Parent : = Q found : = true end else AddQueue (R, H) until found or (R = nil) or (i = N) end ; if not found then Parent : = nil end ;

Mt cch hon ton tng t, ta c th vit c hm tm em lin k NextSibling.

5.3.2. Biu din cy bng con trng v em lin k ca mi nh


Ci t bi mng.
Gi s cc nh ca cy c nh s t 1 n N. Dng mng lu gi cc nh ca cy, mi nh c biu din bi bn ghi gm ba trng, ngoi trng infor, cc trng EldestChild v Nexsibling s lu con trng v em lin k ca mi nh. Ta c th khai bo nh sau :

type kieupt = record DL : kieudl ; EldestChild : 0...N ; NextSibling : 0...N end ; Tree = array[1...N] of kieupt ;

http://gg.gg/sns

112

Smith Nguyen Studio.

5.3.2. Biu din cy bng con trng v em lin k ca mi nh


D liu Con trng Em k

1 2 3 4 5 6 7 8 9 10 11 12

A B G C H F L D E I J K

2 4 6 8 10 0 0 0 0 0 0 0

0 3 0 5 7 0 0 9 0 11 12 0

A 1 B 2 G 3

C 4

F 5

H 6

L 7

D 8

E 9

I 10

J 11

K 12

5.3.2. Biu din cy bng con trng v em lin k ca mi nh


tm cha ca mt nh k no , ta s ln lt i qua cc nh ca cy, vi mi nh ta tm n cc con ca n, cho ti khi tm thy nh k:
Function Parent(k:1..N;T:Tree):0.. N; var i, j : 0 ... N ; found: boolean ; begin i:=1; found : = false ; while (i <=N) and (not found) do begin j : = T[i]. EldestChild ; if j = k then begin Parent : = i ; found : = true end else begin j : = T[j]. NextSibling ; while (j < > 0) and (not found) do if j = k then begin Parent : = i ;found : = true end else j : = T[j].NextSibling ; end ; i : = i+1 end ; if not found then Parent : = 0 end ;

http://gg.gg/sns

113

Smith Nguyen Studio.

5.3.2. Biu din cy bng con trng v em lin k ca mi nh


Ci t bi con tr.
Thay cho dng mng, ta c th s dng cc con tr ci t. Khi trong bn ghi Node, cc trng EldestChild v NextSibling s l cc con tr. Cy s c biu din bi cu trc sau. type tropt=^Node ; Node = record DL : kieudl; EldestChild : tropt ; NextSibling : tropt ; end ; var Root : tropt ;

5.3.2. Biu din cy bng con trng v em lin k ca mi nh


Trng d liu A

Tr conTr em

http://gg.gg/sns

114

Smith Nguyen Studio.

5.3.3. Biu din cy bi cha ca mi nh


Trong mt s p dng, ngi ta cn c th s dng cch biu din cy n gin sau y. Gi s cc nh ca cy c nh s t 1 n N. Da vo tnh cht, mi nh ca cy (tr gc) u c mt cha, ta s dng mt mng A[1...N] biu din cy, trong A[k] = m nu nh m l cha ca nh k. Trong trng hp cn quan tm n cc thng tin gn vi mi nh, ta cn phi a vo mi thnh phn ca mng trng DL m t thng tin mi nh. Cy c biu din bi cu trc sau. const N = ... ; type Node = record DL: Kieudl; parent : 0 ...N ; end ; Tree = array [1...N] of Node ; var T : Tree ;

5.3.3. Biu din cy bi cha ca mi nh


D liu Cha

1 2 3 4 5 6 7 8 9 10 11 12

A B G C F H L D E I J K

0 1 1 2 2 3 3 4 4 6 6 6

A 1 B 2 G 3

C 4

F 5

H 6

L 7

D 8

E 9

I 10

J 11

K 12

http://gg.gg/sns

115

Smith Nguyen Studio.

5.4. Cy nh phn

5.4.1. nh ngha v tnh cht 5.4.2. Ci t cy nh phn 5.4.3. Duyt cy nh phn 5.4.4. Cy tm kim nh phn

5.4.1. nh ngha v tnh cht


Mt tp cc nh T c gi l cy nh phn nu
N l cy rng, hoc Gm 3 tp con khng trng nhau:
1. 2. 3.

Mt nh gc Cy nh phn con tri Cy nh phn con phi

R A E

Mi nh c nhiu nht 2 nh con:


Con tri v Con phi
B D

http://gg.gg/sns

116

Smith Nguyen Studio.

5.4.1. nh ngha v tnh cht


Cy nh phn y l cy nh phn trong cc nh hoc l l hoc c cp bng 2
A B C D E F G H I J K

Cy nh phn hon chnh l cy trong tt c l u c cng mc v tt c nh trong c cp bng 2.

A B C D E F G

5.4.1. nh ngha v tnh cht


Mt s tnh cht
S ti a cc nh c mc i l 2i Vi cy nh phn
c cao H, s ti a cc nh l 2H+1 - 1 c N nh,
cao H ti a l N -1 cao H ti thiu l [log2(N+1)] -1

http://gg.gg/sns

117

Smith Nguyen Studio.

5.4.2. Ci t cy nh phn
Lu tr k tip (Dng mng)
Sp th t cc nh t mc 0 tr i v trong mi mc c nh s t tri sang phi. i vi cc cy nh phn hon chnh
D xc nh a ch ca cc nh
Con ca nh i l cc nh 2i v 2i+1 Cha ca nh i l [i/2].

Do mi thnh phn ca mng ch cn trng lu tr d liu m khng cn cc trng thng tin v quan h.

i vi cc cy nh phn khc, mi thnh phn ca mng nn c thm 2 trng: a ch (ch s) ca cy con tri v ca cy con phi.

5.4.2. Ci t cy nh phn
A

Lu tr mc ni (dng DS lin kt).


Trng d liu Tr tri Tr phi D

http://gg.gg/sns

118

Smith Nguyen Studio.

5.4.2. Ci t cy nh phn
Typedef struct kpt
{
kieudl DL; struct kpt *trai; Struc kpt *phai;

}KieuPT;

5.4.2. Ci t cy nh phn
Trng d liu A

Tr conTr em

http://gg.gg/sns

119

Smith Nguyen Studio.

5.4.3. Duyt cy nh phn.


Cng nh i vi cy, trong nhiu p dng ta cn phi duyt cy nh phn, thm tt c cc nh ca cy mt cch h thng Gi s vi mi nh ca cy ta cn thc hin mt nhm hnh ng no c m t trong th tc Visit. Chng ta thng duyt cy nh phn theo mt trong ba th t Preorder, Inorder v Portorder. Sau y l th tc quy duyt cy theo th t Preorder.
procedure Preorder (Root : tropt) ; begin if Root < > nil then begin Visit (Root) ; Preorder (Root^. left) ; Preorder (Root^.right) ; end end ;

5.4.3. Duyt cy nh phn


Mt cch tng t, ta c th vit c cc th tc quy i qua cy theo th t Inordor v Postorder.

Mt v d cy nh phn: cy biu thc.


Cy biu thc l cy nh phn gn nhn, biu din cu trc ca mt biu thc (s hc hoc logic). Mi php ton hai ngi (chng hn, +, -, *, /) c biu din bi cy nh phn, gc ca n cha k hiu php ton, cy con tri biu din ton hng bn tri, cn cy con phi biu din ton hng bn phi. Vi cc php ton mt ngi nh 'ph nh' hoc 'ly gi tr i', hoc cc hm chun nh exp ( ) hoc cos( ) th cy con bn tri rng. Cn vi cc php ton mt ton hng nh php ly o hm ( )' hoc hm giai tha ( )! th cy con bn phi rng.

http://gg.gg/sns

120

Smith Nguyen Studio.

5.4.3. Duyt cy nh phn


Ta c nhn xt:
nu i qua cy biu thc theo th t Preorder ta s c biu thc Balan dng PFN (k hiu php ton ng trc cc ton hng). Nu i qua cy biu thc theo th t Postorder, ta c biu thc Balan dng PRN (k hiu php ton ng sau cc ton hng); cn theo th t Inorder ta nhn c cch vit thng thng ca biu thc (k hiu php ton ng gia hai ton hng).

5.4.4. Cy tm kim nh phn


Kho ca mt i tng l mt nhm cc thuc tnh ca i tng sao cho trong mt tp cc i tng cng kiu th hai i tng khc nhau cn phi c cc gi tr khc nhau trn (kha) nhm cc thuc tnh . Ta gi thit
kiu ca kho (keytype) l mt kiu c th t thng tin gn vi mi nh ca cy nh phn l kho ca i tng no . Do mi nh ca cy nh phn c biu din bi bn ghi kiu kieupt c cu trc nh sau.
type tropt = ^kieupt; kieupt = record key : keytype ; {DL: kieudl} left : tropt ; right : tropt ; end ;

http://gg.gg/sns

121

Smith Nguyen Studio.

5.4.4. Cy tm kim nh phn


F

Cy tm kim nh phn l cy nh phn hoc trng, hoc tho mn cc iu kin sau.


Kho ca cc nh thuc cy con tri nh hn kho ca gc Kho ca gc nh hn kho ca cc nh thuc cy con phi ca gc. Cy con tri v cy con phi ca gc cng l cy tm kim nh phn.
A

D B C F D B A C E E

H G I

H G I J K

http://gg.gg/sns

122

You might also like