Академический Документы
Профессиональный Документы
Культура Документы
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
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
1.
2. 3.
4.
Gii bi ton trn my tnh M hnh d liu Cu trc d liu Bi ton v thut ton
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 ?
*) Cch lit k
*) S khi
Unsigned int Factorial (unsigned int n) { if (n==0) return 1; Else return n* Factorial (n-1); }
Bc 5. Vit ti liu
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.
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.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.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.
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.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;
b) S
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 )
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
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++
g) Tnh hiu qu
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)
b) K php
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)
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)
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).
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
d) Xc nh phc tp
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
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.
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)).
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:
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
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)
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)
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)
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.)
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
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
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
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.
quy (recursion): l mt k thut nh ngha mt khi nim trc tip hoc gin tip theo chnh n.
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
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.
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*/ }
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)
int fib( n ) { if ( n < 2 ) return 1; else return fib(n-1) + fib(n-2); } Simple, elegant solution!
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:
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
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
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.
3.
4.
Cc kiu d liu chun Kiu mng (array) v bin ch s Kiu xu (string) Kiu cu trc (struct)
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).
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.2. Kiu mng hai chiu Bng nxm cc phn t cng kiu d liu. Tham chiu Tn mng cng vi hai 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.
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
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
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 .
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.
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
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).
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
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
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
- t V vo v tr -Tng n ln 1
ban u
B C D E F G
P
H I J K L
- Chuyn
-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.
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.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)
Linked Lists
Flexible space use Dynamically allocate space for each element as needed Include a pointer to the next 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
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
object2
object
C)
Xc nh
Constant - independent of n
Search time
Worst case - n Collection Head node Data Next node Data Next
object2
object
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.
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.
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
CHNG IV: DANH SCH (LIST) 2. Biu din danh sch trong my tnh
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; };
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 );
- 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 */
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.
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).
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
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.
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
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.
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.
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
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}
O(1)
1. Bng bm m
1. Bng bm m
Xung t (collision):
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.
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.
1. Bng bm m
Nhn xt: Cc cch ly phn d cho kh nng trnh hin tng xung t
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
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.
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