You are on page 1of 9

Chng 5 B Bng bm

Chng 5

B ng bm (Hash table) Bng


Ni dung 1 2 3 4 Bng bm nh ngha hm bm Phng php xy dng hm bm Phng php gii quyt ng

Bng Bng bm (Hash Table)

Cc thut ton tm kim u da vo vic so snh gi tr kho (Key)


Ph thuc kch thc ca tp cc phn t Thi gian tm kim khng nhanh do phi thc hin nhiu php so snh c th khng cn thit ( O(n), O(logn), )

=> C phng php lu tr no cho php thc hin tm kim vi hiu sut cao hn khng ( phc tp hng s)?
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Bng Bng truy xu xut tr trc ti tip

Chng 5 B Bng bm
Cu tr c b trc bng bm K: tp cc gi tr kho (set of keys) cn lu tr A: tp cc a ch (set of addresses) trong bng bm HF(k): hm bm dng nh x mt kho k t tp cc kho K thnh mt a ch tng ng trong tp cc a ch A

Bng gm m phn t c lu tr di dng bng ch mc


Phn t c gi tr kho k c lu tr tng ng ti v tr th k Tm kim bng cch tra trong bng ch mc Thi gian tm kim l O(1) y l dng bng bm c bn
3/11/2010 www.lhu.edu.vn

3/11/2010

www.lhu.edu.vn

Chng 5 B Bng bm
Phn lo loi b bng bm Bng bm ng :
S phn t c nh Mi kha ng vi mt a ch Khng th thc hin cc thao tc thm, xa trn bng bm thi gian truy xut l hng s S phn t khng c nh Mt s kha c th c cng a ch C th thc hin cc thao tc thm, xa phn t Thi gian truy xut c th b suy gim i cht

Chng 5 B Bng bm
Hm Hm bm (Hash function)
L hm bin i gi tr kho (s, chui) thnh a ch, ch mc trong bng bm
Gi tr kho Hm bm a ch, ch mc

V d : hm bm bin i kha chui thnh 1 a ch (s nguyn)


int hashfunc( char *s, int n ) { int sum = 0; while( n-- ) sum = sum + *s++; return sum % 256; }

Bng bm m :

Tnh a ch ca kho AB : hashfunc(AB,2) 131 Tnh a ch ca kho BA : hashfunc(BA,2) 131 Khi hm bm 2 kho vo cng 1 a ch gi l ng (Collision)
www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn

3/11/2010

Chng 5 B Bng bm
Hm Hm bm (Hash function)

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

Tiu chun nh gi hm bm
Tnh ton nhanh. Cc kho c phn b u trong bng. t xy ra ng .

Hm bm dng bng tra Hm bm dng phng php chia Hm bm dng phng php nhn

3/11/2010

www.lhu.edu.vn

3/11/2010

www.lhu.edu.vn

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

Hm bm dng bng tra


Kho a ch Kha a b c d e f g 0 1 2 3 4 5 6 h i j k l m n a ch 7 8 9 10 11 12 13 Kha a ch Kha o p q r s t u 14 15 16 17 18 19 20 v w x y z / / a ch 21 22 23 24 25 / /

Hm bm dng phng php chia S dng s d ca php chia lm a ch: h(k) = k mod m k l kho, m l kch thc (s a ch) ca bng. vn chn gi tr m
Nu chn m= 2n , h(k) = k mod 2n s dng n bits thp ca k lm a ch Nu chn m= 10n , h(k) = k mod 10n s dng n s cui ca k lm a ch

nn chn m l nguyn t gn vi 2n hoc 10n


3/11/2010 www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

V d: Ta c tp kho l cc gi tr s gm 3 ch s, v vng nh cho bng a ch c khong 100 mc, nh vy ta s ly hai s cui ca kho lm a ch theo php chia d cho 100. Vd: 325 Mod 100 = 25, 125 Mod 100=25...
M=100 Kho 325 125 147
3/11/2010

M=97 (nguyn t) Kho 325 125 147 a ch 34 28 50


www.lhu.edu.vn

a ch 25 25 47

Hm bm dng phng php nhn S dng cng thc: h(k) = floor(m (k A mod 1)) vi k l kha, m l kch thc bng A l hng s: 0 < A < 1 Vn chn m v A
Ta thng chn m = 2n hoc m = 10n Theo Knuth chn A = 1/2(sqrt(5) -1) 0.618033987 c xem l tt
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Phng php php xy d dng h hm bm

Chng 5 B Bng bm
Cc thao t tc trn b bng bm

V d: Ta c tp kho l cc gi tr s gm 3 ch s, v vng nh cho bng a ch c khong 100 mc, chn hng s A=0.61803 Tnh a ch cho kha 325 h(325) = floor(100 (325*0.61803 mod 1))=86
M=100, A=0.61803 Kho 325 125 147
3/11/2010

M=100, A=0.52173 Kho 325 125 147 a ch 56 21 69


www.lhu.edu.vn

a ch 86 25 85

Khi to (Initialize) Kim tra rng (Empty) Ly kch thc ca bng bm (Size) Tm kim (Search) Thm mi phn t (Insert) Loi b (Remove) Sao chp (Copy) Duyt (Traverse)
www.lhu.edu.vn

3/11/2010

Chng 5 B Bng bm
Cc phng php php gi gii quy quyt ng

Chng 5 B Bng bm
Cc phng php php gi gii quy quyt ng

Phng ph php n ni k kt Phng php ni kt Phng php d tuyn tnh Phng php d bc hai Phng php dng hm bm kp
Cc phn t b ng c gom thnh mt danh sch lin kt (gi l mt bucket).
Mt Bucket

3/11/2010

www.lhu.edu.vn

3/11/2010

www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt Khai bo cu trc bng bm:
#define M 100 struct node { int key; struct node *next; };

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Hm bm int hashfunc (int key) { return (key % M); } Php ton khi to (initbuckets) void initbuckets( ) { int b; for (b=0;b<M;b++) bucket[b]=NULL; } Php ton kim tra bucket rng (isemptybucket) int isemptybucket (int b) { return(bucket[b] ==NULL ?TRUE :FALSE);
3/11/2010

Khai bo kiu con tr ch nt


typedef struct nodes *nodeptr;

Khai bo mng bucket cha M con tr u ca M bucket


nodeptr bucket[M];
3/11/2010 www.lhu.edu.vn

}
www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton kim tra bng bm rng isempty: int isempty( ) { int b; for (b=0;b<M;b++) if(bucket[b] !=NULL) return(FALSE); return(TRUE); } Php ton chn phn t c kha k vo bng bm: void insert(int k) { int b; b=hashfunc(k); place(b,k); //chen k vao danh sach lien ket }
www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton hy mc c kha k trong bng bm void remove(int k) { int b; nodeptr q, p; b = hashfunc(k); p = bucket[b]; while(p!=NULL && p->key !=k) { q=p; p=p->next; } if (p == NULL) printf("\n khong co nut co khoa %d" ,k); else if (p==bucket[b]) pop(b); else delafter(q); //xoa nut }
3/11/2010 www.lhu.edu.vn

3/11/2010

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton xa bucket trong bng bm void clearbucket (int b) { nodeptr p,q; //q la nut truoc,p la nut sau q = NULL; p = bucket[b]; while(p !=NULL) { q = p; p=p->next; freenode(q); } bucket[b] = NULL; //khoi dong lai bucket b }
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton xa tt c cc phn t trong bng bm. void clear( ) { int b; for (b=0;b<M;b++) clearbucket(b); } Php ton duyt cc phn t trong bucket b. void traversebucket (int b) { nodeptr p; p=bucket[b]; while (p!=NULL) { printf("%5d", p->key); p= p->next; } }
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton duyt ton b bng bm: void traverse( ) { int b; for(b=0;b<M; b++) { printf("\nBucket thu %d:",b); traversebucket(b); } }

Chng 5 B Bng bm
Ci t b bng bm phng ph php n ni k kt
Php ton tm kim mt phn t trong bng nodeptr search(int k) { nodeptr p; int b; b = hashfunc (k); p = bucket[b]; while(k>p->key && p!=NULL) p=p->next; if (p==NULL || k!=p->key)// khong tim thay return(NULL); else return(p); }
www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn

3/11/2010

Chng 5 B Bng bm
Cc phng php php gi gii quy quyt ng

Chng 5 B Bng bm
Phng php php d tuy tuyn t tnh

Phng php d tuyn tnh tng: Nu v tr hin ti b kha khc chim, th xt k tip trong bng:
linear_probing_insert(K) if (table is full) error probe = h(K) while (table[probe] occupied) probe = (probe + 1) mod M table[probe] = K

Xt dc theo bng cho n khi tm thy kha ang xt hoc tm thy mt trng. t tn b nh hn dng danh sch kin kt (chaining)
Khng phi lu cc lin kt

Nhng chm hn dng danh sch kin kt.


C th phi duyt dc theo bng trn con ng di

3/11/2010

www.lhu.edu.vn

3/11/2010

www.lhu.edu.vn

Chng 5 B Bng bm
Phng php php d tuy tuyn t tnh

Chng 5 B Bng bm
Phng php php d tuy tuyn t tnh Ke t qua : Ke qua la la
18 41 5 2 22 9 44 5 59 7 32 6 31 5 73 8

Kh khn:
Cc phn t b ng c xu hng b dn cc Kch thc bng b gii hn

V d
h(K) = K mod 13
41

18 44 59 32 22 31 73 3 4 5 6 7 8 9 10 11 12

Ln lt chn cc kha sau vo bng: 18 41 22 44 59 32 31 5 2 9 5 7 6 7


3/11/2010

73 8
www.lhu.edu.vn 3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php d tuy tuyn t tnh Khai bo cu trc bng bm:
#define NULLKEY 1 #define M 100 struct node { int key; };

Chng 5 B Bng bm
Ci t b bng bm phng ph php d tuy tuyn t tnh
Hm bm int hashfunc (int key) { return (key % M); } Php ton khi to (initbuckets) void initialize( ) { int i; for(i=0;i<M;i++) hashtable[i].key=NULLKEY; N=0; //so nut hien co khoi dong bang 0 }

Khai bo bng bm
struct nodes hashtable[M];

Khai bo bin s nt hin c trong bng int sonut;


3/11/2010 www.lhu.edu.vn

3/11/2010

www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php d tuy tuyn t tnh
Php ton kim tra bucket rng (isemptybucket) int empty( ) { return(N==0 ? TRUE:FALSE); } Php ton kim tra bng bm y isempty: int full( ) { return (N==M-1 ? TRUE: FALSE); } Lu bng bm y khi N=M-1, chng ta nn dnh t nht mt phn t trng trn bng bm.
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php d tuy tuyn t tnh
Php ton thm kha k vo bng bm
int insert(int k) { int i, j; if(full( )) { printf("\n Bang bam bi day khong them nut co khoa %d duoc",k); return; } i=hashfunc(k); while(hashtable[i].key !=NULLKEY) { //Bam lai (theo phuong phap do tuyen tinh) i ++; if(i >M) i= i-M; } hashtable[i].key=k; N=N+1; return(i); }
3/11/2010 www.lhu.edu.vn

Chng 5 B Bng bm
Ci t b bng bm phng ph php d tuy tuyn t tnh
Php ton tm kim mt phn t trong bng
int search(int k) { int i; i=hashfunc(k); while(hashtable[i].key!=k && hashtable[i].key !=NULKEY) {//bam lai (theo phuong phap do tuyen //fi(key)=f(key)+i) % M i=i+1; if(i>=M) i=i-M; } if(hashtable[i].key==k) //tim thay return(i); else //khong tim thay return(M); }
3/11/2010

tinh:

www.lhu.edu.vn

You might also like