1. Trang chủ
  2. » Giáo Dục - Đào Tạo

cấu trúc dữ liệu Hashing

17 148 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 224,44 KB

Nội dung

tài liệu uy tín được biên soạn bởi giảng viên đại học Bách Khoa TPHCM, thuận lợi cho qua trình tự học, nghiên cứu bộ tự động hóa, điện tử, cơ điện tử, cơ khí chế tạo máy, lập trình nhúng, Tài liệu được kiểm duyệt bởi giảng viên, phòng đào tạo trường đại học bách khoa, lưu hành nội bộ

Trang 1

Chương 8

Băm và bảng băm

(Buổi 14, 15)

Trang 2

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

2

Nguyễn Trung Trực

™ Định nghĩa băm (hashing)

™ Hàm băm (hash function)

™ Giải quyết đụng độ (collision-resolution)

™ Phương pháp nối kết (bucket hashing,

separate chaining)

™ Phương pháp địa chỉ mở (open addressing)

Giới thiệu

Trang 3

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

3

Nguyễn Trung Trực

™ Phép biến đổi khóa (key transformation), còn

được gọi là băm (hashing), là một phương

pháp tham chiếu trực tiếp một phần tử trong một bảng dựa vào biến đổi số học trên khóa

(key) của phần tử này để có được địa chỉ của

nó trong bảng.

Định nghĩa băm

Trang 4

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

4

Nguyễn Trung Trực

™ Phép biến đổi khóa là một ánh xạ thích hợp H

từ tập các khóa K vào tập các địa chỉ A.

H: K → A

f Ánh xạ H được gọi là hàm băm (hash fuction).

f Hàm băm là một hàm nhiều – một (nhiều giá trị

khóa tương ứng với một địa chỉ).

Định nghĩa băm

Trang 5

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

5

Nguyễn Trung Trực

Định nghĩa băm

Tập khóa Bảng băm

Hình 8.1 Phép biến đổi khóa (băm)

Hàm băm

Đụng độ giữa key2

và key3

Trang 6

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

6

Nguyễn Trung Trực

™ Phép biến đổi khóa (băm) bao gồm hai bước:

f Bước 1: Tính toán hàm băm H để biến đổi khóa

cần tìm thành địa chỉ trong bảng băm.

f Bước 2: Quá trình giải quyết đụng độ

(collision-resolution process) cho các khóa khác nhau có

cùng địa chỉ trong bảng băm.

Định nghĩa băm

Trang 7

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

7

Nguyễn Trung Trực

™ Hàm băm (hash function) là hàm biến đổi một

khóa thành một địa chỉ trong bảng băm (hash table).

™ Hàm băm phải là hàm phân bố đều tập các

khóa vào tập các địa chỉ trong bảng băm.

f Gọi M là số phần tử của bảng băm (M là số nguyên

tố), hàm băm biến đổi các khóa (thường là số nguyên hoặc chuỗi ký tự) thành các số nguyên từ

0 đến M-1.

f Nếu khóa là số nguyên, hàm băm có thể là:

H(key) = key % M

Hàm băm

Trang 8

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

8

Nguyễn Trung Trực

f Nếu khóa là chuỗi ký tự, dùng phương pháp

Horner để tính giá trị của hàm băm Gọi n là số ký

tự của khóa, key[i] là ký tự thứ i của khóa key.

Hàm băm

h = key[0];

for (i = 1; i < n; i++)

h = ((h * 37) + key[i]) % M;

Trang 9

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

9

Nguyễn Trung Trực

Giải quyết đụng độ

™ Trường hợp đụng độ xảy ra khi các khóa khác

nhau cùng cùng giá trị hàm băm (cùng địa chỉ).

™ Các phương pháp giải quyết đụng độ:

f Phương pháp nối kết

f Phương pháp địa chỉ mở

™ Nếu hàm băm là hàm lấy số dư (modulo) thì số

phần tử (kích thước) M của bảng băm nên là một số nguyên tố.

Trang 10

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

10

Nguyễn Trung Trực

Phương pháp nối kết (Bucket Hashing)

™ Bảng băm là một mảng.

™ Mỗi phần tử của bảng băm chứa tham chiếu

đến một danh sách liên kết (hoặc cây tìm kiếm) chứa các khóa có cùng giá trị hàm băm.

Trang 11

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

11

Nguyễn Trung Trực

Phương pháp nối kết

Hình 8.2 Bảng băm theo phương pháp nối kết

Trang 12

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

12

Nguyễn Trung Trực

Phương pháp địa chỉ mở

™ Phương pháp địa chỉ mở (open addressing): tất

cả các khóa đều chứa trong một bảng băm.

™ Khi có đụng độ xảy ra, ta đến phần tử kế tiếp

cho đến khi tìm thấy khóa cần tìm hoặc phần tử

kế tiếp là phần tử trống (không chứa bất kỳ khóa nào).

™ Bảng băm phải có ít nhất một phần tử trống.

™ Bảng băm bị đầy khi chỉ còn một phần tử

trống.

Trang 13

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

13

Nguyễn Trung Trực

Phương pháp địa chỉ mở

1 2 3 4 5 12

0 1 2 3 4 5 6 7 8 9 10 Hình 8.3 Bảng băm theo phương pháp địa chỉ mở

Trang 14

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

14

Nguyễn Trung Trực

Phương pháp địa chỉ mở

™ Gọi k 0 , k 1 , …, k i là các vị trí tìm kiếm.

™ Phương pháp địa chỉ mở có hai loại:

f Phương pháp thử tuyến tính (linear probing):

k 0 = H(key)

k i = (k 0 + i) % M

f Phương pháp thử bậc hai (quadratic probing):

k 0 = H(key)

k i = (k 0 + i 2 ) % M

Trang 15

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

15

Nguyễn Trung Trực

Phương pháp thử tuyến tính

™ Tìm kiếm một khóa trong bảng băm

f Nếu phần tử hiện tại chứa khóa cần tìm: tìm thấy.

f Nếu phần tử hiện tại là phần tử trống: không tìm

thấy.

f Nếu phần tử hiện tại khác trống và không chứa

khóa cần tìm: đến phần tử kế tiếp.

Trang 16

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

16

Nguyễn Trung Trực

Phương pháp thử tuyến tính

™ Loại bỏ một phần tử

f Để tránh trường hợp khóa cần tìm có trong bảng

băm nhưng sẽ không tìm thấy khóa này, khi loại

bỏ một khóa ở vị trí k thì ta phải di chuyển phần tử khác trống kế tiếp i về vị trí này.

f Điều kiện để di chuyển một phần tử khác trống kế

tiếp i về vị trí trống k nếu r = H(HashTab[i]) nằm ngoài vùng vòng từ vị trí k đến vị trí i, tức là r

không thỏa mãn các trường hợp:

j < r ≤ k r ≤ k < j k < j < r

Trang 17

Trường Đại học Bách Khoa Tp.HCM

Khoa Khoa học và Kỹ thuật Máy tính

© 2015

Cấu trúc dữ liệu và Giải thuật Chương 8: Băm và bảng băm

17

Nguyễn Trung Trực

Phương pháp thử tuyến tính

j < r ≤ k

j r k

r ≤ k < j

r k j

k

j r

k < j < r

Hình 8.4 Ba trường hợp di chuyển các phần tử của bảng băm

Ngày đăng: 03/02/2018, 08:23

TỪ KHÓA LIÊN QUAN

w