Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
1,31 MB
Nội dung
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 tốt 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 VD: 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 VD: 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 VD: 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 • Chỉ sử dụng phép chia nên tốc độ tính tốn nhanh • Cần chọn M cho phù hợp Nếu chọn M số chẳn h(x) cho số chẳn Nếu chọn M số lẻ h(x) cho số lẻ KHOA CÔNG NGHỆ THÔNG TIN 12 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ụ: x = 15 (1111), M = (23) h(15) = 15 % = (111) 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 • 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 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) 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 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) 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.617385 KHOA CÔNG NGHỆ THÔNG TIN 16 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ụ: 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 17 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp bình phương trung bình Thực bước B1 : Tính bình phương khóa x : x2 B2 : Trích r chữ số x2 KHOA CƠNG NGHỆ THÔNG TIN 18 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp bình phương trung bình Ví dụ: M = 100 có phạm vi [0, 99] r = length(M) - = Tính giá trị băm cho 1234; 5462 x = 1234, x2 = 1522756, h(1234) = 27 x = 5462, x2 = 31832164, h(5642) = 21 KHOA CÔNG NGHỆ THÔNG TIN 19 CÁC PHƯƠNG PHÁP TẠO HÀM BĂM Phương pháp gấp Thực bước B1: Chia khóa x thành nhiều phần x1, x2, …, xn , phần có số chữ số Riêng phần cuối xn B2: Cộng thành phần x1 + x2 + … + xn KHOA CÔNG NGHỆ THÔNG TIN 20 ... EMP_ID phạm vi [00000, 99 999 ] • 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 … 99 999 Tốn nhiều khơng... 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... 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, 99 999 ] • Cần có hàm chuyển EMP_ID có số EMP_ID có số (hàm băm)