1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu: Bảng băm - TS. Lê Minh Trung & Th.S Lương Trần Ngọc Khiết

32 61 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

Tiêu đề Bảng băm
Tác giả Ts. Lê Minh Trung, Ths Lương Trần Ngọc Khiết
Trường học Đại học Sư phạm TP. HCM
Chuyên ngành Công nghệ Thông tin
Thành phố TP. HCM
Định dạng
Số trang 32
Dung lượng 8,69 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu: Bảng băm cung cấp cho người học những kiến thức như: Hàm băm (hash function); Bảng băm; Đụng độ và xử lí đụng độ; Chuỗi liên kết; Dò tuyến tính/ bậc 2/ băm kép; Kết luận. Mời các bạn cùng tham khảo!

Trang 1

TS Lê Minh Trung – ThS Lương Trần Ngọc Khiết Khoa Công nghệ Thông tin, Đại học Sư phạm TP HCM

Trang 2

Bảng băm (Hash Table)

Hàm băm (hash function)

Trang 3

Bài toán tìm kiếm

Trang 4

Hàm băm (Hash function)

Là hàm ℎ ánh xạ từ tập các khóa (key) K vào 0, 𝑁 − 1

 ℎ: 𝐾 → {0,1,2, … , 𝑁 − 1}

𝑘 ∈ 𝐾, ℎ(𝑘) được gọi là giá trị băm của 𝒌.

Tập các khóa K có thể là tập các chuỗi, các số tự nhiên…

 ℎ: 𝑍+ → [0, 𝑁 − 1] với ℎ 𝑘 = 𝑘 𝑚𝑜𝑑 𝑁

Trang 8

Bảng băm (Hash Table)

Là một bảng (mảng) có kích cỡ hash_size = N.

 N thường được chọn là số nguyên tố

Mẩu tin (record) có khóa là k sẽ được lưu trữ tại vị trí

Trang 9

(các khóa

thật sự dùng)

Trang 10

K (các khóa

thật sự dùng)

Đụng độ

Trang 11

Ví dụ bảng băm

Thêm vào các khóa 51, 24, 37, 42, 88.

1 2 3 4 5 6 7 8 9

51

24

37 42

88

Tìm 37

Tìm 62

Trang 12

Đụng độ

Làm thế nào để giải quyết đụng độ???

Chuỗi liên kết (chaining)

Địa chỉ mở (open addressing)

0 1 2 3 4 5 6 7 8 9

51

24

37 42

88

Thêm khóa 5454

Đụng độ

Trang 13

Chuỗi liên kết

Đặt các khóa có cùng giá trị băm (hash value) trong cùng

một danh sách liên kết gắn với một ô của bảng băm.

K (actual

Trang 15

Chuỗi liên kết

Xóa một phần tử như thế nào?

Có thể sử dụng danh sách liên kết đôi để xóa hiệu quả hơn?

Trang 17

Chuỗi liên kết- Ví dụ

Thêm 24, 51, 88,42, 37 0

1 2 3 4 5 6 7 8 9

51

24

37 42

88

NULL NULL

NULL NULL NULL NULL NULL NULL NULL

Trang 18

Lợi ích của phương pháp chuỗi liên kết

 Nếu số lượng mẫu tin lớn: tiết kiệm vùng nhớ.

 Giải quyết đụng độ: đơn giản là đẩy vào cùng một

danh sách liên kết.

 Bảng băm nhỏ hơn nhiều so với số lượng mẫu tin.

 Xóa một phần tử là đơn giản và nhanh chóng.

 Độ phức tạp khi tìm kiếm:

 Nếu có n mẫu tin, và bảng hash có kích thước N

 Độ dài trung bình của DSLK là n/N

Trang 19

Địa chỉ mở (Open Addressing)

Thêm phần tử vào có khóa k vào

 Nếu ô h(k) đầy  tìm ô kế tiếp… tìm được một ô chưa đầy  thêm phần tử có khóa k vào (probing –thăm dò)

Các kĩ thuật dò tìm: linear/quadratic/double hashing…

Tìm kiếm phần tử có khóa k

 Bắt đầu tìm từ ô h(k) nếu chưa tìm thấy, tìm tại ô kếtiếp  … cho đến ô cuối

Trang 20

Phương pháp thăm dò

Trả lời câu hỏi: ô kế tiếp sẽ được thăm dò là ô nào?

1. Thăm dò tuyến tính (Linear Probing)

2. Thăm dò bậc 2 (Quadratic Probing)

3. Thăm dò băm kép (double hashing)

Trang 22

24

37 42

Not Found

Việc tìm kiếm sẽ kết thúc khi

 Tìm thấy khóa cần tìm

 Gặp một ô trống

 Số lần thăm dò = N-1

Trang 23

Thăm dò bậc 2

Ô thứ i được thăm dò có chỉ số

 h(k,i) = (h(k) + c*i2 + d) mod N

 Thông thường (c,d) = (1,0) hay (1,1)

Nếu c=1, d=0 thì các ô được thăm dò lần lượt là

 h= h(k), (h + 12) mod N , (h+ 22) mod N, (h + 32) mod N,…

Nếu N là số nguyên tố thì

Các ô được thăm dò sẽ lặp lại sau (N+1)/2 bước

Trang 25

24

37 42

88

Thêm 61

(i=2)

Xung đột

61

Thêm 98 (i=1)

98

Thêm 108 (i=5)

108

Tìm 108

(i=5)

Tìm 47 i=3 gặp ô trống Not

Trang 28

Chọn hàm băm

 Chọn hàm băm là phần quan trọng trong quá trình băm

Hàm được chọn tốt sẽ cho ra các chỉ số được phân bố

đều trên bảng băm  ít xung đột

Nếu hàm chọn không tốt dữ liệu sẽ co cụm trên một vài

phần nào đó của bảng  xung đột nhiều

Với mỗi phương pháp, chọn hàm băm đều có các tiêu chí

để hàm cho ra phân bố đều

Trang 29

Đánh giá phương pháp dùng bảng Hash

load factor λ = số khóa/kích thước bảng hash=n/N

Tìm kiếm với bảng băm chuỗi nối kết:

 1+(1/2)λ phép thử khi tìm thấy

 λ phép thử khi không tìm thấy

Tìm với bảng hash địa chỉ mở (dò ngẫu nhiên):

 (1/λ)ln (1/(1-λ)) phép thử khi tìm thấy

 1/(1-λ) phép thử khi không tìm thấy

Tìm với bảng hash địa chỉ mở (dò tuyến tính):

 (1/2)(1 + 1/(1-λ)) phép thử khi tìm thấy

 (1/2)(1 + 1/(1-λ)2) phép thử khi không tìm thấy

Trang 30

So sánh các phương pháp

Trang 31

So sánh các phương pháp (tt.)

Trang 32

CÁM ƠN VÌ ĐÃ LẮNG NGHE!

Ngày đăng: 09/08/2021, 17:44

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w