Giáo trình Thiết kế & Đánh giá thuật toán - Bài giảng 8: Bảng băm - Lê Nguyên Khôi

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ò h_2 k nguyên tố cùng nhau thì cho phép tìm đến tất cả các vị trí trong mảng

pdf19 trang | Chia sẻ: thucuc2301 | Lượt xem: 659 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Giáo trình Thiết kế & Đánh giá thuật toán - Bài giảng 8: Bảng băm - Lê Nguyên Khôi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Thiết Kế & Đánh Giá Thuật Toán Bả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 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 Bài Toán Từ Điển  Nếu khóa của dữ liệu là số nguyên không âm trong khoảng 0 − 1 , 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 (1)  Thực tế không khả thi  Số phần tử dữ liệu có thể rất nhỏ so với số 64-bit thể hiện 2 (18 × 10) khóa khác nhau Xâ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 Phương Pháp Băm  Lưu dữ liệu trong mảng  0 − 1  Hàm băm ℎ: ánh xạ mỗi giá trị khóa  của dữ liệu tới một chỉ số  (0 ≤  < )  Dữ liệu sẽ được lưu trong []  ℎ:  → {0, 1, , − 1} 4 0 1 i  − 1 Tính địa chỉ Tập các giá trị khoá Hàm băm ℎ Mảng  Phương Pháp Băm  Nếu có  ≠ " thì ℎ() ≠ ℎ("), và tính chỉ số ℎ() trong thời gian (1)  thì các phép toán tìm kiếm, chèn, xóa cũng trong thời gian (1)  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 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 Hàm Băm – Phương Pháp Chia ℎ  =  mod   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ụ 4) + 3  Ví dụ: nếu  = 2,, hàm băm không phụ thuộc vào tất cả các bit của    = 1011000111-..-.-" và / = 6, thì ℎ  = -..-.-" 7 Hàm Băm – Phương Pháp Nhân  = 2,, với máy tính 1-bit. Hàm băm: ℎ() = (2 ·  mod 24) rsh (1– /)  rsh là toán tử “bitwise right-shift”  Toán tử rsh nhanh  2 là số lẻ trong khoảng 249 < 2 < 24  Không chọn 2 quá gần 249 hoặc 24  Phép nhân và phép chia dư 24 nhanh hơn phép chia 8 Hàm Băm – Phương Pháp Nhân ℎ() = (2 ·  mod 24) rsh (1– /)  : = 2, = 8 = 2; với máy tính 1 = 7-bit 1011001 = 2 1101011 =  10010100110011 ℎ  = 011 9 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 Giải Quyết Va Chạm  Nếu dữ liệu = với khóa  đã được lưu tại   vớ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ền Tạ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 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 danh sá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àm băm 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 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  @ = A B = số lượng khóa trung bình tại mỗi vị trí trong bảng băm  14 Dây Chuyền – Tìm Kiếm Trung Bình Thời gian tìm kiếm không thành công = > 1 + @ Thời gian tìm kiếm là > 1 nếu @ = > 1 Thời gian tìm kiếm thành công có tiệm cận tương tự 15 Hàm băm Truy cập vị trí Tìm kiếm danh sách 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ống trong 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ính Dãy thăm dò: ,  + 1,  + 2,  Bình phương Dãy thăm dò: ,  + 1",  + 2",  Băm kép Dãy thăm dò: ℎ() + :ℎ"() với : = 0,1,2, 16 Bài Tập  = 11, 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 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í trong mảng 18

Các file đính kèm theo tài liệu này:

  • pdfthiet_ke_danh_gia_thuat_toanbaigiang08_bangbam_4815_2032095.pdf