HÀM BĂM (HASH FUNCTION) Định nghĩa

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 25 - 27)

1.1. Định nghĩa

Trong hầu hết cỏc ứng dụng, khoỏ được dựng nhưmột phương thức để truy xuất dữ liệu một cỏch giỏn tiếp. Hàm được dựng để ỏnh xạ

một khoỏ vào một dóy cỏc số nguyờn và dựng cỏc giỏ trị nguyờn này

để truy xuất dữ liệu được gọi là hàm băm (hỡnh 2.1)

K h(K)

hỡnh 2.1

Nhưvậy, hàm băm là hàm biến đổi khúa của phần tử thànhđịa chỉ

trờn bảng băm.

Khúa cú thể là dạng số hay số dạng chuỗị Để giải quyết vấn đề băm

với cỏc khoỏ khụng phải là số nguyờn chỳng ta tỡm cỏch biến đổi

khoỏ thành số nguyờn, chẳng hạn:

 loại bỏ dấu ‘-’ trong mó số 9635-8904đưa về số nguyờn 96358904

 Đối với chuỗi, sử dụng giỏ trị cỏc ký tự trong bảng mó ASCCI

 Sauđú sử dụng cỏc hàm băm chuẩn trờn số nguyờn.

Yờu cầu đối với hàm băm tốt

Hàm băm tốt thỏa món cỏcđiều kiện sau:

 Tớnh toỏn nhanh

 Cỏc khoỏđược phõn bố đều trong bảng

 Ít xảy ra đụng độ.

1.2. Vớ dụ về cỏc hàm băm

(i) Hàm băm dạng bảng tra

Hàm băm cú thể tổ chức ở dạng bảng tra (cũn gọi là bảng truy xuất),

thụng dụng nhất làở dạng cụng thức.

CHƯƠNG 2 - BẢNG BĂM (HASH TABLE)

2

Vớ dụ sau đõy là bảng tra với khúa là bộ chữ cỏi, bảng băm cú 26 địa

chỉ từ 0 đến 25. Khúa a ứng với địa chỉ 0, khoỏ b ứng với địa chỉ

1,… , zứng với địa chỉ 25.

Khoỏ Địa chỉKhúa Địa chỉ Khúa Địa chỉ KhúaĐịa chỉ

a 0 h 7 o 14 v 21 b 1 I 8 p 15 w 22 c 2 j 9 q 16 x 23 d 3 k 10 r 17 y 24 e 4 l 11 s 18 z 25 f 5 m 12 t 19 / / g 6 n 13 u 20 / /

Hàm băm dạng bảng trađược tổ chức dưới dạng danh sỏch kề. (adsbygoogle = window.adsbygoogle || []).push({});

(ii) Hàm băm dạng cụng thức

Thụng thường hàm băm dạng cụng thức được xõy dựng theo dạng

tổng quỏt f(key).

Người ta thường dựng hàm băm chia dư(% modulo) nhưcỏc vớ dụ 1

và 2 sau:

Vớ dụ 1: f(key) = key % 10:

Theo vớ dụ này, hàm băm f(key) sẽ băm cỏc số nguyờn thành 10 địa

chỉ khỏc nhau (ỏnh xạ vào cỏc địa chỉ từ 0, 1,…, 9). Cỏc khúa cú

hàngđơn vị là 0được băm vàođịa chỉ 0, cỏc khúa cú hàngđơn vị là i (i=0 | 1 | … | 9)được băm vàođịa chỉ thứ ị

Vớ dụ 2: f(key)=key % M:

Hàm băm loại này cho phộp băm cỏc số nguyờn thành M địa chỉ

khỏc nhau (ỏnh xạ vào cỏcđịa chỉ từ 0, 1,… M-1).

Vớ dụ 3: Giả sử cần xõy dựng một hàm băm với tập khúa số là chuỗi

10 kớ tự, tập địa chỉ cú M địa chỉ khỏc nhau .

Cú nhiều cỏchđể xõy dựng hàm băm này, vớ dụ cộng dồn mó ASCII của từng kớ tự, sau đú chia dư(% modulo) cho M.

Thụng thường, hàm băm dạng cụng thức rất đa dạng và khụng bị

ràng buộc bởi một tiờu chuẩn nào cả.

1.3. Xõy dựng hàm băm

(i) Hàm băm sử dụng phương phỏp chia

 Dựng số dư:

o h(k) =kmodm

o klà khoỏ,mlà kớch thước của bảng.

 vấn đề chọn giỏ trị m

m= 2n(khụng tốt)

 nếuchọn m= 2n

thụng thường khụng tốt

h(k) = k mod 2n sẽ chọn cựng n bits cuối của k

mlà nguyờn tố (tốt)

 Gia tăng sự phõn bố đều

 Thụng thường m được chọn là số nguyờn tố gần với 2n o Chẳng hạn bảng ~4000 mục, chọn m= 4093 (ii) Hàm băm sử dụng phương phỏp nhõn  Sử dụng o h(k) = m (k Amod 1) o k là khúa, m là kớch thước bảng, Alà hằng số: 0 < A <1  Chọn m và A (adsbygoogle = window.adsbygoogle || []).push({});

o M thường chọn m =2p

o Sự tối ưu trong việc chọn A phụ thuộc vàođặc trưng của dữ liệụ o Theo Knuth chọn A = 1/2(5 -1) 0.618033987 được xem là tốt. (iii) Phộp băm phổ quỏt  Việc chọn hàm băm khụng tốt cú thể dẫn đến xỏc suất đụng độ lớn.  Giải phỏp:

o Lựa chọn hàm băm h ngẫu nhiờn.

o Chọn hàm bămđộc lập với khúạ

o Khởi tạo một tập cỏc hàm băm H phổ quỏt và từ đú h được chọn ngẫu nhiờn.

 Một tập cỏc hàm băm H là phổ quỏt (universal) nếu với mọi

f, kH và hai khoỏ k, l ta cú xỏc suất: Pr{f(k)=f(l)} <= 1/m

Một phần của tài liệu giáo trình cấu trúc dữ liệu 2 (Trang 25 - 27)