Professional Documents
Culture Documents
Chng 5
=> 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
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
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 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
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
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
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
}
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
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
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];
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