Chỉ số của mảng bằng với ch ỉ số id của sinh viên, i.e.[r]
Trang 1Gi ảng viên: TS Ngo Huu Phuc
Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com
C ấu trúc dữ liệu và giải thuật
Bài 22: Hàm băm
Trang 2Bài 22: Hàm băm
N ội dung:
22.1 Bài toán.
22.2 Hàm băm.
22.3 Gi ải quyết xung đột.
22.4 M ột số ví dụ sử dụng hàm băm.
2 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University
Trang 322.1 Bài toán (1/9)
Gi ả sử cần lưu trữ một số bản ghi và thực hiện các thao tác:
Thêm : thêm m ột bản ghi
Xóa : xóa m ột bản ghi
Tìm ki ếm : tìm ki ếm một bản ghi
Hãy đưa ra cách tổ chức để thực hiện hiệu quả các công việc trên.
Trang 422.1 Bài toán (2/9) – S ử dụng mảng
S ử dụng mảng không được sắp xếp
Thêm: thêm vào cu ối mảng->O(1)
Xóa: m ất nhiều thời gian tìm vị trí cần xóa và dồn mảng->O(n)
Tìm ki ếm: tìm kiếm tuần tự->O(n)
S ử dụng mảng được sắp xếp
Thêm: ph ải tìm vị trí thêm vào->O(n)
Xóa: m ất nhiều thời gian tìm vị trí cần xóa và dồn mảng->O(n)
Tìm ki ếm: tìm kiếm nhị phân->O(log(n))
4 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University
Trang 522.1 Bài toán (3/9) – S ử dụng DSLK
Thêm: thêm vào v ị trí bất kỳ nhanh->O(1)
Xóa: nhanh trong t ổ chức các nút, nhưng chậm trong tìm kiếm nút c ần khóa->O(n)
Tìm ki ếm: tìm kiếm tuần tự->O(n)
Trang 622.1 Bài toán (4/9) – dùng như bảng
Gi ả sử cần lưu trữ 1000 bản ghi về sinh viên và tìm kiếm chúng theo ID
6 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University
0012345 Nguy ễn Văn A 10
0033333 Nguy ễn Văn B 9
0056789 Nguy ễn Văn C 8
9801010 Nguy ễn Thị A 7
9802020 Nguy ễn Thị B 8
9903030 Tr ần Văn A 9
9908080 Tr ần Văn B 10
Trang 722.1 Bài toán (5/9) – dùng như bảng
Dùng m ột mảng rất lớn để lưu trữ (index 0 9999999) Chỉ số của mảng bằng với
ch ỉ số id của sinh viên, i.e ví dụ sinh viên với studid 0012345 thì được lưu trữ tại A[12345]
Tên Điểm
9802020 Nguy ễn Thị B 8
Trang 822.1 Bài toán (6/9) – dùng như bảng
M ột số nhận xét:
Đánh giá các thao tác
Thêm : r ất nhanh O(1)
Xóa : r ất nhanh O(1)
Tìm ki ếm : r ất nhanh O(1)
Nhưng quá tốn kém bộ nhớ->không hiệu quả
8 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University
Trang 922.1 Bài toán (7/9) – dùng hàm băm
function Hash(key: KeyType): integer;
Gi ả sử có 1 hàm băm lý tưởng Nó
ánh x ạ khóa (ID) của 1000 bản ghi
vào các giá tr ị nguyên 0 999, hai
khóa khác nhau cho hai s ố nguyên
khác nhau.
H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764
… H(‘9908080’) = 3
Trang 1022.1 Bài toán (8/9) – dùng hàm băm
• Để lưu trữ một bản ghi,
tính Hash(ID) cho b ản
ghi và lưu trữ nó tại vị trí
Hash(ID) c ủa mảng
• Để tìm kiếm một sinh
viên, ch ỉ cần truy cập đến
v ị trí Hash(target ID).
10 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University