Nội dung của bài giảng Cấu trúc dữ liệu và giải thuật - Chương 6 trình bày về Hash table. Trong chương này người học có thể hiểu được một số kiến thức sau: Mô tả, hàm băm, bảng băm kết nối trực tiếp, bảng băm kết nối hợp nhất, bảng băm dò tìm tuyến tính. Mời các bạn cùng tham khảo.
Hash Table Nguyễn Hà Giang Nội dung (giới thiệu 1-2 tiết) • • • • • • Giới thiệu Mô tả Hàm băm Bảng băm kết nối trực tiếp Bảng băm kết nối hợp Bảng băm dị tìm tuyến tính Giới thiệu Tất thao tác phải so sánh khoá!!! Khắc phục? Vấn đề • Bài tốn: cần lưu trữ mẫu tin thực thao tác – Thêm mẫu tin – Xố mẫu tin – Tìm mẫu tin theo khóa • Tìm cách thức thực cách hiệu quả? Vấn đề • Unsorted array – Sử dụng mảng để lưu mẫu tin, khơng có thứ tự – Thêm: thêm cuối nhanh O(1) – Xoá: chậm tìm xố O(n) – Tìm kiếm: chậm O(n) Vấn đề • Sorted array – Sử dụng mảng lưu trữ mẫu tin, có thứ tự – Thêm: chèn vào vị trí, chậm O(n) – Xố: phải dời phần tử phía sau, chậm O(n) – Tìm: nhị phân, nhanh O(logn) Vấn đề • Linked list – Lưu trữ mẫu tin danh sách liên kết – Thêm: nhanh, O(1) – Xoá: nhanh xố nút, chậm tìm O(n) – Tìm kiếm: tìm kiếm O(n) Vấn đề • Cấu trúc liệu phức tạp hơn, thực thi tốt – Tree BST – Hash table Array as table 0012345 0033333 0056789 9801010 9802020 9903030 9908080 An Binh Danh 8.15 90 5.68 Phuong 2.0 Minh 10.0 Thao Tung 7.3 4.9 Vấn đề: lưu trữ 1,000 mẫu tin sinh viên tìm kiếm theo mã số sinh viên Array as table : 12345 : 33333 : 56789 : : 9908080 : 9999999 : An : Binh : Danh : : Tung : : 8.15 : 9.0 : 5.68 : : 4.9 : Một cách “stupid” lưu trữ mẫu tin mảng cực lớn 9999999 Index sử dụng mã số sinh viên Khi mẫu tin sv với ms 0012345 lưu trữ A[12345]! 10 Array as table • Dạng bảng băm với địa trực tiếp – Mỗi vị trí tương ứng khố U – Nếu phần tử x có khố k, T[k] chứa trỏ đến x – Ngược lại T[k] = Ø thể null U (universe of key) K (actual keys) - - 11 Array as table • Lưu trữ mẫu tin mảng lớn: mục tương đương khóa • Thêm: nhanh O(1) • Xóa: nhanh O(1) • Tìm: nhanh O(1) • Nhưng lãng phí nhiều nhớ! 12 Hàm băm “hoàn hảo” int Hash(KeyType key) Giả sử có hàm “magic” hash Nó ánh xạ mã số 1000 sinh viên vào số 999, ánh xạ one to one Khơng có mã số giá trị ánh xạ H(‘0012345’) H(‘0033333’) H(‘0056789’) … H(‘9908080’) = 134 = 67 = 764 =3 13 Bảng băm Để lưu trữ mẫu tin, gọi Hash(stud_id) lưu trữ vào vị trí Hash(stud_id) mảng Để tìm sinh viên, cần gọi Hash(stud_id) : 9908080 : 67 0033333 : 134 0012345 : 764 0056789 : 999 : name : Tung : Binh : An : Danh : : score : 4.9 : 9.0 : 8.15 : 5.68 : : 14 Bảng băm với hàm băm hoàn hảo • Magic hash – Thêm: nhanh O(1) – Xóa: nhanh O(1) – Tìm: nhanh O(1) • Thực tế khó xây dựng hàm băm hồn hảo (khi khơng gian khóa q lớn) 15 Hàm băm • Hàm băm: biến đổi khóa thành mục bảng băm – Khóa dạng số hay dạng chuỗi – Chỉ mục tính từ M-1, với M số mục bảng băm – Hàm băm thường dùng: key % M, với M độ lớn bảng băm • Hàm băm tốt phải thoả yêu cầu – Giảm thiểu xung đột – Phân bố M địa khác bảng băm 16 Ưu điểm bảng băm • Dung hịa tốt thời gian truy xuất dung lượng nhớ – Nếu ko giới hạn nhớ: one-to-one, truy xuất tức – Nếu dung lượng nhớ có giới hạn tổ chức khóa địa • Bảng băm ứng dụng nhiều thực tế, thích hợp tổ chức liệu có kích thước lớn lưu trữ ngồi 17 Bảng băm • Mỗi bảng băm ta cần xác định: – Tập khóa k – Tập địa M – Hàm băm • Khi xây dựng mong muốn khóa ánh xạ vào địa khác • Thực tế thường xảy hai khóa địa Gọi xung đột (collision) • Phải có chiến lược giải xung đột! 18 BB với PP kết nối trực tiếp • Mỗi địa bảng băm tương ứng DSLK • Các nút bị xung đột nối kết với DSLK • Danh sách liên kết từ đến M-1 • Khi tìm địa hàm băm f(key) xác định địa i [0 M-1], ứng với danh sách thứ i chứa phần tử tiếp tục tìm kiếm danh sách liên kết 19 BB với PP kết nối trực tiếp • Bảng băm có tập khóa số nguyên, tập địa có 10 địa Bảng địa 30 50 11 21 32 62 33 53 54 74 25 55 36 56 27 47 48 98 39 59 41 74 57 69 20 BB với PP kết nối trực tiếp #define M 10 typedef struct node { int Key; struct node * Next; } NODE; typedef NODE * NodePtr; NodePtr bucket[M]; Khóa Nút (trùng địa chỉ) 10 danh sách liên kết int Hash(int key) { return key % M; } 21 Các bảng băm phổ biến khác • Bảng băm với PP kết nối hợp • Bảng băm với PP dị tuyến tính • Sinh viên đọc thêm tài liệu: – Nguyễn Hồng Chương, CTDL ứng dụng cài đặt C, NXB TPHCM, 2005, p413 – http://en.wikipedia.org/wiki/Hash_table – http://www.sparknotes.com/cs/searching/hashtables/section1.html – http://www.cs.auckland.ac.nz/software/AlgAnim/hash_tables.html 22 Bài tập Viết CT thực từ điển Anh - Việt Mỗi nút bảng băm có khai báo trường sau: – Trường word khoá chứa từ tiếng anh – Trường mean nghĩa tiếng Việt – Trường next trỏ nút kế bị xung đột Tập khoá chuỗi tiếng anh, tập địa có 26 chữ Chọn hàm băm sau cho khoá bắt đầu ký tự a băm vào địa 0, b băm vào địa 1,…, z băm vào địa 25 Chương trình có chức sau: Nhập vào từ Xem từ điển theo ký tự đầu Xem toàn từ điển Tra từ điển Xố từ, xóa tồn từ điển 23 ... khoá chuỗi tiếng anh, tập địa có 26 chữ Chọn hàm băm sau cho khoá bắt đầu ký tự a băm vào địa 0, b băm vào địa 1,…, z băm vào địa 25 Chương trình có chức sau: Nhập vào từ Xem từ điển theo ký tự đầu... Giả sử có hàm “magic” hash Nó ánh xạ mã số 1000 sinh viên vào số 999, ánh xạ one to one Khơng có mã số giá trị ánh xạ H(‘0012345’) H(‘0033333’) H(‘00 567 89’) … H(‘9908080’) = 134 = 67 = 764 =3 13... 5 .68 : : 14 Bảng băm với hàm băm hồn hảo • Magic hash – Thêm: nhanh O(1) – Xóa: nhanh O(1) – Tìm: nhanh O(1) • Thực tế khó xây dựng hàm băm hồn hảo (khi khơng gian khóa q lớn) 15 Hàm băm • Hàm