Bảng băm (Hash table) Bảng băm (Hash table) Chương 5 Nội dung Nội dung Nội dung Nội dung 10/18/13 www.lhu.edu.vn !"#$%&' ($()" *$*+&$,-./ "&0"1""2#""34 56%&&7$ ") '8*$*"9:&7"3,;,/< ;,=$/<>/ ?@!9=+A$"$8 ")%&(1hiệu suất cao &7,B"CD*E/F 10/18/13 www.lhu.edu.vn G34H" =+A1C"I " 34"9+&$&H" =+ABC(+0B & 5%&D""++$ "I" 56%&=;,J/ !"#$#%!!"& !'() !"#$#%!!"& !'() 10/18/13 www.lhu.edu.vn -K# "" + &$,*. $L&.*/"3=+A MK # "" "I ,*. $L +.**.*/+$ *+, - ./ 0$1!+20+!3!4) 0 +205!1!.6 7 ! 8 !"2 !4) 0 .6 79 %#!": %#!": 10/18/13 www.lhu.edu.vn Bảng băm đóngK NE34"E OP&9B(1"I -7: ")""$"Q<9+Q 6+R=D*E Bảng băm mởK NE34&7"E O*E&9"9:"9"S"I !9: ")""$"Q<934 56+R"9:*7"T ;2' ;2' 10/18/13 www.lhu.edu.vn UV+&$,*E<"P>/"I<"I" +$ W0KV&9"PJ"I,*EQ/ int hashfunc( char *s, int n ) { int sum = 0; while( n-- ) sum = sum + *s++; return sum % 256; } 50"I"2&$XMYK<# =9>? 50"I"2&$XMYK<# =9>? 5'+20@2 -.6 7A'.B.1 2''2 <# !'2 <# !'2 C'0!"6+20 Hàm băm 6 7? 7B 10/18/13 www.lhu.edu.vn 5Q"Z 50$[ !"&$H"E'+$[ \+[ <# !'2 <# !'2 10/18/13 www.lhu.edu.vn ]C+ ]S" ]S ;)0)$& ;)0)$& 10/18/13 www.lhu.edu.vn ]C+ ;)0)$& ;)0)$& Khoá Địa chỉ Khóa Địa chỉ Khóa Địa chỉ Khóa Địa chỉ a 0 h 7 o 14 v 21 b 1 i 8 p 15 w 22 c 2 j 9 q 16 x 23 d 3 k 10 r 17 y 24 e 4 l 11 s 18 z 25 f 5 m 12 t 19 / / g 6 n 13 u 20 / / 10/18/13 www.lhu.edu.vn -))0) ' N4*E"28":="IK h,k/?k$m k=&$<m=&0"1",*E"I/"2[ (R'"^+m _"^?` <,&/?&$` *aS*R "2&:="I _"^?Jb <,&/?&$Jb *aS*E"E "2&:="I Q"^m=QE3(1` $c"Jb ;)0)$& ;)0)$& [...]... www.lhu.edu.vn Chương 5 Bảng băm Cài đặt bảng băm phương pháp nối kết Phép toán kiểm tra bảng băm rỗng isempty: int isempty( ) { int b; for (b=0;bnext; } } 10/18/13 www.lhu.edu.vn Chương 5 Bảng băm Cài đặt bảng băm phương... cho bảng địa chỉ có khoảng 100 mục, chọn hằng số A=0.61803 Tính địa chỉ cho khóa 325 h(325) = floor(100 (325*0.61803 mod 1))=86 M=100, A=0.61803 M=100, A=0.52173 Khoá Khoá Địa chỉ 325 86 325 56 125 25 125 21 147 10/18/13 Địa chỉ 85 147 69 www.lhu.edu.vn Chương 5 Bảng băm Các thao tác trên bảng băm 10/18/13 Khởi tạo (Initialize) Kiểm tra rỗng (Empty) Lấy kích thước của bảng băm. .. có khóa k trong bảng băm 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 } 10/18/13 www.lhu.edu.vn Chương 5 Bảng băm Cài đặt bảng băm phương pháp nối kết Phép toán xóa bucket trong bảng băm void clearbucket.. .Chương 5 Bảng băm Phương pháp xây dựng hàm băm Ví dụ: Ta có tập khoá là các giá trị số gồm 3 chữ số, và vùng nhớ cho bảng địa chỉ có khoảng 100 mục, như vậy ta sẽ lấy hai số cuối của khoá để làm địa chỉ theo phép chia dư cho 100 Vd: 325 Mod 100 = 25, 125 Mod 100=25 M=100 M=97 (nguyên tố) Khoá Khoá Địa chỉ 325 25 325 34 125 25 125 28 147 10/18/13 Địa chỉ 47 147 50 www.lhu.edu.vn Chương. .. p->next; } } 10/18/13 www.lhu.edu.vn Chương 5 Bảng băm Cài đặt bảng băm phương pháp nối kết Phép toán duyệt toàn bộ bảng băm: void traverse( ) { int b; for(b=0;b . Bảng băm (Hash table) Bảng băm (Hash table) Chương 5 . 10/18/13 www.lhu.edu.vn Bảng băm đóngK NE34"E OP&9B(1"I