ThiếtKế & Đánh Giá Thuật Toán Bảng Băm TS. Lê Nguyên Khôi Trường ĐạiHọc Công Nghệ - ĐHQGHN
Thiết Kế & Đánh Giá Thuật ToánBảng Băm
TS. Lê Nguyên Khôi
Trường Đại Học Công Nghệ - ĐHQGHN
Nội Dung
Phương pháp băm Hàm băm Giải quyết va chạm
1
Thiết Kế & Đánh Giá Thuật Toán
Bài Toán Từ Điển
Dùng tập động cài đặt từ điển Mỗi phần tử là cặp (khóa, dữ liệu)
Có thể tìm theo khóa Được sắp xếp hoặc không
Chỉ quan tâm tới Tìm kiếm SEARCH Chèn INSERT Xóa DELETE
Tổ chức cấu trúc dữ liệu như thế nào?
2
Thiết Kế & Đánh Giá Thuật Toán
Bài Toán Từ Điển
Nếu khóa của dữ liệu là số nguyên không âmtrong khoảng , phân biệt Có thể sử dụng mảng cỡ Dữ liệu khóa lưu tại Tìm kiếm, chèn, xóa trong thời gian
Thực tế không khả thi Số phần tử dữ liệu có thể rất nhỏ so vớisố 64-bit thể hiện ( khóa khác nhauXâu ký tự thậm chí còn lớn hơn
Khóa có thể không phải số nguyên Tận dụng phép truy cập trực tiếp của mảng
3
Thiết Kế & Đánh Giá Thuật Toán
Phương Pháp Băm
Lưu dữ liệu trong mảng Hàm băm : ánh xạ mỗi giá trị khóa của dữ
liệu tới một chỉ số ( ) Dữ liệu sẽ được lưu trong
4
Tínhđịa chỉ
…
…
Tập các giá trị khoá
Hàm băm
Mảng
Thiết Kế & Đánh Giá Thuật Toán
Phương Pháp Băm
Nếu có thì , và tínhchỉ số trong thời gian thì các phép toán tìm kiếm, chèn, xóa cũng
trong thời gian
Tuy nhiên, thường xảy ra va chạm Chèn khóa vào vị trí đã có khóa khác Thực tế có thể cho
5
Thiết Kế & Đánh Giá Thuật Toán
Hàm Băm
Khó xác định phương pháp băm đồng đềuđơn giản.
Hàm băm tốt Phân bố khóa đồng đều vào các vị trí Tính nhanh & dễ dàng Đảm bảo ít va chạm
Khóa là số nguyên không âm Phương pháp chia Phương pháp nhân
Khóa là xâu ký tự Đổi xâu thành số nguyên không âm
6
Thiết Kế & Đánh Giá Thuật Toán
Hàm Băm – Phương Pháp Chia
Nhạy cảm với cỡ của bảng băm ( ) Chọn để hạn chế xảy ra va chạm
Không chọn có ước số nhỏ Số nguyên tố có dạng đặc biết, ví dụ
Ví dụ: nếu , hàm băm không phụthuộc vào tất cả các bit của và , thì
7
Thiết Kế & Đánh Giá Thuật Toán
Hàm Băm – Phương Pháp Nhân
, với máy tính -bit. Hàm băm:
là toán tử “bitwise right-shift” Toán tử nhanh
là số lẻ trong khoảng Không chọn quá gần hoặc
Phép nhân và phép chia dư nhanhhơn phép chia
8
Thiết Kế & Đánh Giá Thuật Toán
Hàm Băm – Phương Pháp Nhân
với máy tính -bit
1011001 = 1101011 =
10010100110011011
9
Thiết Kế & Đánh Giá Thuật Toán
Hàm Băm – Xâu Ký Tự
Đổi ký tự thành số nguyên (bảng ASCII) Khi đó xâu ký tự là số trong hệ cơ số 128
Chuyển sang hệ 10 Nhược điểm: xâu dài cho kết quả vượt quá
khả năng biểu diễn của máy tính
Cải tiến: Xâu ký tự thường được tạo thành từ 26 chữ
cái, 10 chữ số, và một số ký tự khác Thay 128 thành 37
10
Thiết Kế & Đánh Giá Thuật Toán
Giải Quyết Va Chạm
Nếu dữ liệu với khóa đã được lưu tạivới . Cần thêm dữ liệu với khóa Nếu , xảy ra va chạm, lưu ở đâu?
Các phương pháp Dây chuyềnTạo một danh sách lưu tất cả dữ liệu có cùng
vị trí
Địa chỉ mởTìm vị trí khác còn trống trong bảng và cho dữ
liệu mới vào đó
11
Thiết Kế & Đánh Giá Thuật Toán
Giải Quyết Va Chạm – Dây Chuyền
Tại mỗi vị trí trong bảng băm là một danhsách liên kết các dữ liệu có cùng giá trị băm
Ưu điểm: Số dữ liệu lưu không phụ thuộc vào cỡ của mảng
Thời gian các phép toán tìm kiếm, chèn, xóa?
12
…
…
…
…
Hàmbăm
Thiết Kế & Đánh Giá Thuật Toán
Dây Chuyền – Phân Tích Thời Gian
Trường hợp xấu nhất: Tất cả các khóa được băm vào cùng vị trí Thời gian tìm kiếm
Trường hợp trung bình: Mỗi khóa có thể được băm vào bất cứ vị trí
nào trong , độc lập với việc các khóa khácđược băm như thế nào
13
Thiết Kế & Đánh Giá Thuật Toán
Dây Chuyền – Phân Tích Trung Bình
Trường hợp trung bình: băm đồng đều
số lượng khóa trong bảngđộ lớn của bảng
Hệ số tải của bảng băm
số lượng khóa trung bình tại mỗi
vị trí trong bảng băm
14
Thiết Kế & Đánh Giá Thuật Toán
Dây Chuyền – Tìm Kiếm Trung Bình
Thời gian tìm kiếm không thành công
Thời gian tìm kiếm là nếu Thời gian tìm kiếm thành công có tiệm cậntương tự
15
Hàm bămTruy cập vị trí
Tìm kiếmdanh sách
Thiết Kế & Đánh Giá Thuật Toán
Giải Quyết Va Chạm – Địa Chỉ Mở
Khi xảy ra va chạm, tìm vị trí khác còn trốngtrong bảng và cho dữ liệu mới vào đó Dãy các vị trí được tìm gọi là dãy thăm dò Bảng băm có thể bị đầy
Xác định dãy thăm dò Tuyến tínhDãy thăm dò: , , ,
Bình phươngDãy thăm dò: , , ,
Băm képDãy thăm dò: với
16
Thiết Kế & Đánh Giá Thuật Toán
Bài Tập
, Phương pháp chia, Thăm dò tuyến tính
insert(388) search(47) …insert(130) delete(926)..insert(13) search(47)insert(14) delete(388)insert(926) search(926)insert(47)
17
Thiết Kế & Đánh Giá Thuật Toán
Thăm Dò – Nhận Xét Tuyến tính
Ưu điểm: xét tất cả các vị trí trong mảng Phép chèn luôn thực hiện được, trừ khi mảng đầy
Nhược điểm: Dữ liệu tập trung thành các đoạn Tìm kiếm tuần tự trong từng đoạn
Bình phương Ưu điểm: tránh nhược điểm thăm dò tuyến tính Nhược điểm: không xét tất cả các vị trí trong mảng Phép chèn có thể không thực hiện được
Băm kép Nếu cỡ của mảng và bước thăm dò nguyên tố
cùng nhau thì cho phép tìm đến tất cả các vị trí trongmảng
18
Thiết Kế & Đánh Giá Thuật Toán