Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
Số trang: 14
Loại file: pdf
Dung lượng: 339.41 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm" cung cấp cho người học các kiến thức: Hàm băm, một số phương pháp xây dựng hàm băm, bảng băm - Hash table. Cuối phần bài giảng có phần bài tập để người học ôn tập và củng cố kiến thức.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm 3. Tìm kiếm theo địa chỉ *** Bảng băm - Hash Tables 0 1 025-612-0001 2 981-101-0002 3 4 451-229-0004© 2004 Goodrich, TamassiaI. Hàm bămCấu trúc hàm băm Hàm băm có dạng như sau: h K 0 h : K 0..m-1 x y 1 2 Trong đó: 3 z … - h được gọi là hàm băm (hash function) m-1 - K là tập giá trị khóa - 0..m-1 là bảng địa chỉ (là các số nguyên) - m là kích thước của bảng Yêu cầu khi xây dựng hàm băm: Hàm phải dải đều các địa chỉ trên bảng địa chỉ Hàm băm phải được tính toán đơn giản. 2 Hình ảnh hàm băm 0 h(k1) 1 h(k3)K h(k) k1 h(k2) k3 k2 … N-1 3Hàm băm Các đối tượng Hàm băm Bảng địa 012 … N-1 chỉ Một hàm băm ánh xạ các đối tượng vào tập các địa chỉ [0, N-1] 4II. Một số phương pháp xây dựnghàm băm 1. Phương pháp chia Để tính địa chỉ dải của đối tượng ta lấy giá trị khóa chia cho kích thước của bảng. Địa chỉ dải là phần dư của phép chia đó. h(k) = k % m Yêu cầu: Hàm h phải dải đều các đối tượng trên bảng một cách ngẫu nhiên. Để có được điều đó h phải phụ thuộc vào m. Phụ thuộc vào m Thông thường người ta chọn m là một số nguyên tố nhỏ hơn gần với (10, 100, 1000,...) nhất. 52. Phương pháp nhân Giá trị khóa được nhân với chính nó sau đó lấy con số bao gồm một số chữ số ở “giữa” kết quả để làm “địa chỉ rải”. Ví dụ: k k2 h(k) gồm 3 chữ số 5402 29181604 181 hoặc 816 0367 00134689 134 hoặc 346 1246 01552516 552 hoặc 525 Rõ ràng các chữ số ở giữa phụ thuộc vào mọi chữ số của khóa do đó nếu khóa có khác nhau chút ít thì địa chỉ dải vẫn khác nhau nhiều. 63. Phương pháp phân đoạn Giá trị khóa được phân ra thành nhiều đoạn bằng nhau Người ta sử dụng hai kỹ thuật phân đoạn sau đây: Tách: Tách các đoạn ra và mỗi đoạn được xếp thành một hàng, dóng lề trái hoặc lề phải. Gấp: Gấp các đoạn lại theo đường biên tương tự như gấp giấy, các chữ rơi vào cùng một chỗ được đặt thành hàng thẳng nhau. 7Ví dụ: Tách: giả sử có khóa là k = 17046329 329 + 046 017 392 Gấp: 046 + 923 710 Chọn 167 1679 hoặc 679 8III. Bảng băm - Hash table Một bảng băm là một cấu trúc dựa trên mảng để lưu trữ các phần tử, mỗi phần tử là một cặp Khóa-Giá trị (key-value) Các thành phần cấu thành lên bảng băm Mảng chứa Mỗi phần tử mảng quản lý một danh sách các phần tử có khóa qua ánh xạ h cho cùng một địa chỉ. Hàm băm h(k) - Hash function, h(k) Mã băm 9Giả sử có hàm h(k) = k % 5Có các giá trị: 11, 21, 44, 23, 41, 4, 34, 12 Thùng 0 chứa 1 11-21-41 2 12 3 23 4 44-4-34 ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm 3. Tìm kiếm theo địa chỉ *** Bảng băm - Hash Tables 0 1 025-612-0001 2 981-101-0002 3 4 451-229-0004© 2004 Goodrich, TamassiaI. Hàm bămCấu trúc hàm băm Hàm băm có dạng như sau: h K 0 h : K 0..m-1 x y 1 2 Trong đó: 3 z … - h được gọi là hàm băm (hash function) m-1 - K là tập giá trị khóa - 0..m-1 là bảng địa chỉ (là các số nguyên) - m là kích thước của bảng Yêu cầu khi xây dựng hàm băm: Hàm phải dải đều các địa chỉ trên bảng địa chỉ Hàm băm phải được tính toán đơn giản. 2 Hình ảnh hàm băm 0 h(k1) 1 h(k3)K h(k) k1 h(k2) k3 k2 … N-1 3Hàm băm Các đối tượng Hàm băm Bảng địa 012 … N-1 chỉ Một hàm băm ánh xạ các đối tượng vào tập các địa chỉ [0, N-1] 4II. Một số phương pháp xây dựnghàm băm 1. Phương pháp chia Để tính địa chỉ dải của đối tượng ta lấy giá trị khóa chia cho kích thước của bảng. Địa chỉ dải là phần dư của phép chia đó. h(k) = k % m Yêu cầu: Hàm h phải dải đều các đối tượng trên bảng một cách ngẫu nhiên. Để có được điều đó h phải phụ thuộc vào m. Phụ thuộc vào m Thông thường người ta chọn m là một số nguyên tố nhỏ hơn gần với (10, 100, 1000,...) nhất. 52. Phương pháp nhân Giá trị khóa được nhân với chính nó sau đó lấy con số bao gồm một số chữ số ở “giữa” kết quả để làm “địa chỉ rải”. Ví dụ: k k2 h(k) gồm 3 chữ số 5402 29181604 181 hoặc 816 0367 00134689 134 hoặc 346 1246 01552516 552 hoặc 525 Rõ ràng các chữ số ở giữa phụ thuộc vào mọi chữ số của khóa do đó nếu khóa có khác nhau chút ít thì địa chỉ dải vẫn khác nhau nhiều. 63. Phương pháp phân đoạn Giá trị khóa được phân ra thành nhiều đoạn bằng nhau Người ta sử dụng hai kỹ thuật phân đoạn sau đây: Tách: Tách các đoạn ra và mỗi đoạn được xếp thành một hàng, dóng lề trái hoặc lề phải. Gấp: Gấp các đoạn lại theo đường biên tương tự như gấp giấy, các chữ rơi vào cùng một chỗ được đặt thành hàng thẳng nhau. 7Ví dụ: Tách: giả sử có khóa là k = 17046329 329 + 046 017 392 Gấp: 046 + 923 710 Chọn 167 1679 hoặc 679 8III. Bảng băm - Hash table Một bảng băm là một cấu trúc dựa trên mảng để lưu trữ các phần tử, mỗi phần tử là một cặp Khóa-Giá trị (key-value) Các thành phần cấu thành lên bảng băm Mảng chứa Mỗi phần tử mảng quản lý một danh sách các phần tử có khóa qua ánh xạ h cho cùng một địa chỉ. Hàm băm h(k) - Hash function, h(k) Mã băm 9Giả sử có hàm h(k) = k % 5Có các giá trị: 11, 21, 44, 23, 41, 4, 34, 12 Thùng 0 chứa 1 11-21-41 2 12 3 23 4 44-4-34 ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Cấu trúc dữ liệu Cấu trúc dữ liệu và giải thuật Lập trình C++ Kỹ thuật lập trình Ngôn ngữ lập trình Bảng băm Hash tableGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 317 0 0 -
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 276 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 266 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 265 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 232 0 0 -
Bài giảng Một số hướng nghiên cứu và ứng dụng - Lê Thanh Hương
13 trang 226 0 0 -
Giáo án Tin học lớp 11 (Trọn bộ cả năm)
125 trang 218 1 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 207 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 194 0 0 -
Bài tập lập trình Windows dùng C# - Bài thực hành
13 trang 184 0 0