Tải bản đầy đủ (.pdf) (65 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 9 - Trường ĐH Văn Lang

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.29 MB, 65 trang )



GIỚI THIỆU
• Tổ chức lưu trữ thơng tin 100 nhân viên của một cơng ty ABC,
mỗi nhân viên có mã số riêng EMP_ID trong phạm vi [0, 99]
• Ta có thể dùng mảng để lưu trữ với EMP_ID là chỉ mục tương
ứng trong mảng.
Dữ liệu 

An

Bình

Minh



Ngọc

EMP_ID 

0

1

2



99


KHOA CƠNG NGHỆ THƠNG TIN

3


GIỚI THIỆU
• Tổ chức lưu trữ thơng tin 100 nhân viên của một cơng ty ABC, mỗi
nhân viên có mã số riêng EMP_ID trong phạm vi [00000, 99999]

• Ta cần một mảng có 100,000 phần tử để lưu trữ với EMP_ID là chỉ
mục tương ứng trong mảng.

Dữ liệu 

An

Bình

Minh



Ngọc



EMP_ID 

00000


00001

00002



99



99999

 Tốn nhiều khơng gian lưu trữ

KHOA CƠNG NGHỆ THƠNG TIN

4


GIỚI THIỆU
• Cần giải pháp khác để lưu trữ 100 nhân viên với EMP_ID có
phạm vi [00000, 99999]
• Cần có hàm chuyển EMP_ID có 5 số về EMP_ID có 2 số (hàm
băm)
• Cần có mảng ánh xạ mỗi khóa EMP_ID 5 số tới vị trí trong
mảng EMP_ID 2 số. (Bảng băm)

KHOA CÔNG NGHỆ THÔNG TIN

5



BẢNG BĂM
• Bảng băm là một cấu trúc dữ liệu mà các khóa được ánh xạ
đến các vị trí trong mảng thơng qua một hàm băm.
• Trong bảng băm, một phần tử có khóa k được lưu tại chỉ mục
có hàm băm h(k) chứ khơng phải vị trí k.

• Q trình ánh xạ các khóa vào vị trí phù hợp trong bảng băm
gọi là hashing.
• Khi hai khóa có cùng vị trí trong bảng băm gọi là xung đột
(collision)
KHOA CƠNG NGHỆ THÔNG TIN

6


BẢNG BĂM
• Bảng băm là một cấu trúc dữ liệu mà các khóa được ánh xạ
đến các vị trí trong mảng thơng qua một hàm băm.

KHOA CƠNG NGHỆ THƠNG TIN

7


HÀM BĂM
• Hàm băm là một cơng thức tốn học khi áp dụng ánh xạ cho khóa k
sẽ tạo ra một số nguyên dùng làm chỉ mục trong bảng băm.
• Một hàm băm tốt thỏa mãn các điều kiện sau

1. Tính tốn nhanh
2. Các khóa được phân bố đều trong bảng
3. Ít xảy ra xung đột
4. Xử lý các loại khóa có kiểu dữ liệu khác nhau
KHOA CƠNG NGHỆ THƠNG TIN

8


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
1. Phương pháp chia
h(x) = x % M
VD: tính giá trị băm cho các khóa 1234 ; 5462, 2362
M = 10 (chọn số chẵn – kích thước bảng)
h(1234) = 1234 % 10 = 4
h(5462) = 5462 % 10 = 2
h(2362) = 2362 % 10 = 2
KHOA CÔNG NGHỆ THÔNG TIN

Xung đột
9


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
1. Phương pháp chia
h(x) = x % M
VD: tính giá trị băm cho các khóa 1234 ; 5462, 2362
M = 5 (Chọn số lẻ – kích thước bảng)
h(1234) = 1234 % 5 = 4
h(5462) = 5462 % 5 = 2

h(2362) = 2362 % 5 = 2
KHOA CÔNG NGHỆ THÔNG TIN

Xung đột
10


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
1. Phương pháp chia
h(x) = x % M
VD: tính giá trị băm cho các khóa 1234 ; 5462, 2362
M = 97 (Chọn số nguyên tố – gần kích thước bảng)
h(1234) = 1234 % 97 = 70
h(5462) = 5462 % 97 = 30
h(2362) = 2362 % 97 = 34
KHOA CƠNG NGHỆ THƠNG TIN

Khơng xung đột
11


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
1. Phương pháp chia
• Chỉ sử dụng một phép chia nên tốc độ tính tốn nhanh

• Cần chọn M cho phù hợp
 Nếu chọn M là số chẳn thì h(x) sẽ cho số chẳn
 Nếu chọn M là số lẻ thì h(x) sẽ cho số lẻ

KHOA CÔNG NGHỆ THÔNG TIN


12


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
1. Phương pháp chia
• Việc chọn M là số nguyên tố giúp tạo các khóa phân bố đồng nhất.
• M là số nguyên tố gần với 2k vì nếu chọn bằng 2k :
h(x) = x % 2k
Khi đó h(x) sẽ chọn giá trị là k bit cuối cùng của x.
Ví dụ: x = 15 (1111), M = 8 (23)
 h(15) = 15 % 8 = 7 (111)
KHOA CÔNG NGHỆ THÔNG TIN

13


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
2. Phương pháp nhân
• Thực hiện 4 bước

B1 : Chọn một hằng số A sao cho 0 < A < 1
B2 : Nhân khóa x * A
B3 : Trích phần phân số của x * A
B4 : Nhân kết quả B3 với M là kích thước bảng băm

KHOA CÔNG NGHỆ THÔNG TIN

14



CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
2. Phương pháp nhân
h(x) = M * (x * A mod 1)

Trong đó,
(x * A mod 1) trích phần thập phân của x * A
M là kích thước bảng băm

KHOA CƠNG NGHỆ THƠNG TIN

15


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
2. Phương pháp nhân
h(x) = M * (x * A mod 1)

Chọn A phù hợp để hàm băm hiệu quả
A : thường chọn theo đề xuất của Knuth là tốt nhất
A=

5−1
2

= 0.617385

KHOA CÔNG NGHỆ THÔNG TIN

16



CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
2. Phương pháp nhân
h(x) = M * (x * A mod 1)
Ví dụ: Cho A = 0.618033; M = 1000. Tính x = 12345
h(12345) = 1000 * (12345 * 0.618033 mod 1)
= 1000 * (7629.617385 mod 1)
= 1000 * (0.617385)
= 617.385 = 617
KHOA CÔNG NGHỆ THÔNG TIN

17


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
3. Phương pháp bình phương trung bình
Thực hiện 2 bước

B1 : Tính bình phương khóa x : x2
B2 : Trích r chữ số ở giữa x2

KHOA CÔNG NGHỆ THÔNG TIN

18


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
3. Phương pháp bình phương trung bình
Ví dụ: M = 100 có phạm vi [0, 99]


r = length(M) - 1 = 2
Tính giá trị băm cho 1234; 5462
x = 1234, x2 = 1522756, h(1234) = 27
x = 5462, x2 = 31832164, h(5642) = 21

KHOA CÔNG NGHỆ THÔNG TIN

19


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
4. Phương pháp gấp
Thực hiện 2 bước

B1: Chia khóa x thành nhiều phần x1, x2, …, xn , mỗi phần có
cùng số chữ số. Riêng phần cuối xn có thể ít hơn.
B2: Cộng các thành phần x1 + x2 + … + xn

KHOA CÔNG NGHỆ THÔNG TIN

20


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
4. Phương pháp gấp
Kích thước chọn chiều dài mỗi phần được chia tùy thuộc vào độ
dài của bảng băm.
Ví dụ: bảng băm có 100 phần tử  length(x1) = 2
Bảng băm có 100 phần tử  length(x1) = 3


KHOA CÔNG NGHỆ THÔNG TIN

21


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
4. Phương pháp gấp
Kích thước chọn chiều dài mỗi phần được chia tùy thuộc vào độ
dài của bảng băm.
Ví dụ:
Bảng băm có 100 phần tử  length(x1) = length(100) - 1 = 2

Bảng băm có 1000 phần tử  length(x1) = length(1000) – 1 = 3

KHOA CÔNG NGHỆ THÔNG TIN

22


CÁC PHƯƠNG PHÁP TẠO HÀM BĂM
4. Phương pháp gấp
Ví dụ: Cho bảng băm có 100 vị trí, tính khóa cho 5678, 321,
34567
p = length(100) - 1 = 2
Khóa x

5678

321


34567

Thành phần tách

56 và 78

32 và 1

34, 56 và 7

Tổng

134

33

97

p = 2 và h(x)

34

33

97

KHOA CÔNG NGHỆ THÔNG TIN

23



XUNG ĐỘT
Xảy ra xung đột khi
x1 <> x2 nhưng h(x1) = h(x2)

Có 2 loại phương pháp xử lý xung đột
1. Sử dụng bảng băm địa chỉ mở
2. Bảng băm chuỗi

KHOA CÔNG NGHỆ THÔNG TIN

24


XỬ LÝ XUNG ĐỘT – BẢNG BĂM MỞ
• Khi xảy ra xung đột, bảng băm địa chỉ mở sẽ tính vị trí trống
trong bảng sử dụng số lần dị tìm.
• Tất cả giá trị được lưu trong bảng băm.
• Bảng băm gồm 2 loại giá trị: phần tử cầm canh (-1) và giá trị dữ
liệu (data)
• Phần tử cầm canh cho biết vị trí đó đang trống
• Q trình kiểm tra vị trí cịn trống hay khơng gọi là số lần dị tìm
KHOA CƠNG NGHỆ THƠNG TIN

25


×