Các phương pháp xác định hàm băm

Một phần của tài liệu Giáo Trình Cấu Trúc Dữ Liệu Và Thuật Toán (Trang 73 - 76)

a) Phương pháp chia

"Lấy phần dư của giá trị khoá khi chia cho số “rổ”" . Tức là hàm băm có dạng:

H(x)= x % B

Phương pháp này rõ ràng là rất đơn giản nhưng nó có thể không cho kết quả hi(x) = (h(x)+1) mod N

ngẫu nhiên lắm. Chẳng hạn B=1000 thì H(x) chỉ phụ thuộc vào ba số cuối cùng của khoá mà không phụ thuộc vào các số đứng trước. Kết quả có thể ngẫu nhiên hơn nếu B là một số nguyên tố.

b) Phương pháp nhân

"Lấy khoá nhân với chính nó rồi chọn một số chữ số ở giữa làm kết quả của hàm băm". Ví dụ: x x2 h(x) g ồm 3 số ở giữa 5502 29181605 181 hoặc 816 367 00135689 135 356 1256 01552516 552 525 2983 08898289 898 982

Vì các chữ số ở giữa phụ thuộc vào tất cả các chữ số có mặt trong khoá do vậy các khoá có khác nhau đôi chút thì hàm băm cho kết quả khác nhau.

c) Phương pháp tách gấp

Đối với các khoá dài và kích thước thay đổi người ta thường dùng phương pháp phân đoạn, tức là phân khoá ra thành nhiều đoạn có kích thước bằng nhau từ một đầu ( trừ đoạn tại đầu cuối ), nói chung mỗi đoạn có độ dài bằng độ dài của kết quả hàm băm. Phân đoạn có thể là tách sau đó thì gấp:

Gợi ý:

Tách khóa ra từng đoạn rồi xếp các đoạn thành hàng được canh thẳng một đầu rồi có thể gấp (thực hiện một phép toán nào đó, ví dụ như:cộng, trừ, …. chúng lại) rồi áp dụng phương pháp chia để có kết quả băm.

ví dụ: khoá 17056329 tách thành 329

056 017

cộng lại ta được 392. 392 mod 1000 = 392 là kết quả băm khoá đã cho.

CÂU HỎI VÀ BÀI TẬP CHƯƠNG 5 Câu hỏi số 1

Cài đặt các phép toán cơ bản trên từ điển: Thêm, xóa, tìm trên từng dạng biểu diễn của từ điển

Câu hỏi số 2

Cài đặt các phép toán cơ bản trên tập hợp với từng dạng biểu diễn, so sánh ưu/nhược điểm của từng dạng biểu diễn

Câu hỏi số 3

So sánh ưu nhược điểm của các cấu trúc bảng băm đóng và bảng băm mở

Bài tập

Xây dựng một chương trình tra từ điển mini ứng dụng cấu trúc bảng băm đóng và mở. Đánh giá độ phức tạp của từng giải thuật trong chương trình

TÀI LIỆU THAM KHẢO

[1] Aho, A. V. , J. E. Hopcroft, J. D. Ullman. "Data Structure and Algorihtms", Addison– Wesley; 1983

[2] Đỗ Xuân Lôi . "Cấu trúc dữ liệu và giải thuật". Nhà xuất bản khoa học và kỹ thuật. Hà nội, 1995.

[3] Đinh Mạnh Tường, Cấu trúc dữ liệu thuật toán, Nhà xuất bản Khoa học và Kỹ thuật, 2003.

[4] Michel T. Goodrich, Roberto Tamassia, David Mount, “Data Structures and Algorithms in C++”. Weley International Edition; 2004.

[5] N. Wirth " Cấu trúc dữ liệu + giải thuật= Chương trình", 1983. [6] Nguyễn Trung Trực, "Cấu trúc dữ liệu". BK tp HCM, 1990.

[7] Lê Minh Trung ; “Lập trình nâng cao bằng Pascal với các cấu trúc dữ liệu”; 1997

Một phần của tài liệu Giáo Trình Cấu Trúc Dữ Liệu Và Thuật Toán (Trang 73 - 76)

Tải bản đầy đủ (PDF)

(76 trang)