Giảng viên: Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến Khái quát băm Hàm băm Sự đụng độ Các phương pháp giải đụng độ Kết luận Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS Hash Table Cấu trúc liệu giải thuật – HCMUS 2015 Vấn đề: Cho trước tập S gồm phần tử đặc trưng giá trị khóa Trên giá trị khóa có quan hệ thứ tự Tổ chức S để tìm kiếm phần tử có khóa k cho trước có độ phức tạp giới hạn nhớ cho phép? Ý tưởng: Biến đổi khóa k thành số (bằng hàm hash) sử dụng số địa để tìm kiếm bảng liệu Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS ĐNĐTiến +84.95.8345678 VCNam +84.91.2345678 NTHNhung +84.90.9345678 Cấu trúc liệu giải thuật – HCMUS 2015 Chi phí tìm kiếm trung bình: O(1) Chi phí tìm kiếm trường hợp xấu nhất: O(n) (rất gặp) Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS Định nghĩa: Hàm băm (hash function) hàm biến đổi khóa k phần tử thành địa bảng băm Tổng quát phép biến đổi khóa: Là ánh xạ thích hợp từ tập khóa U vào tập địa A H: U A k a = h(k) Tập giá trị khóa (U) lớn nhiều so với số khóa thực tế (K) nhiều Cấu trúc liệu giải thuật – HCMUS 2015 T Tập U Tập K 10 7 10 Key Data 10 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS Chọn số (Digit-selection): Chọn vài chữ số khóa ghép lại tạo thành giá trị băm Ví dụ: h(001364825) = 35 Ưu điểm: Đơn giản, tính tốn nhanh Khuyết điểm: Khơng thể tính chất khóa, khơng phân bố Cấu trúc liệu giải thuật – HCMUS 2015 10 Gấp số (folding) Cộng chữ số khóa Nhóm chữ số thành số cộng lại Ví dụ: h(001364825) = + + + + + + + + = 29 h(001364825) = 001 + 364 + 825 = 1190 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 11 Lấy dư (modulo arithmetic) Sử dụng phép tính lấy dư h (Key) = Key mod tableSize Ví dụ: h(Key) = Key mod 101 h(001364825) = 12 Cấu trúc liệu giải thuật – HCMUS 2015 12 k1, k2 K: k1 ≠ k2, H(k1) = H(k2) Tập U T H(3) H(4) Tập K 10 H(2) = H(8) H(10) Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 13 Ít xảy đụng độ Tính tốn nhanh Các khóa phân bố Cấu trúc liệu giải thuật – HCMUS 2015 14 Phương pháp nối kết (separate chaining) Phương pháp địa mở (Open-addressing) Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 15 Ứng với địa bảng, ta có danh sách liên kết chứa phần tử có khóa khác mà có địa Ta có danh sách (bảng băm) gồm M phần tử chứa địa đầu danh sách liên kết Cấu trúc liệu giải thuật – HCMUS 2015 16 ĐNĐTiến +84.95.8345678 VCNam +84.91.2345678 ĐTMHậu +84.95.6543210 NTHNhung +84.90.9345678 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 17 Tên gọi khác: Phương pháp dò Phương pháp thử Ý tưởng: Khi đụng độ xảy ra, ta thử tìm đến vị trị bảng tìm thấy vị trí trống Cấu trúc liệu giải thuật – HCMUS 2015 18 Phương pháp dò tuyến tính (Linear probing) Phương pháp dò bậc (Quadratic probing) Phương pháp băm kép (Double hashing) Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 19 Phương pháp dò tuyến tính: H(k, i) = (h(k) + i) mod M Cấu trúc liệu giải thuật – HCMUS 2015 20 Phương pháp dò bậc 2: H(k, i) = (h(k) + i2) mod M Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 10 21 Phương pháp băm kép: H(k, i) = (h1(k) + i*h2(k)) mod M h1(key) = key mod 11 h2(key) = – (key mod 7) Cấu trúc liệu giải thuật – HCMUS 2015 22 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 11 23 Phương pháp địa mở: Đơn giản cài đặt Sử dụng cấu trúc liệu Giải đụng độ lại gây đụng độ Phương pháp nối kết: bị ảnh hưởng tốc độ mảng gần đầy Ít tốn nhớ mảng thưa (ít phần tử) Khơng Cấu trúc liệu giải thuật – HCMUS 2015 24 Cho bảng băm có kích thước M = 11 Hàm băm: h(k) = k mod M Dùng phương pháp địa mở Cho biết kết sau thêm vào bảng băm khóa 10, 22, 31, 4, 15, 28, 17, 88, 59, với phương pháp xử lý đụng độ: a Dò tuyến tính b Dò bậc c Băm kép h2(k) = (k mod 19)+1 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 12 25 Cho từ điển Anh – Việt có 15.000 từ, tổ chức cấu trúc liệu bảng băm cho biết hàm băm thích hợp giúp cho việc tra từ hiệu Cấu trúc liệu giải thuật – HCMUS 2015 26 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 13 ... h(001364825) = + + + + + + + + = 29 h(001364825) = 001 + 364 + 825 = 119 0 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 11 Lấy dư (modulo arithmetic) Sử dụng phép tính lấy dư h (Key)... + i*h2(k)) mod M h1(key) = key mod 11 h2(key) = – (key mod 7) Cấu trúc liệu giải thuật – HCMUS 2015 22 Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS 11 23 Phương pháp địa mở: Đơn giản... nhất: O(n) (rất gặp) Cấu trúc liệu giải thuật – HCMUS 2015 © FIT-HCMUS Định nghĩa: Hàm băm (hash function) hàm biến đổi khóa k phần tử thành địa bảng băm Tổng quát phép biến đổi khóa: Là ánh