Вы находитесь на странице: 1из 123

CU TRC D LIU V GII THUT

Ging vin : H S m B mn Mng v truyn thng my tnh Trng H Cng Ngh - H Quc Gia H Ni Email damhs@vnu.edu.vn Mob. 0913580373

Gii thiu mn hc

Cung cp : - Cc kin thc c bn v cu trc d liu v thut ton; - K nng xy dng, la chn cc cu trc d liu v cc thut ton hp l.

Gii thiu mn hc

Chng I : Thut ton v phn tch thut ton Chng II : quy Chng III : Cc d liu c cu trc Chng IV : Danh sch Chng V : Cy Chng VI * : Bng bm Chng VII : Sp xp Chng VIII : Tm kim Chng IX : th Chng X : Cc k thut thit k thu ton

Tai liu tham kho

Thomas H. Cormen, Introduction to Algorithms, MIT Press, 1990 R. Sedgevick,Algorithms Addison- Wesley, Bn dch ting Vit: Cm nang thut ton ( tp 1, 2). H S m, Nguyn Vit H, Bi Th Duy inh Mnh Tng, Xun Li

CHNG I: THUT TON V PHN TCH THUT TON

1.
2. 3.

4.

Gii bi ton trn my tnh M hnh d liu Cu trc d liu Bi ton v thut ton

1 Giai bi ton trn my tnh

Bc 1. Xc nh bi ton -Tp Input v Output Bc 2. La chn/ thit k thut ton a) La chn/ thit k thut ton Gii bi ton nhiu thut ton Khng gian ? Thi gian ?; Ci t ?

1. Gii bi ton trn my tnh

b) Din t thut ton


Input: Hai s nguyn dng a v b; Output: q v r : a= bq+r. tng: - Nu a < b th q = 0 v r = a. Kt thc. - Nu a > b th a gim i b v q tng ln 1. Lp cho n khi a < b.

1. Gii bi ton trn my tnh

*) Cch lit k

*) S khi

Bc 1: Nhp a v b; Bc 2: q 0; Bc 3: Nu a < b th r a ri chuyn n b. 5; Bc 4: a a - b, q q + 1 ri quay v b.3; Bc 5: a ra r v q. Kt thc.

1. Gii bi ton trn my tnh

Bc 3. Vit chng trnh

Chn CTDL Ngn ng lp trnh

Bc 4. Hiu chnh Xy dng cc b input (test) tiu biu Chy th

Unsigned int Factorial (unsigned int n) { if (n==0) return 1; Else return n* Factorial (n-1); }

1. Gii bi ton trn my tnh

Bc 5. Vit ti liu

Hng dn s dng Thut ton, Cu trc d liu .

2. M hnh d liu (Data model)

L cc tru tng : th, tp hp, danh sch, cy... Hai kha cnh: Gi tr (kiu d liu) Cc php ton ( operation) Chng trnh c th truy xut n cc vng lu tr.

3. Cu trc d liu (Data structures)

L cc n v cu trc (construct) ca NNLT dng biu din cc m hnh d liu V d: mng, bn ghi, set, file, xu,..

4. Bi ton v thut ton

4.1. Bi ton Xc nh r Input v Output V d: Kim tra xem N c phi l s nguyn t hay khng? - Input : S nguyn dng N - Output : Tr li N l s nguyn t?

4. Bi ton v thut ton

4.2. Thut ton l mt dy hu hn cc thao tc, sp xp theo mt trt t xc nh, sau khi thc hin, t Input ta nhn c Output cn tm.

4. Bi ton v thut ton

V d - Input:N nguyn dng, dy a 1,..., an. - Output : Tm Max ca dy cho. tng Gi thit Max = a1. Vi mi i, nu ai > Max th thay gi tr Max= ai.

4. Bi ton v thut ton

4.3. M t thut ton a) Cch lit k Bc 1. Nhp N v dy a1, ..., an Bc 2. t Max = a1, i = 2; Bc 3. Nu i > N th n B. 5; Bc 4. 4.1. N u ai > Max th Max = ai. 4.2. t i=i+1 ri quay B.3;

4. Bi ton v thut ton

b) S

khi Dng: Ovan, Ch nht, Hn thoi,Mi tn,

4. Bi ton v thut ton

c)

Ngn ng iu khin Dng cc k hiu v quy tc Cch thit lp th t cc thao tc cu trc iu khin ( 03 )

BIU DIN BNG CU TRC IU KHIN


Trong khi m n th lp li khi sau: Nu m > n th

iu chnh li gi tr Nu ngc li th ca m v n

Bt m i mt lng l n

Bt n i mt lng l m

Cho ti khi m = n th tuyn b USCLN chnh l gi tr chung ca m v n

Int Horner(int a[],int x) { int result = a[n]; for (i=n-1; i>=0;--i) result= result*x+a[i]; return result; }
Chng trnh trong C++

4. Bi ton v thut ton

4.4. Cc c trng chnh ca thut ton


a)Tnh kt thc (tnh ng)
b)Tnh xc nh (n ngha) C ng mt thao tc c thc hin hoc dng

4. Bi ton v thut ton

c)Tnh chi tit Ph thuc vo i tng thc hin

d)Tnh ph dng vi input thay i


e) i lng vo f) i lng ra

4. Bi ton v thut ton

g) Tnh hiu qu

Thi gian: Tc x l Khng gian: Dung lng lu tr

4. Bi ton v thut ton

4.5. phc tp thut ton


a)

La chn thut ton D hiu, d ci t v d ghi chp ? S dng cc ti nguyn hiu qu.? c tnh ca bi ton

Phn tch theo kinh nghim Thc hin v kt lun d mc li Kch thc d liu l quan trng: T(n)

4. Bi ton v thut ton

b) K php

Gi s T(n) l thi gian thc hin TT v f(n), g(n), h(n) l cc hm xc nh dng.

Hm Theta ln:
T(n) l hm Theta ln ca g(n): T(n) =(g(n)) nu cc hng s dng c1 ,c2 ,n0 sao cho vi mi n>= n0 : c1 g(n) <= T(n) <= c2 g(n)

4. Bi ton v thut ton

Hm Omega ln: T(n) hm Omega ln ca g(n): T(n)=(g(n)) nu c v n0 sao cho vi mi n>= n0 T(n) >= c.g(n)

4. Bi ton v thut ton

Hm O ln: T(n) hm Omega ln ca g(n), T(n) =O (g(n)) nu c v n0 sao cho vi mi n>= n0 : T(n) <=c g(n) g(n) gii hn trn ca T(n).

V d, nu T(n) = n2 + 1 th T(n) = O(n2). Chn c=2 v n0 =1, khi vi mi n>=1, ta c T(n)= n2+1 <= 2n2 =2g(n).

4. Bi ton v thut ton

tnh cht (i) Tnh bc cu: nu f(n)= O(g(n)) v g(n)= O(h(n)) th f(n)= O(h(n)) (ii) Tnh phn x: f(n)=O(f(n))
c) Cc

4. Bi ton v thut ton

d) Xc nh phc tp

Quy tc hng s Nu P c T(n)= O(c1f(n)) tp O(f(n)).

P c phc

CM: T(n)= O(c1f(n)) nn tn ti c0>0 v n0 >0 T(n) <= c0.c1 f(n) vi mi n>= n0. t c=c0.c1 ta c iu cn CM

4. Bi ton v thut ton

Quy tc ly Max Nu P c T(n)= O( f(n)+g(n)) th P c phc tp l O( max ( f(n), g(n))).

CM: T(n) = O( f(n)+g(n)) nn tn ti n0>0 v c>0 T(n) <= cf(n) + cg(n), vi mi n>= n0 vy T(n) <= cf(n) +cg(n) <= 2c max (f(n),g(n)) vi mi n>=n0. T suy iu cn CM.

4. Bi ton v thut ton

Quy tc cng Nu P1 c T1 (n) = O( f(n) v P2 c T2(n)= O(g(n)), khi : T1(n) +T2(n) = O(f(n) +g(n)).

CM: V T1(n)= O(f(n)) nn cc hng s c1 v n1 sao cho T(n) <= c1.f(n) n: n>= n1. V T2(n) =O(g(n)) nn cc hng s c2 v n2 sao cho T(n) <= c1.g(n) n: n>= n2 Chn c= max (c1,c2) v n0 = max(n1,n2) ta c n: n n>= n0: T(n) = T1(n) + T2(n) <= c1f(n) + c2g(n) <= cf(n) +cg(n) = c(f(n)+g(n)).

4. Bi ton v thut ton

Quy tc nhn Nu P c T(n)= O(f(n)). Khi nu thc hin k(n) ln P vi k(n)=O(g(n)) th phc tp la O(f(n) g(n)).
ck>=0 v nk >0 k(n) <= ck(g(n)) vi mi n>= nk cT>=0 v nT >0 T(n) <= cTf(n) vi mi n>= nT

CM: Thi gian thc hin k(n) ln on chng trnh P s l k(n) T(n), theo nh ngha:

Vy vi mi n >= max(nT,nk) ta c k(n)T(n) <= ckcT(f(n)g(n)).

4. Bi ton v thut ton

e) p dng nh gi chng trnh

Cu lnh n thc hin mt thao tc QT hng s Cu lnh hp thnh l dy cc cu lnh QT tng Cu lnh r nhnh dng If ..then..else. QT Max Cc cu lnh lp QT Nhn

4. Bi ton v thut ton

V d 1

Analysing an Algorithm
Simple statement sequence
s1; s2; . ; sk O(1) as long as k is constant

Simple loops
for(i=0;i<n;i++) { s; } where s is O(1) Time complexity is n O(1) or O(n)

Nested loops
for(i=0;i<n;i++) for(j=0;j<n;j++) { s; } Complexity is n O(n) or O(n2) This part is O(n)

4. Bi ton v thut ton


V d 2

Analysing an Algorithm
Loop index doesnt vary linearly
h = 1; while ( h <= n ) { s; h = 2 * h; } h takes values 1, 2, 4, until it exceeds n There are 1 + log2n iterations Complexity O(log n)

4. Bi ton v thut ton

V d 3

Analysing an Algorithm
Loop index depends on outer loop index
for(j=0;j<n;j++) for(k=0;k<j;k++){ s; } Inner loop executed 1, 2, 3, ., n times
Distinguish this case where the iteration count increases (decreases) by a constant O(nk) from the previous one where it changes by a factor

i=1

i=

n(n+1) 2

Complexity O(n2)

O(log n)

4. Bi ton v thut ton

Mt s dng hm a thc bc k: P(n), O (nk). logaf(n), O(log f(n)). Hng s, O(1) Hm m O(2n.)

4. Bi ton v thut ton

Lgn 0 1

n 1 2

nlgn 0 2

n2 1 4

n3 1 8

2n 2 4

2
3 4 5

4
8 16 32

8
24 64 160

16
64 256 1024

64
512 4096 32768

16
256 65536 214748364 8

4. Bi ton v thut ton

g) phc tp tnh ton v d liu

vo

Trng hp tt nht: T(n) l thi gian t nht Trng hp xu nht: T(n) l thi gian ln nht Trng hp trung bnh: d liu vo tun theo mt phn b xc sut no

4. Bi ton v thut ton

h) Php ton tch cc

Cc php ton thc hin nhiu nht Quy tc 10-90

CHNG II : QUY V THUT TON QUY


1. 2.

Php lp, quy np v quy Thut ton quy

1. Php lp, quy np v quy Lp (interation): bin th ca cng mt thao tc. Quy np(induction): k thut chng minh cc mnh thuc dng vi mi n th P(n) l ng. V d: vi mi n, tng n s l u tin bng n2. Bc c s: Ch ra P(1) l ng , v 12=1. Bc quy np: Chng minh nu P(n) l ng th ko theo P(n+1) cng ng

1. Php lp, quy np v quy

Tng n s l l n2, cn cm tng (n+1) s l l (n+1)2. Tng n s l: 1+3+5+.+ (2n-1)= n2. Khi : [1+3+5+.+ (2n-1)] +(2n+1) = n2+2n+1= (n+1)2.

1. Php lp, quy np v quy

quy (recursion): l mt k thut nh ngha mt khi nim trc tip hoc gin tip theo chnh n.

CHNG II : QUY V THUT TON QUY 2. Thut ton quy

a) nh ngha
Nu li gii P c thc hin bng li gii P c dng ging nh P th ta ni l li gii quy thut ton quy Ch : P ging P P nh hn P theo ngha no

HNG II : QUY V THUT TON QUY 2. Thut ton quy

nh ngha mt hm hay th tc quy gm hai phn: (i) Phn neo (anchor) (ii) Phn quy Phn quy th hin tnh quy np ca li gii. Phn neo m bo cho tnh dng ca thut ton.

CHNG II : QUY V THUT TON QUY 2. Thut ton quy

b) V d Tnh giai tha: N!= N(N-1)! Int fact ( int n) { If ( n <= 1 ) Return 1; /* c s*/ Else Return n*fact (n-1); /* quy np*/ }

CHNG II : QUY V THUT TON QUY 2. Thut ton quy

b) V d:

Recursion - Example
Fibonacci Numbers
Pseudo-code fib( n ) = if ( n = 0 ) then 1 else if ( n = 1 ) then 1 else fib(n-1) + fib(n-2)

Dy s Fibonacci: F(n)= F(n-1)+F(n-2) (phn quy) vi n<=2 th F(n)=1 ( phn neo).

int fib( n ) { if ( n < 2 ) return 1; else return fib(n-1) + fib(n-2); } Simple, elegant solution!

2. Thut ton quy

Bi ton thp H ni : Ngi n Benares c 03 ci cc kim cng, Thng t n chic a bng vng: - C bn knh khc nhau - Chng ln nhau mt chic cc - Theo th t a ln di, a nh trn. Cc nh s ln lt chuyn cc a sang mt cc khc theo quy tc sau:

2. Thut ton quy

Khi chuyn mt a phi t vo mt trong 03 cc Mi ln ch chuyn ng mt a trn cng ti mt cc v t vo trn cng cc chuyn n. a ln hn khng c php t ln a nh hn.

Thp Ha ni

2. Thut ton quy

V d, vi trng hp n=2 ta c th chuyn nh sau: Chuyn a nh sang cc 3 Chuyn a ln sang cc 2 Chuyn a t cc 3 sang cc 2

2. Thut ton quy

Nu n=1 th chuyn a duy nht t cc 1 sang cc 2. Kt thc. Gi thit ta c cch chuyn (n-1) a t cc 1 sang cc 3. Chuyn a ln nht ang cc 1 sang cc 2 Chuyn (n-1) a t cc 3 sang cc 2. Kt thc.

2. Thut ton quy

c) nh gi v quy u im: Mnh, r rng, cht ch Thit k TT n gin

2. Thut ton quy

Nhc im: Li gi hm tn rt nhiu thi gian. Thn trng ng chy v hn.

CHNG III :KiU D LIU CU TRC


1. 2.

3.
4.

Cc kiu d liu chun Kiu mng (array) v bin ch s Kiu xu (string) Kiu cu trc (struct)

1. Cc kiu d liu chun

Kiu d liu chun: nguyn, thc, lgic, V d, Khai bo bin int x, float y,. Vi kiu nguyn c cc php ton: cng, tr, nhn, chia x div y ( chia nguyn ), x mod y ( ly phn d ca php chia).

2. Kiu mng (array) v bin ch s

2.1. Kiu mng mt chiu


Dy lin tip cc phn t cng kiu. t tn v mi phn t c mt ch s. Tham chiu tn mng v ch s [ ] . S lng cc phn t cho trc.

2. Kiu mng (array) v bin ch s

V d

int a[10] : mng c tn l a, c 10 phn t c kiu s nguyn float b[20] : mng c tn l b, c 20 phn t c kiu s thc

2. Kiu mng (array) v bin ch s

2.2. Kiu mng hai chiu Bng nxm cc phn t cng kiu d liu. Tham chiu Tn mng cng vi hai ch s, [ ].

2. Kiu mng (array) v bin ch s

V d: int a[10][15] : float b[20][10]:

2. Kiu mng (array) v bin ch s

2.3. Cc ghi ch v kiu mng


a ch cc phn t l lin tip nhau. Cc phn t c sp xp theo hng. B nh l c nh sut c qu trnh

2. Kiu mng (array) v bin ch s

Ch s mng khng c vt qu phm vi V d: a[5] * b[8][3] l hp l. Cu trc n gin, truy nhp nhanh. Thiu mm do trong cc php ton nh xa, chn. C th dng php gn cho c mng.

3. Kiu xu (chui string)

Kiu mng c bit m kiu phn t ca mng ny l k t. Thng thng xu c t trong cp du v , V d: S=Tin hoc Cc k t trong xu c vit lin tip v c th xut hin nhiu ln S lng cc k t l di ca xu, c xu rng

3. Kiu xu (chui string)

Php ton trn xu:

Ghp xu: Char*strcat(char* s1, char s2) Copy (S,M,N): gi tr l xu con ca su S gm cc k t t v tr M n N Delete (S,M,N): xa lin tip N k t ca S bt u t k t th M Php chn Insert (S1, S2, N): Chn xu S1 vo trc k t N ca xu S2

4. Kiu cu trc (struct)

Tp cc i tng c cng mt s thuc tnh c th c cc kiu d liu khc nhau. Mi i tng m t bng mt cu trc. Mi thuc tnh tng ng vi mt thnh phn .

4. Kiu cu trc (struct)

Khai bo kiu cu trc: STRUCT tn_kiu_cu trc { Khai bo cc thnh phn };

4. Kiu cu trc (struct)

Truy nhp: Xc nh: vit tn cu trc, du chm (.) v sau cng l tn thnh phn. Thnh phn ca mt cu trc c th l mt cu trc.

CHNG IV: DANH SCH (LIST)

nim danh sch 2. Biu din danh sch trong my tnh. 3. Mt s nhn xt. 4. Kiu d liu con tr (pointer) v vic cp pht/thu hi b nh ng.
1. Khi

1. Khi nim danh sch

a) nh ngha
Danh sch l mt tp sp th t cc phn t cng kiu. Cc phn t c sp theo th t trc- sau Danh sch con gm cc phn t lin tip t ai n aj ca danh sch. Nu i=1 gi l phn u (prefix) Nu j=n gi l phn cui (postfix).

1. Khi nim danh sch

Dy con l mt DS to thnh bng cch loi t DS mt s phn t. V d, DS = (a,b,c,d,e,f). Khi : (c,d,e) l mt danh sch con ca DS (a, b) l mt phn u ca DS (c,d,e,f) l mt phn cui ca DS (a,c,f) l mt dy con ca DS

1. Khi nim danh sch

b) Cc php ton Php khi to to ra mt danh sch rng. Xc nh di Xa Chn Tm kim Kim tra tnh trng thi rng Kim tra trng thi trn Duyt danh sch. Sp xp

2. Biu din danh sch trong my tnh

2.1. Cai t bng mng mt chiu

VD. DS = ( A, B, C, D, E, F, G, H, I, J, K)

Mng M gm 11 phn t:
A B C D E F G H I J K

2. Biu din danh sch trong my tnh

2.1. Cai t bng mng mt chiu


a)

Chn - Dn cc phn t t v tr P n cui sang phi mt v tr: P


A B C D E F G H I J K

- t V vo v tr -Tng n ln 1

2. Biu din danh sch trong my tnh b) Xa


- Mng A

ban u
B C D E F G

P
H I J K L

- Chuyn

tt c cc phn t t v tr P+1 n cui sang tri 1 v tr


A B C D E F H I J K L

-Gim

n i 1.

Nu khng cn bo lu th t cc phn t sau khi xa th ch cn tro i gi tr phn t cn xa cho phn t cui cng v gim n i 1.

2. Biu din danh sch trong my tnh

c) Nhn xt

Truy cp trc tip n mi phn t Chn v xa u phi dch chuyn mt s cc phn t Kch thc mng trong mi ngn ng lp trnh u l c nh

2. Biu din danh sch trong my tnh

2.2. DS ni n

DS cc phn t c ni vi nhau theo mt chiu. Mi phn t l mt Struct (bn ghi) Mt trng con tr cha thng tin lin kt Cc trng cha thng tin u (Head) v Cui (Tail) Trng NEXT ca phn t cui cha gi tr c bit (Nill, Null)

2. Biu din danh sch trong my tnh


Linked Lists
Collection structure has a pointer to the list head
Initially NULL Allocate space for node Set its data pointer to object Set Next to NULL Set Head to point to new node Collection Head node Data Next

Linked Lists
Flexible space use Dynamically allocate space for each element as needed Include a pointer to the next item

Add first item

Linked list
Each node of the list contains the data item (an object pointer in our ADT) a pointer to the next node
Data Next

object

object

2. Biu din danh sch trong my tnh

a) Chn
Linked Lists
Add second item
Allocate space for node Set its data pointer to object Set Next to current Head Set Head to point to new node Collection Head node Data Next

node Data Next

object2

object

2. Biu din danh sch trong my tnh b) Xa


A B C D E

Linked Lists - Delete implementation


Implementation
void *DeleteFromCollection( Collection c, void *key ) { Node n, prev; n = prev = c->head; while ( n != NULL ) { if ( KeyCmp( ItemKey( n->item ), key ) == 0 ) { prev->next = n->next; return n; } prev = n; n = n->next; head } return NULL; } Minor addition needed to allow for deleting this one! An exercise!

2. Biu din danh sch trong my tnh


Linked Lists
Add time

C)

Xc nh

Constant - independent of n

Search time
Worst case - n Collection Head node Data Next node Data Next

Tm kim bt u t Head, Theo con tr ca trng NEXT duyt tun t.

object2

object

2. Biu din danh sch trong my tnh

2.3. DS ni kp

DS gm cc phn t c ni vi nhau theo hai chiu. Mi phn t l mt STRUCT c hai trng lin kt (LINK) lin kt ti 2 phn t trc v sau n v trng DATA (INFO) lu tr thng tin.

2. Biu din danh sch trong my tnh

C hai cch duyt: Bt u t nt First, da vo NEXT i n khi duyt qua nt Last; Hoc bt u t nt Last da vo Prev i n khi duyt qua nt First.

Linked Lists - Doubly linked


Doubly linked lists
Can be scanned in both directions
*prev, *next; struct t_node { void *item; struct t_node } node; *Node;

typedef struct t_node struct collection { Node head, tail; }; head tail

prev

prev

prev

CHNG IV: DANH SCH (LIST) 2. Biu din danh sch trong my tnh

chn/xa bng cch chnh li cc lin kt


ca cc nt lin quan.

2. Biu din danh sch trong my tnh

2.4. DS ni vng mt hng Phn t cui tr v phn t u tin

Ch cn xc nh c mt phn t no Chn/xa bng cch chnh li cc lin kt ca cc nt lin quan.

2. Biu din danh sch trong my tnh

2.5. DS ni vng hai hng

To t DS ni kp, PREV ca nt First tr ti nt Last, NEXT ca nt Last tr ti First.

CHNG IV: DANH SCH (LIST) 2. Biu din danh sch trong my tnh

2.6. Ngn xp va hang i


Linked Lists - LIFO and FIFO
Simplest implementation
Add to head Last-In-First-Out (LIFO) semantics

Modifications
First-In-First-Out (FIFO) head Keep a tail pointer
struct t_node { tail void *item; struct t_node *next; } node; typedef struct t_node *Node; struct collection { Node head, tail; };

tail is set in the AddToCollection method if head == NULL

CHNG IV: DANH SCH (LIST) 2. Biu din danh sch trong my tnh
2.6. Ngn xp va hang i a) Ngn

xp (Stack) Mt kiu DS B sung thm v ly ra mt phn t cng cui DS. Hot ng theo nguyn tc vo sau-ra trc (LIFO)

Stacks
Stacks are a special form of collection with LIFO semantics Two methods
int push( Stack s, void *item );

- add item to the top of the stack


void *pop( Stack s );

- remove an item from the top of the stack Like a plate stacker Other methods
int IsEmpty( Stack s ); /* Return TRUE if empty */ void *Top( Stack s ); /* Return the item at the top, without deleting it */

2. Biu din danh sch trong my tnh

M t Stack bng mng (i) Thm (Push) vo Stack = thm vo cui mng (ii) Ly ra (Pop) khi Stack = loi b cui mng (iii) Overstack khi mng y (iv) EmptyStack khi trong mng khng c phn t no c.

2. Biu din danh sch trong my tnh

M t Stack bng DS ni n Stack ch trn khi vng khng gian nh dng cho cc bin ng khng cn Khng gian b nh dng cho cc bin ng l rt ln nn b qua vic kim tra trn Stack.

2. Biu din danh sch trong my tnh b) Hng i (Queue) Mt kiu danh sch Thm mt phn t vo cui danh sch (Rear) v Ly ra mt phn t u danh sch. Hot ng theo nguyn tc vo trc-ra trc (FIFO - First In First Out).

2. Biu din danh sch trong my tnh

Ci t Queue bng mng S dng hai ch s Front lu ch s u v Rear lu ch s cui. Khi to t Front l 1 cn Rear l 0. (i) Thm ( Push) vo Queue: tng Rear ln 1 v a gi tr ca phn t cn b sung vo phn t c ch s l Rear.

2. Biu din danh sch trong my tnh ii) Ly ra (Pop) :ly gi tr phn t c ch s l Front v sau tng Front ln 1. (iii) Khi tng ch s Rear ln ht khong cho php thOverQueue (iv) Khi Front > Rear th EmptyQueue

2. Biu din danh sch trong my tnh

Queue vng trn Cc phn t xp quanh vng trn theo mt hng. Cc phn t nm trn cung trn t v tr Front n Rear l thuc Queue.

2. Biu din danh sch trong my tnh


Khi thm :dch chuyn ch s Rear theo vng trn 1 v tr ri t gi tr cn thm vo . - Khi ly ra : ly phn t c ch s l Front ri dch chuyn ch s Front theo vng trn 1 v tr.
Vn-1

Vn

V2

V1

2. Biu din danh sch trong my tnh

cai t : (i) Mt phng tin chia b nh thnh cc nt, mi nt c phn lu tr data, phn lu tr cc lin kt (con tr) v cch ci t cho con tr (ii) Ci t cc thao tc truy nhp gi tr (c data v pointer). (iii) Mt phng tin no nh du vng b nh

3. Mt s nhn xt

Ci t danh sch bng mng to ra hn ch: di ca danh sch. Kim tra trn v rng khi thc hin chn v xa. Khi thc hin chn v Xa u phi thc hin php dch chuyn.

3. Mt s nhn xt

Trong cc cu trc DS, thc hin cc thao tc c bn cn cc thao tc ti thiu: nh v phn t u tin ca DS Cho trc v tr ca mt phn t bt k trong DS, xc nh c phn t tip theo.

4. Kiu d liu con tr v vic cp pht/thu hi b nh ng

khc phc, cn

Mt th tc tin nh cp pht b nh ( New (p) trong TP, trong C c cc hm Void * calloc, * void maloc ) v mt th tc gii phng b nh ( Dispose(p) trong Tp v hm Void Free trong C) Dng bin con tr truy cp n vng nh ny.

CHNG V CU TRC D LiU BNG BM


1.

Bng bm m
1.1. Bng bm 1.2. Hm bm 1.3. Xung t 1.4. Mt s hm bm thng dng

2.

Bng bm ng 2.1. Bm li tuyn tnh. 2.2. Bm li bnh phng 2.3. Bm li bng cch to vng mi

CHNG VI: CU TRC D LiU BNG BM 1. Bng bm m

Bng bm (Hash Table): - Mng B gm m phn t -Lu tr ch s nh v phn t d liu c kha phn bit thuc tp s nguyn { 0,1,2m-1}

Hash Tables - Structure


Simplest case:
Assume items have integer keys in the range 1 .. m Use the value of the key itself to select a slot in a direct access table in which to store the item To search for an item with key, k, just look in slot k If theres an item there, youve found it If the tag is 0, its missing. Constant time,

O(1)

Hash Tables - Relaxing the constraints


Keys are integers
Need a hash function h( key ) integer ie one that maps a key to an integer Applying this function to the key produces an address If h maps each key to a unique integer in the range 0 .. m-1 then search is O(1)

1. Bng bm m

Ham bm (Hash function):

H(x) cho gi tr l mt ch s phn t ca B

1. Bng bm m

Xung t (collision):

x1<>x2 nhng H(x1)=H(x2)

1. Bng bm m Xung t: Hash Tables Collisions


Occur when the hash function maps two different keys to the same address The table must be able to recognise and resolve this Recognise Store the actual key with the item in the hash table Compute the address k = h( key ) Check for a hit if ( table[k].key == key ) then hit else try next entry Well look at various Resolution try next entry schemes Variety of techniques

Collision handling

1. Bng bm m

Xung t: Gii quyt: lin kt cc danh sch c cc kha khc nhau nhng c cng gi tr hm bm thnh mt danh sch lin kt trong bng bm B s tr ti danh sch u tin.

Hash Tables - Linked lists


Collisions - Resolution
Linked list attached to each primary table slot h(i) == h(i1) h(k) == h(k1) == h(k2) Searching for i1 Calculate h(i1) Item in table, i, doesnt match Follow linked list to i1 If NULL found, key isnt in table

CHNG VI: CU TRC D LiU BNG BM 1. Bng bm m

Mt s hm bm thng dng: Hm ct b b bt mt phn no ca kha. V d: x=842615, b bt chng hn cc ch s hng l (1,3,5), s cn li s l 821. Vy H(x) = H(842615) = 821. Nhn xt: kh c phn b u.

Hm gp chia s nguyn thnh mt s on ty chn, sau kt hp

V d: S cc hng l: 465 v s cc hng chn: 821, vy H(x)=465+821=1286.

Nhn xt: Tnh cht th hai c th tha mn tt hn

1. Bng bm m

Hm phn d ca php chia x/m Nn chn m l s nguyn t.

Nhn xt: Cc cch ly phn d cho kh nng trnh hin tng xung t

Hash Tables Division


Reducing the range to [ 0, m )

Use a mod function

h(k) = k mod m Choice of m?


Powers of 2 are generally not good!

h(k) = k mod 2n selects last n bits of k

k mod 28 selects these bits

0110010111000011010

All combinations are not generally equally likely Prime numbers close to 2n seem to be good choices eg want ~4000 entry table, choose m = 4093

CHNG VI: CU TRC D LiU BNG BM 2. Bng bm ng

Bng bm m: ch dng lu tr cc lin kt tr n cc thnh phn d liu c kha tng ng. Bng bm ng: bng bm m mi thnh phn ca n lu tr chnh cc thnh phn d liu.

CHNG VI: CU TRC D LiU BNG BM 2. Bng bm ng

Cc phng php x l: a) Bm li tuyn tnh Hi (x) = (H(x)+i) mod m

Nhn xt Cc gi tr hm bm xp thnh tng on con, nn vic tm kim v tr rng s rt chm.

CHNG VI: CU TRC D LiU BNG BM 2. Bng bm ng

Hash Tables - Re-hash functions


The re-hash function Many variations Linear probing h(x) is +1 Go to the next slot until you find one empty

Can lead to bad clustering Re-hash keys fill in gaps between other keys and exacerbate the collision problem

2. Bng bm ng

b) Bm li bnh phng
Hi(x) = ( H(x)+i2) mod m
Hash Tables - Re-hash functions
The re-hash function Many variations Quadratic probing h(x) is c i2 on the ith probe Avoids primary clustering Secondary clustering occurs All keys which collide on h(x) follow the same sequence First a = h(j) = h(k) Then a + c, a + 4c, a + 9c, .... Secondary clustering generally less of a problem

2. Bng bm ng

c) Bm li bng cch to vng mi

Ngoi bng B cn to ra mt vng khng gian mi


Hash Tables - Overflow area
Overflow area Linked list constructed in special area of table called overflow area h(k) == h(j) k stored first Adding j Calculate h(j) Find k Get first slot in overflow area Put j in it ks pointer points to this slot Searching - same as linked list

Вам также может понравиться