Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm cung cấp cho người học các kiến thức: Khái niệm các lý thuyết đồng dư, áp dụng lý thuyết đồng dư, bảng băm, chuyển kiểu cho khóa, các loại hàm băm
CuuDuongThanCong.com BẢNG BĂM Bùi Tiến Lên 01/01/2017 https://fb.com/tailieudientucntt CuuDuongThanCong.com LÝ THUYẾT ĐỒNG DƯ https://fb.com/tailieudientucntt Các khái niệm Định nghĩa Cho số nguyên dương n ∈ N, hai số nguyên a, b ∈ Z gọi đồng dư theo mơ-đun n hai có số dư chia cho n Được ký hiệu a ≡ b (modn) Ví dụ Ta có 11 ≡ (mod3) (vì 11 chia cho có số dư 2) −2 ≡ (mod7) (vì -2 chia cho có số dư 5) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Một số tính chất Tính chất Quan hệ đồng dư quan hệ tương đương Tính phản xạ a ≡ a (modn) Tính đối xứng a ≡ b (modn) ⇒ b ≡ a (modn) Tính bắc cầu CuuDuongThanCong.com Spring 2017 a ≡ b (modn) b ≡ c (modn) ⇒ a ≡ c (modn) https://fb.com/tailieudientucntt Data structure & Algorithm Một số tính chất (cont.) Tính chất Nếu a1 ≡ b1 (modn) a2 ≡ b2 (modn) Thì a1 + a2 ≡ b1 + b2 (modn) a1 − a2 ≡ b1 − b2 (modn) a1 a2 ≡ b1 b2 (modn) a1k ≡ b1k (modn) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Áp dụng Ví dụ Tìm phần dư phép chia 332 cho 17 Lời giải tính trực tiếp Ta có 332 = 1853020188851841 Và 1853020188851841 mod 17 = Vậy, phần dư phép chia 332 cho 17 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Áp dụng (cont.) Lời giải đồng dư Ta có CuuDuongThanCong.com Spring 2017 32 22 22 ≡3 ≡ 92 (mod17) 22 (mod17) 22 22 ≡ 812 (mod17) ≡ 152 (mod17) 2 ≡ 2252 (mod17) ≡ 42 (mod17) ≡ 162 (mod17) ≡ 256 (mod17) ≡ (mod17) https://fb.com/tailieudientucntt Data structure & Algorithm Áp dụng (cont.) Ví dụ Tìm hai chữ số cuối số 716 Lời giải Hai chữ số cuối phần dư phép chia 716 cho 100 Ta có 16 ≡7 22 22 22 ≡ 49 (mod100) (mod100) 2 ≡ 24012 (mod100) ≡ 12 (mod100) ≡ (mod100) Vậy, hai chữ số cuối 01 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm CuuDuongThanCong.com BẢNG BĂM https://fb.com/tailieudientucntt Giới thiệu Các thao tác tìm kiếm cấu trúc liệu danh sách, nhị phân, thường dựa việc so sánh khóa phần tử cấu trúc liệu Do đó, thời gian thao tác phụ thuộc vào kích thước liệu Bảng băm cấu trúc liệu giảm chi phí đến O(1) (khơng phụ thuộc vào kích thước liệu) Nội dung tham khảo từ http://www.giaithuatlaptrinh.com/ CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 10 Phương pháp địa mở (cont.) Thực Trong thực tế, việc thiết kế m hàm băm ngẫu nhiên độc lập thỏa mãn mã băm đôi khác với khóa cho trước việc vơ khó Cho dù ta có thực chi phí thời gian có lẽ khơng nhỏ Do đó, thực tế, ta chấp nhận hàm băm “phụ thuộc” với mức độ đó, mức độ cho phép dò khác nhau: dò tuyến tính, dò nhị phân, dò bậc hai băm kép CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 37 Phương pháp địa mở (cont.) Định nghĩa 11 Dò tuyến tính (linear probing), ta sử dụng hàm băm tốt h(x) để định nghĩa m hàm băm sau hi (x) = (h(x) + i) mod m 0≤i ≤m−1 (11) Điểm mạnh phương pháp dò tuyến tính thực thi đơn giản Tuy nhiên, giá trị băm có xu hướng tụm lại với thành dãy liên tục T Ngoài ra, hệ số tải gần tìm kiếm với dò tuyến tính hiệu CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 38 Phương pháp địa mở (cont.) Định nghĩa 12 Dò nhị phân, ta chọn m = sử dụng hàm băm tốt h(x) để định nghĩa m hàm băm sau CuuDuongThanCong.com Spring 2017 hi (x) = (h(x) ⊕ i) 0≤i ≤m−1 https://fb.com/tailieudientucntt Data structure & Algorithm (12) 39 Phương pháp địa mở (cont.) Định nghĩa 13 Dò bậc hai (quadratic probing), ta dùng hàm băm tốt h(x) hàm bậc để thiết kế m hàm băm sau hi (x) = (h(x) + i ) mod m 0≤i ≤m−1 (13) Phương pháp dò bậc hai mặt lý thuyết thực nghiệm tốt dò tuyến tính CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 40 Phương pháp địa mở (cont.) Định nghĩa 14 Dò băm kép (double hashing) sử dụng hai hàm băm tốt độc lập h(x), g(x) để thiết kế m hàm băm sau hi (x) = (h(x) + ig(x)) mod m 0≤i ≤m−1 (14) Phương pháp dò băm kép tốt mặt lý thuyết Tuy nhiên, thực tế, phương pháp chậm CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 41 Phương pháp băm hoàn hảo Băm hoàn hảo sử dụng hai hàm băm tốt {h(x), g(x)} bảng băm hai chiều T [1, 2, , m][ .] Mỗi hàng bảng băm T [i] xem bảng băm phụ, có kích thước phụ thuộc vào đầu vào Khi băm vào bảng, ta thực băm theo pha: Trong pha đầu tiên, sử dụng h để băm x vào hàng h(x) bảng T Trong pha thứ 2, gọi C[i] số lượng phần tử băm vào hàng thứ i sau pha đầu tiên, với hàng i, ta cấp phát nhớ C[i]2 cho hàng T [i] Sau đó, ta coi hàng bảng băm dùng g để băm phần tử x có mã băm i vào g(x) hàng CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 42 Phương pháp băm hoàn hảo (cont.) CuuDuongThanCong.com Spring 2017 Đụng độ lần giải phương pháp kết nối https://fb.com/tailieudientucntt Data structure & Algorithm 43 Phương pháp băm hoàn hảo (cont.) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 44 Phương pháp băm hoàn hảo (cont.) Thêm mảng A vào bảng T PutToPerfectTable(A[1, 2, , n], {h, g}, T ) C[0, , m − 1] ← {0, , 0} for i ← to n C[h(A[i])] ← C[h(A[i])] + for i ← to m − allocate C[i]2 memory slots to row T [i] of 2D table T for i ← to n j ← h(A[i]) k ← g(A[i]) mod C [j] add A[i] to list T [j][k] CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 45 Phương pháp băm hoàn hảo (cont.) LookupPerfectTable(x, {h, g}, C[0, , m − 1], T ) i ← h(x) j ← g(x) mod C [i] L ← T [i][j] if L = Null return No for each element e in L if x = e return Yes return No CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 46 Đánh giá Load factor α Kết nối Mở, ngẫu nhiên Mở, tuyến tính CuuDuongThanCong.com Spring 2017 0.1 1.05 1.05 1.06 0.5 1.25 1.4 1.5 0.8 1.4 0.9 1.45 2.6 5.5 0.99 1.5 4.6 50.5 2 - Bảng 1: Số lần dò tìm trung bình có (lý thuyết) https://fb.com/tailieudientucntt Data structure & Algorithm 47 Đánh giá (cont.) Load factor α Kết nối Mở, ngẫu nhiên Mở, tuyến tính CuuDuongThanCong.com Spring 2017 0.1 0.1 1.1 1.12 0.5 0.5 2.5 0.8 0.8 13 0.9 0.9 10 50 0.99 0.99 100 5000 2 - Bảng 2: Số lần dò tìm trung bình khơng có (lý thuyết) https://fb.com/tailieudientucntt Data structure & Algorithm 48 Đánh giá (cont.) CuuDuongThanCong.com Spring 2017 Load factor α Kết nối Mở, ngẫu nhiên Mở, tuyến tính 0.1 1.04 1.04 1.05 0.5 1.2 1.5 1.6 0.8 1.4 2.1 3.4 0.9 1.4 2.7 6.2 0.99 1.5 5.2 21.3 2 - Bảng 3: Số lần dò tìm trung bình có (thực nghiệm) https://fb.com/tailieudientucntt Data structure & Algorithm 49 Đánh giá (cont.) Load factor α Kết nối Mở, ngẫu nhiên Mở, tuyến tính 0.1 0.1 1.13 1.13 0.5 0.5 2.2 2.7 0.8 0.8 5.2 15.4 0.9 0.9 11.9 59.8 0.99 0.99 126 430 2 - Bảng 4: Số lần dò tìm trung bình khơng có (thực nghiệm) CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 50 Thiết kế hàm băm Trong ứng dụng mà phải thường xuyên thêm xóa phần tử khỏi bảng, phương pháp chuỗi kết nối lựa chọn tốt Ngược lại, ứng dụng mà chủ yếu thực tìm kiếm, phải thêm hay xóa phần tử khỏi bảng (ví dụ ứng dụng từ điển chẳng hạn) băm hồn hảo lựa chọn tốt Tương tự băm hoàn hảo, ứng dụng chủ yếu thực tìm kiếm lại có thêm thơng tin tần suất truy nhập khóa, ta sử dụng băm địa mở CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 51 ... cấu trúc liệu Do đó, thời gian thao tác phụ thuộc vào kích thước liệu Bảng băm cấu trúc liệu giảm chi phí đến O(1) (khơng phụ thuộc vào kích thước liệu) Nội dung tham khảo từ http://www.giaithuatlaptrinh.com/... CuuDuongThanCong.com BẢNG BĂM https://fb.com/tailieudientucntt Giới thiệu Các thao tác tìm kiếm cấu trúc liệu danh sách, nhị phân, thường dựa việc so sánh khóa phần tử cấu trúc liệu Do đó, thời... https://fb.com/tailieudientucntt Data structure & Algorithm 25 Các thao tác bảng băm Khởi tạo bảng băm Tìm kiếm phần tử bảng Thêm phần tử vào bảng Loại bỏ phần tử khỏi bảng CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt