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

Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm

14 91 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 14
Dung lượng 339,41 KB

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 và giải thuật trong C++ - Bài 14: Bảng băm cung cấp cho người học các kiến thức: Hàm băm, một số phương pháp xây dựng hàm băm, bảng băm - Hash table. Cuối phần bài giảng có phần bài tập để người học ôn tập và củng cố kiến thức.

Trang 1

3 Tìm kiếm theo địa chỉ

***

Bảng băm - Hash Tables

0 1 2 3

981-101-0002 025-612-0001

Trang 2

I Hàm băm

Cấu trúc hàm băm

 Hàm băm có dạng như sau:

h : K  0 m-1

 Trong đó:

- h được gọi là hàm băm (hash

function)

- K là tập giá trị khóa

- 0 m-1 là bảng địa chỉ (là các số

nguyên)

- m là kích thước của bảng

 Yêu cầu khi xây dựng hàm

băm:

 Hàm phải dải đều các địa chỉ

trên bảng địa chỉ

 Hàm băm phải được tính toán

đơn giản.

0

m-1

1 2 x

z

3

y

K

h

Trang 3

Hình ảnh hàm băm

k1

0 1

N-1

h(k1) h(k3)

h(k2)

Trang 4

Hàm băm

Một hàm băm ánh xạ các đối tượng vào tập các địa chỉ [0, N-1]

Các đối tượng

Hàm băm

0 1 2 … N-1

Bảng địa chỉ

Trang 5

II Một số phương pháp xây dựng

hàm băm

1 Phương pháp chia

 Để tính địa chỉ dải của đối tượng ta lấy giá trị khóa chia cho kích thước của bảng Địa chỉ dải là phần dư của phép chia đó

h(k) = k % m

 Yêu cầu:

 Hàm h phải dải đều các đối tượng trên bảng một cách ngẫu nhiên Để có được điều đó h phải phụ thuộc vào m

 Phụ thuộc vào m

 Thông thường người ta chọn m là một số nguyên tố nhỏ hơn gần với (10, 100, 1000, ) nhất

Trang 6

2 Phương pháp nhân

Giá trị khóa được nhân với chính nó sau đó lấy con số bao gồm một số chữ số ở “giữa” kết quả để làm “địa chỉ rải”

Ví dụ:

k k2 h(k) gồm 3 chữ

số 5402

0367

1246

29181604 00134689

01552516

181 hoặc 816

134 hoặc 346

552 hoặc 525

Rõ ràng các chữ số ở giữa phụ thuộc vào mọi chữ số của khóa do đó nếu khóa có khác nhau chút ít thì địa chỉ dải vẫn khác nhau nhiều

Trang 7

3 Phương pháp phân đoạn

Giá trị khóa được phân ra thành nhiều đoạn bằng nhau

 Người ta sử dụng hai kỹ thuật phân đoạn sau đây:

 Tách: Tách các đoạn ra và mỗi đoạn được xếp thành một hàng, dóng lề trái hoặc lề phải.

 Gấp: Gấp các đoạn lại theo đường biên tương tự như gấp giấy, các chữ rơi vào cùng một chỗ được đặt thành hàng thẳng nhau.

Trang 8

Ví dụ:

Tách: giả sử có khóa là k = 17046329

329 + 046

017 392

Gấp:

046 + 923 710 1679

Chọn 167 hoặc 679

Trang 9

III Bảng băm - Hash table

Một bảng băm là một cấu trúc dựa trên mảng

để lưu trữ các phần tử, mỗi phần tử là một cặp Khóa-Giá trị (key-value)

Các thành phần cấu thành lên bảng băm

 Mảng chứa

 Mỗi phần tử mảng quản lý một danh sách các phần tử có khóa qua ánh xạ h cho cùng một địa chỉ.

 Hàm băm h(k) - Hash function, h(k)

 Mã băm

Trang 10

0 1 2 3

12

11 - 21 - 41

Giả sử có hàm h(k) = k % 5

Có các giá trị: 11, 21, 44, 23, 41, 4, 34, 12

23

Thùng chứa

Trang 11

Độ phức tạp về thời gian

Độ phức tạp về thời khi đưa một phần

tử vào bảng và tìm kiếm một phần tử trong bảng

Độ phức tạp về thời gian

Trang 12

Cấu trúc dữ liệu bảng băm

Thuộc tính

 Mảng (mỗi phần tử mảng lưu một danh sách các phần tử)

 N: kích thước mảng

Các phương thức

 Node *Add(Key, Object)

 void Remove(Key)

 Node *Find(Key)

 bool Contains(Key)

 int Count()

Trang 13

Bài tập

1 Viết chương trình nhập vào một dãy số nguyên Xây dựng hàm băm để tìm kiếm một phần tử nhập từ bàn phím (hàm băm theo số)

2 Viết chương trình tìm kiếm một sinh viên (sử dụng lớp sinh viên đã học) sử dụng bảng băm (hàm băm theo chữ).

Thời gian: 17h00 ngày 12/11/2014

Trang 14

Relax

Ngày đăng: 14/10/2020, 22:21

HÌNH ẢNH LIÊN QUAN

Bảng bă m- Hash Tables - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
Bảng b ă m- Hash Tables (Trang 1)
- 0..m-1 là bảng địa chỉ (là các số nguyên) - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
0..m 1 là bảng địa chỉ (là các số nguyên) (Trang 2)
Hình ảnh hàm băm - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
nh ảnh hàm băm (Trang 3)
Bảng địa chỉ - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
ng địa chỉ (Trang 4)
 Hàm h phải dải đều các đối tượng trên bảng một cách ngẫu nhiên. Để có được điều đó h phải phụ thuộc vào m - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
m h phải dải đều các đối tượng trên bảng một cách ngẫu nhiên. Để có được điều đó h phải phụ thuộc vào m (Trang 5)
III. Bảng bă m- Hash table - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
Bảng b ă m- Hash table (Trang 9)
Cấu trúc dữ liệu bảng băm - Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 14: Bảng băm
u trúc dữ liệu bảng băm (Trang 12)

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