3 Tìm kiếm theo địa *** Bảng băm - Hash Tables © 2004 Goodrich, Tamassia 025-612-0001 981-101-0002 451-229-0004 I Hàm băm Cấu trúc hàm băm Hàm băm có dạng sau: h : K m-1 Trong đó: - h gọi hàm băm (hash h K x z y … function) - K tập giá trị khóa - m-1 bảng địa (là số nguyên) - m kích thước bảng m-1 Yêu cầu xây dựng hàm băm: Hàm phải dải địa bảng địa Hàm băm phải tính tốn đơn giản Hình ảnh hàm băm h(k1) h(k3) K h(k) k1 k2 k3 h(k2) … N-1 Hàm băm Các đối tượng Hàm băm 012 … N-1 Bảng địa Một hàm băm ánh xạ đối tượng vào tập địa [0, N-1] II Một số phương pháp xây dựng hàm băm Phương pháp chia Để tính địa dải đối tượng ta lấy giá trị khóa chia cho kích thước bảng Địa dải phần dư phép chia h(k) = k % m Yêu cầu: Hàm h phải dải đối tượng bảng cách ngẫu nhiên Để có điều h phải phụ thuộc vào m Phụ thuộc vào m Thông thường người ta chọn m số nguyên tố nhỏ gần với (10, 100, 1000, ) Phương pháp nhân Giá trị khóa nhân với sau lấy số bao gồm số chữ số “giữa” kết để làm “địa rải” Ví dụ: k 5402 0367 1246 k2 h(k) gồm chữ số 29181604 181 816 00134689 134 346 01552516 552 525 Rõ ràng chữ số phụ thuộc vào chữ số khóa khóa có khác chút địa dải khác nhiều Phương pháp phân đoạn Giá trị khóa phân thành nhiều đoạn Người ta sử dụng hai kỹ thuật phân đoạn sau đây: Tách: Tách đoạn đoạn xếp thành hàng, dóng lề trái lề phải Gấp: Gấp đoạn lại theo đường biên tương tự gấp giấy, chữ rơi vào chỗ đặt thành hàng thẳng Ví dụ: Tách: giả sử có khóa k = 17046329 + Gấp: 329 046 017 392 046 + 923 710 1679 Chọn 167 679 III Bảng băm - Hash table Một bảng băm cấu trúc dựa mảng để lưu trữ phần tử, phần tử cặp Khóa-Giá trị (key-value) Các thành phần cấu thành lên bảng băm Mảng chứa Mỗi phần tử mảng quản lý danh sách phần tử có khóa qua ánh xạ h cho địa Hàm băm h(k) - Hash function, h(k) Mã băm Giả sử có hàm h(k) = k % Có giá trị: 11, 21, 44, 23, 41, 4, 34, 12 11-21-41 12 23 44-4-34 Thùng chứa 10 Độ phức tạp thời gian Độ phức tạp thời đưa phần tử vào bảng tìm kiếm phần tử bảng Độ phức tạp thời gian Trường hợp xấu O(n) Trường hợp tốt O(1) 11 Cấu trúc liệu bảng băm Thuộc tính Mảng (mỗi phần tử mảng lưu danh sách phần tử) N: kích thước mảng Các phương thức Node *Add(Key, Object) void Remove(Key) Node *Find(Key) bool Contains(Key) int Count() 12 Bài tập Viết chương trình nhập vào dãy số nguyên Xây dựng hàm băm để tìm kiếm phần tử nhập từ bàn phím (hàm băm theo số) Viết chương trình tìm kiếm sinh viên (sử dụng lớp sinh viên học) sử dụng bảng băm (hàm băm theo chữ) Thời gian: 17h00 ngày 12/11/2014 13 Relax 14 ...I Hàm băm Cấu trúc hàm băm Hàm băm có dạng sau: h : K m-1 Trong đó: - h gọi hàm băm (hash h K x z y … function) - K tập giá trị khóa - m-1 bảng địa (là số nguyên) - m kích thước bảng ... dựng hàm băm: Hàm phải dải địa bảng địa Hàm băm phải tính tốn đơn giản Hình ảnh hàm băm h(k1) h(k3) K h(k) k1 k2 k3 h(k2) … N-1 Hàm băm Các đối tượng Hàm băm 012 … N-1 Bảng địa Một hàm băm ánh... thời gian Độ phức tạp thời đưa phần tử vào bảng tìm kiếm phần tử bảng Độ phức tạp thời gian Trường hợp xấu O(n) Trường hợp tốt O(1) 11 Cấu trúc liệu bảng băm Thuộc tính Mảng (mỗi phần tử