Chỉ số của mảng bằng với ch ỉ số id của sinh viên, i.e.[r]
(1)Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580
Email:
Cấu trúc liệu giải thuật
(2)Bà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 xung đột.
22.4 Một số ví dụ sử dụng hàm băm.
(3)22.1 Bài toán (1/9)
Giả sử cần lưu trữ số ghi thực thao tác:
Thêm: thêm một ghi
Xóa: xóa một ghi
Tìm kiếm: tìm kiếm ghi
(4)22.1 Bài toán (2/9) – Sử dụng mảng
Sử dụng mảng không 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 dồn mảng->O(n)
Tìm kiếm: tìm kiếm tuần tự->O(n)
Sử dụng mảng 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 dồn mảng->O(n)
Tìm kiếm: tìm kiếm nhị phân->O(log(n))
(5)22.1 Bài toán (3/9) – Sử dụng DSLK
Thêm: thêm vào vị trí nhanh->O(1)
Xóa: nhanh tổ chức nút, chậm tìm kiếm nút cần khóa->O(n)
(6)22.1 Bài toán (4/9) – dùng bảng
Giả sử cần lưu trữ 1000 ghi sinh viên tìm kiếm chúng theo ID
6 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University
ID Họ tên Điểm
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
… … …
(7)22.1 Bài toán (5/9) – dùng bảng
Dùng một mảng lớn để lưu trữ (index 9999999) Chỉ số mảng với chỉ số id sinh viên, i.e ví dụ sinh viên với studid 0012345 lưu trữ A[12345]
Tên Điểm
… … …
12345 Nguyễn Văn A 10
… … …
33333 Nguyễn Văn B 9
… … …
56789 Nguyễn Văn C 8
… … …
9801010 Nguyễn Thị A 7
… … …
9802020 Nguyễn Thị B 8
(8)22.1 Bài toán (6/9) – dùng bảng
Một số nhận xét:
Đánh giá 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 tốn nhớ->không hiệu quả
(9)22.1 Bài toán (7/9) – dùng hàm băm
function Hash(key: KeyType): integer;
Giả sử có hàm băm lý tưởng Nó ánh xạ khóa (ID) 1000 ghi vào giá trị nguyên 999, hai khóa khác cho hai số nguyên khác nhau.
H(‘0012345’) = 134 H(‘0033333’) = 67 H(‘0056789’) = 764 …
(10)22.1 Bài tốn (8/9) – dùng hàm băm
• Để lưu trữ ghi, tính Hash(ID) cho bản ghi lưu trữ vị trí Hash(ID) của mảng
•Để tìm kiếm 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
0 … …
… … …
3 Trần Văn B 10
… … …
67 Nguyễn Văn B 9
… … …
134 Nguyễn Văn A 10
… … …
764 Nguyễn Văn C 8
… … …