Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
479,27 KB
Nội dung
Cấu trúc liệu giải thuật Bài 22: Hàm băm Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University Bài 22: Hàm băm Nội dung: 22.1 Bài toán 22.2 Hàm băm 22.3 Giải xung đột 22.4 Một số ví dụ sử dụng hàm băm @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (1/9) Giả sử cần lưu trữ số ghi thực thao tác: Thêm: thêm ghi Xóa: xóa ghi Tìm kiếm: tìm kiếm ghi Hãy đưa cách tổ chức để thực hiệu công việc @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (2/9) – Sử dụng mảng Sử dụng mảng không xếp Thêm: thêm vào cuối mảng->O(1) Xóa: nhiều thời gian tìm vị trí cần xóa dồn mảng->O(n) Tìm kiếm: tìm kiếm tuần tự->O(n) Sử dụng mảng xếp Thêm: phải tìm vị trí thêm vào->O(n) Xóa: nhiều thời gian tìm vị trí cần xóa dồn mảng->O(n) Tìm kiếm: tìm kiếm nhị phân->O(log(n)) @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (3/9) – Sử dụng DSLK Thêm: thêm vào vị trí nhanh->O(1) Xóa: nhanh tổ chức nút, chậm tìm kiếm nút cần khóa->O(n) Tìm kiếm: tìm kiếm tuần tự->O(n) @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (4/9) – dùng bảng Giả sử cần lưu trữ 1000 ghi sinh viên tìm kiếm chúng theo ID Họ tên Điểm 0012345 Nguyễn Văn A 10 0033333 Nguyễn Văn B 0056789 Nguyễn Văn C … … 9801010 Nguyễn Thị A 9802020 Nguyễn Thị B … … 9903030 Trần Văn A 9908080 Trần Văn B 10 ID … … @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (5/9) – dùng bảng Dùng mảng lớn để lưu trữ (index 9999999) Chỉ số mảng với số id sinh viên, i.e ví dụ sinh viên với studid 0012345 lưu trữ A[12345] Tên Điểm … … Nguyễn Văn A 10 … … Nguyễn Văn B … … Nguyễn Văn C … … Nguyễn Thị A … … Nguyễn Thị B … … … 9999999 … … … 12345 … 33333 … 56789 … 9801010 … 9802020 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (6/9) – dùng bảng Một số nhận xét: Đánh giá thao tác Thêm: nhanh O(1) Xóa: nhanh O(1) Tìm kiếm: nhanh O(1) Nhưng tốn nhớ->không hiệu @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (7/9) – dùng hàm băm function Hash(key: KeyType): integer; Giả sử có hàm băm lý tưởng Nó ánh xạ khóa (ID) 1000 ghi vào giá trị nguyên 999, hai khóa khác cho hai số nguyên H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9908080’) = khác @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (8/9) – dùng hàm băm • Để lưu trữ ghi, tính Hash(ID) cho ghi lưu trữ vị trí Hash(ID) mảng •Để tìm kiếm sinh viên, cần truy cập đến vị trí Hash(target ID) 10 … … … … … Trần Văn B 10 … … … 67 Nguyễn Văn B … … … 134 Nguyễn Văn A 10 … … … 764 Nguyễn Văn C … … … 999 … … @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.1 Bài toán (9/9) – dùng hàm băm Với hàm băm lý tưởng Thêm: O(1) Xóa: O(1) Tìm kiếm: O(1) Nói chung khó thiết kế hàm băm lý tưởng 11 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (1/6) Khái niệm: Hàm băm giải thuật nhằm sinh giá trị băm tương ứng với khối liệu Giá trị băm đóng vai gần khóa để phân biệt khối liệu Hàm băm thường dùng bảng băm nhằm giảm chi phí tính tốn tìm khối liệu tập hợp 12 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (2/6) Yêu cầu hàm băm: Tính tốn nhanh Các khóa phân bố bảng Ít xảy đụng độ Xử lý loại khóa có kiểu khác 13 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (3/6) Một số lĩnh vực sử dụng hàm băm: Mật mã học Bảng băm Phát sửa lỗi liệu Nhận dạng âm 14 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (4/6) – Một số hàm băm Hàm cắt bỏ: Cho khóa số nguyên, bỏ bớt phần khóa Ví dụ: khóa số nguyên có chữ số x=842615 Ta quy ước bỏ bớt chẳng hạn chữ số hàng lẻ (1,3,5…), số lại 821 Vậy H(x) = H(842615) = 821 Nhận xét: Hàm cắt bỏ thỏa mãn tính chất thứ hàm băm tính chất thứ hai khó thực (khó có phân bố đều) 15 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (5/6) – Một số hàm băm Hàm phần dư: Khóa có giá trị nguyên bảng băm B có m phần tử, ta lấy phần dư phép chia x/m làm giá trị hàm băm Để đảm bảo tính chất thứ hai hàm băm nên chọn m số nguyên tố Nhận xét: Các cách lấy phần dư cho khả tránh tượng xung đột tốt 16 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.2 Hàm băm (6/6) – Một số hàm băm Hàm gấp: Cho khóa số nguyên, chia số nguyên thành số đoạn tùy chọn, sau kết hợp phần lại theo quy ước Ví dụ: Số hàng lẻ: 465 số hàng chẵn: 821, H(x)=465+821=1286 Nhận xét: Tính chất thứ hàm băm thỏa mãn Do chữ số khóa có sử dụng, nên tính chất thứ hai thỏa mãn tốt với trường hợp dùng hàm băm cắt bỏ 17 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.3 Xung đột giải xung đột (1/4) Trong hầu hết trường hợp không tránh xung đột H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 … H(‘9903030’) = H(‘9908080’) = • Xử lý hai khóa khác lại ánh xạ đến địa chỉ? 18 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.3 Xung đột giải xung đột (2/4) Phương pháp dị tuyến tính: ý tưởng dị tìm vị trí trống chèn phần tử bị đụng độ vào Khi mảng đầy resize lại mảng Phương pháp dây chuyền: Thay cố gắng tìm danh sách vị trí trống kế tiếp, phương pháp dây chuyền liên kết danh sách có khóa khác có giá trị hàm băm thành danh sách 19 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.3 Xung đột giải xung đột (3/4) Phương pháp dị tuyến tính: Insert: 89, 18, 49, 58, to table size=10, hash function is: %tablesize 49 49 49 58 58 89 20 18 18 18 18 89 89 89 89 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.3 Xung đột giải xung đột (4/4) Phương pháp dây chuyền: null null null : HASHMAX null 21 ID: 9903030 Tên: Trần Văn A Điểm: @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22.4 Một số ví dụ sử dụng hàm băm Xây dựng từ điển sử dụng hàm băm 22 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University .. .Bài 22: Hàm băm Nội dung: 22. 1 Bài toán 22. 2 Hàm băm 22. 3 Giải xung đột 22. 4 Một số ví dụ sử dụng hàm băm @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22. 1 Bài toán... University 22. 2 Hàm băm (1/6) Khái niệm: Hàm băm giải thuật nhằm sinh giá trị băm tương ứng với khối liệu Giá trị băm đóng vai gần khóa để phân biệt khối liệu Hàm băm thường dùng bảng băm nhằm... University 22. 2 Hàm băm (3/6) Một số lĩnh vực sử dụng hàm băm: Mật mã học Bảng băm Phát sửa lỗi liệu Nhận dạng âm 14 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 22. 2 Hàm băm