Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm được biên soạn gồm các nội dung chính sau: giới thiệu bảng băm; hàm băm; xung đột và bài tập. Mời các bạn cùng tham khảo!
GIỚI THIỆU • Tổ chức lưu trữ thơng tin 100 nhân viên công ty ABC, nhân viên có mã số riêng EMP_ID phạm vi [0, 99] • Ta dùng mảng để lưu trữ với EMP_ID mục tương ứng mảng Dữ liệu An Bình Minh … Ngọc EMP_ID … 99 KHOA CÔNG NGHỆ THÔNG TIN GIỚI THIỆU • Tổ chức lưu trữ thơng tin 100 nhân viên công ty ABC, nhân viên có mã số riêng EMP_ID phạm vi [00000, 99999] • Ta cần mảng có 100,000 phần tử để lưu trữ với EMP_ID mục tương ứng mảng Dữ liệu An Bình Minh … Ngọc … EMP_ID 00000 00001 00002 … 99 … 99999 Tốn nhiều khơng gian lưu trữ KHOA CƠNG NGHỆ THƠNG TIN GIỚI THIỆU • Cần giải pháp khác để lưu trữ 100 nhân viên với EMP_ID có phạm vi [00000, 99999] • Cần có hàm chuyển EMP_ID có số EMP_ID có số (hàm băm) • Cần có mảng ánh xạ khóa EMP_ID số tới vị trí mảng EMP_ID số (Bảng băm) KHOA CƠNG NGHỆ THƠNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm • Trong bảng băm, phần tử có khóa k lưu mục có hàm băm h(k) khơng phải vị trí k • Q trình ánh xạ khóa vào vị trí phù hợp bảng băm gọi hashing • Khi hai khóa có vị trí bảng băm gọi xung đột (collision) KHOA CÔNG NGHỆ THÔNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm KHOA CƠNG NGHỆ THƠNG TIN HÀM BĂM • Hàm băm cơng thức tốn học áp dụng ánh xạ cho khóa k tạo số nguyên dùng làm mục bảng băm • Một hàm băm thỏa mãn điều kiện sau: Tính tốn nhanh Các khóa phân bố bảng Ít xảy xung đột Xử lý loại khóa có kiểu liệu khác KHOA CÔNG NGHỆ THÔNG TIN CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia h(x) = x % M Ví dụ 1: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = 10 (chọn số chẵn – kích thước bảng) h(1234) = 1234 % 10 = h(5462) = 5462 % 10 = h(2362) = 2362 % 10 = KHOA CÔNG NGHỆ THÔNG TIN Xung đột CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia h(x) = x % M Ví dụ 2: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = (Chọn số lẻ – kích thước bảng) h(1234) = 1234 % = h(5462) = 5462 % = h(2362) = 2362 % = KHOA CÔNG NGHỆ THÔNG TIN Xung đột 10 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia h(x) = x % M Ví dụ 3: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = 97 (Chọn số nguyên tố – gần kích thước bảng) h(1234) = 1234 % 97 = 70 h(5462) = 5462 % 97 = 30 h(2362) = 2362 % 97 = 34 KHOA CƠNG NGHỆ THƠNG TIN Khơng xung đột 11 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp chia • Việc chọn M số nguyên tố giúp tạo khóa phân bố đồng • M số nguyên tố gần với 2k chọn 2k : h(x) = x % 2k Khi h(x) chọn giá trị k bit cuối x Ví dụ 4: x = 15 (1111), M = (23) h(15) = 15 % = (111) KHOA CÔNG NGHỆ THÔNG TIN 12 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp nhân • Thực bước B1 : Chọn số A cho < A < B2 : Nhân khóa x * A B3 : Trích phần phân số x * A B4 : Nhân kết B3 với M kích thước bảng băm KHOA CÔNG NGHỆ THÔNG TIN 13 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp nhân h(x) = M * (x * A mod 1) Trong đó, (x * A mod 1) trích phần thập phân x * A M kích thước bảng băm KHOA CÔNG NGHỆ THÔNG TIN 14 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp nhân h(x) = M * (x * A mod 1) Chọn A phù hợp để hàm băm hiệu A : thường chọn theo đề xuất Knuth tốt A= 5−1 = 0.618033 KHOA CÔNG NGHỆ THÔNG TIN 15 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp nhân h(x) = M * (x * A mod 1) Ví dụ 5: Cho A = 0.618033; M = 1000 Tính x = 12345 h(12345) = 1000 * (12345 * 0.618033 mod 1) = 1000 * (7629.617385 mod 1) = 1000 * (0.617385) = 617.385 = 617 KHOA CÔNG NGHỆ THÔNG TIN 16 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Ví dụ 6: KHOA CƠNG NGHỆ THÔNG TIN 17 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Kỹ thuật Dị tuyến tính - Linear Probing -Điều thấy xảy trường hợp mà kỹ thuật Hashing sử dụng để tạo mục tồn mảng -Tình huống, cần tìm kiếm vị trí trống mảng việc nhìn vào ô tìm thấy trống Kỹ thuật gọi Dị tuyến tính KHOA CƠNG NGHỆ THƠNG TIN 18 BaiTap 01 - Phương pháp chia h(x) = x % M Tính giá trị băm cho khóa 15, 11, 27, 8, 32 M = (Chọn số lẻ – kích thước bảng) BaiTap 02 - Phương pháp chia h(x) = x % M VD: tính giá trị băm cho khóa 1234 ; 5462, 2362 M = (Chọn số lẻ – kích thước bảng) BaiTap 03 - Phương pháp chia h(x) = x % M Tính giá trị băm cho khóa 10 ; 25, 20; 9; 21; 21 M = 10 ( kích thước bảng) KHOA CƠNG NGHỆ THƠNG TIN 19 #Thực hành 01: def hash_key( key, m): return (key % m) m = print(f'The print(f'The print(f'The print(f'The print(f'The print(f'The hash hash hash hash hash hash KHOA CÔNG NGHỆ THÔNG TIN value value value value value value #?? #?? is is is is is is {hash_key(15,m)}') {hash_key(2,m)}') {hash_key(3,m)}') {hash_key(9,m)}') {hash_key(11,m)}') {hash_key(7,m)}') #?? 20 #Thực hành 02: def display_hash(hashTable): for i in range(len(hashTable)): print(i, end = " ") #?? for j in hashTable[i]: print(" >", end = " ") print(j, end = " ") print() HashTable = [[] for _ in range(10)] def Hashing(keyvalue): return (keyvalue % len(HashTable)) #?? #?? def insert(Hashtable, keyvalue, value): #?? hash_key = Hashing(keyvalue) Hashtable[hash_key].append(value) insert(HashTable, 10, 'MachineLearning') insert(HashTable, 45, 'DataScience') insert(HashTable, 20, 'DataAnalytics') insert(HashTable, 9, 'BigData') insert(HashTable, 21, 'DataStructure ') insert(HashTable, 41, 'IoT') insert(HashTable, 35, 'Probability') display_hash (HashTable) KHOA CÔNG NGHỆ THÔNG TIN #?? #?? 21 ... (hàm băm) • Cần có mảng ánh xạ khóa EMP_ID số tới vị trí mảng EMP_ID số (Bảng băm) KHOA CƠNG NGHỆ THƠNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm •... (collision) KHOA CƠNG NGHỆ THƠNG TIN BẢNG BĂM • Bảng băm cấu trúc liệu mà khóa ánh xạ đến vị trí mảng thơng qua hàm băm KHOA CƠNG NGHỆ THƠNG TIN HÀM BĂM • Hàm băm cơng thức tốn học áp dụng ánh xạ... hàm băm • Trong bảng băm, phần tử có khóa k lưu mục có hàm băm h(k) khơng phải vị trí k • Q trình ánh xạ khóa vào vị trí phù hợp bảng băm gọi hashing • Khi hai khóa có vị trí bảng băm gọi xung đột