Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm - Phan Mạnh Hiển (2020)

7 10 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Bảng băm - Phan Mạnh Hiển (2020)

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

Thông tin tài liệu

• Ánh xạ khóa sang số nguyên (vị trí trong bảng băm) • Nếu nhiều khóa ánh xạ sang cùng một số nguyên. (cùng vị trí trong bảng băm) thì sẽ dẫn đến đụng độ[r]

(1)

Bảng băm

(Hash Tables)

Nguyễn Mạnh Hiển

(2)

Bảng băm

• Các phần tử dạng cặp khóa-giá trị (key-value) • Mỗi phần tử lưu trữ vào ô

mảng tùy theo khóa

• Thực phép tìm/chèn/xóa thời gian O(1) • Khơng hiệu với thao tác địi hỏi thơng tin thứ

tự:

(3)

Ví dụ bảng băm

Mỗi phần tử cặp khóa-giá trị:

- Tên khóa

(4)

So sánh cấu trúc liệu

• So sánh thời gian tìm kiếm:

− Vector danh sách liên kết: O(N) − Cây AVL: O(log N)

(5)

Hàm băm (hash function)

• Ánh xạ khóa sang số ngun (vị trí bảng băm) • Nếu nhiều khóa ánh xạ sang số nguyên

(cùng vị trí bảng băm) dẫn đến đụng độ

− Đụng độ giảm khóa phân bố đồng bảng băm

(6)

Một hàm băm đơn giản

• Gọi:

− key: khóa có giá trị ngun

− tableSize: kích thước bảng băm

• Một hàm băm đơn giản dùng phép chia lấy phần dư: hash(key) = key % tableSize

• Giả sử:

− key = 24, 48, 51, 78, 15 − tableSize = 10

• Thế thì: key % tableSize = 4, 8, 1, 8,

(7)

Một hàm băm cho xâu ký tự

int hash(const string & key, int tableSize) { int hashVal = 0;

for (int i = 0; i < key.size(); i++) hashVal += key[i];

return hashVal % tableSize; }

• Ví dụ:

− tableSize = 100

− key = "ABC" (mã ASCII A, B, C 65, 66, 67) − hashVal = (65 + 66 + 67) % 100 = 198 % 100 = 98 − Nếu key = "CBA" hashVal = ?

• Một hàm băm tốt cho xâu ký tự key = x0x1 xk-2xk-1 sau: hash(key) = (x0*ak−1 + x

1*ak−2 + ··· + xk−2*a + xk−1) % tableSize

Ngày đăng: 11/03/2021, 07:43

Tài liệu cùng người dùng

Tài liệu liên quan