[slide] chuong 4 - cay avl + hash table
TRANSCRIPT
![Page 1: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/1.jpg)
Các cấu trúc dữ liệu nâng cao
123Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cây nhị phân tìm kiếm cân bằng
B-Cây
3.1
Bảng băm – Hash Table3.3
3.2
(Advanced Data Structures)
![Page 2: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/2.jpg)
124Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cây nhị phân tìm kiếm cân bằng (1)
� Cây BST có thể bị lệch� Vì sao cây BST trở nên bị lệch ?� Chi phí tìm kiếm trên cây bị lệch ?
Một cây BST không cân bằng
![Page 3: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/3.jpg)
125Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cây nhị phân tìm kiếm cân bằng (2)
Cây cân bằng � chiều cao và chi phí tìm kiếm tối ưu O(log2N)
![Page 4: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/4.jpg)
Cây nhị phân tìm kiếm cân bằng (3)
Cần có phương pháp để duy trì tính cân bằngcho cây BST
126Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 5: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/5.jpg)
Cây nhị phân tìm kiếm cân bằng (4)
� Các loại cây BST cân bằng� Cây AVL
� Cây Đỏ - Đen (Red – Black tree)
� Cây AA
127Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 6: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/6.jpg)
128Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cây AVL (1)
� Định nghĩa
� Cài đặt cấu trúc dữ liệu
� Mất cân bằng khi thêm/xóa node
� Các thuật toán điều chỉnh cây
� Đánh giá/so sánh
G. M. Adelson-Velskii
E. M. Landis
![Page 7: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/7.jpg)
Cây AVL (2)
� Cấu trúc cây AVL do 2 tác giả người Liênxô: G. M. Adelson-Velskii và E. M. Landis công bố năm 1962
� Đây là mô hình cây tự cân bằng đầu tiênđược đề xuất (self-adjusting, height-balanced binary search tree)
129Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 8: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/8.jpg)
130Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Định nghĩa cây AVL (1)
� Cây AVL:� Là một cây nhị phân tìm kiếm (BST)� Mỗi nút p của cây đều thỏa: chiều cao của cây con bên
trái (p->left) và chiều cao của cây con bên phải(p->right) chênh lệch nhau không quá 1
∀p∈TAVL: abs(hp->left - hp->right)≤ 1
![Page 9: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/9.jpg)
131Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Định nghĩa cây AVL (2)
Chiều cao 2 cây con left, right chênh lệchkhông quá 1
![Page 10: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/10.jpg)
132Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Định nghĩa cây AVL (3)
Cây AVL ?
![Page 11: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/11.jpg)
133Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt cấu trúc dữ liệu (1)
� Cấu trúc node, tree tương tự như BST
� Thêm vào mỗi node một field balance, diễntả trạng thái cân bằng của node đó:� balance = -1: node lệch trái (cây con trái cao hơn cây
con phải)� balance = 0: node cân bằng (cây con trái cao bằng
cây con phải)� balance = +1: node lệch phải (cây con phải cao hơn
cây con trái)
![Page 12: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/12.jpg)
134Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt cấu trúc dữ liệu (2)
10
20
30
15 4026
2725
+1
0
-1
0
+1
0
0 0
Hệ số cân bằng của các node trong cây AVL
![Page 13: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/13.jpg)
135Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt cấu trúc dữ liệu (3)
template <class T> class AVLNode {
public:
T key; // key of nodechar balance; // balance status of node
BSTNode *left; // pointer to left child
BSTNode *right; // pointer to right child
BSTNode() { }
BSTNode(T aKey)
{
key = aKey;
balance = 0;
left = right = NULL;
}
}; // end class
![Page 14: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/14.jpg)
136Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Mất cân bằng khi thêm/xóa node (1)
� [Insert – Thêm 1 phần tử vào cây]: có thểlàm cây mất cân bằng.� Duyệt từ node vừa thêm ngược về node gốc� Nếu tìm thấy node P bị mất cân bằng thì tiến hành
xoay cây tại nút P (chỉ cần điều chỉnh 1 lần duy nhất)
![Page 15: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/15.jpg)
137Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Mất cân bằng khi thêm/xóa node (2)
Thêm phần tử 54 làm cây mất cânbằng tại node P
44
17 78
32 50 88
48 62
54
78
P
![Page 16: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/16.jpg)
138Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Mất cân bằng khi thêm/xóa node (3)
� [Delete – Xóa 1 phần tử]: có thể làm câymất cân bằng.� Duyệt từ node vừa xóa ngược về node gốc� Nếu tìm thấy node P bị mất cân bằng thì tiến hành
xoay cây tại node P� Lưu ý: Thao tác điều chỉnh có thể làm cho những node
phía trên của node P bị mất cân bằng � cần điềuchỉnh cho đến khi không còn node nào bị mất cânbằng nữa (lùi dần về node gốc)
![Page 17: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/17.jpg)
Mất cân bằng khi thêm/xóa node (4)
139Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Xóa phần tử 32 làmcây mất cân bằngtại node P
44
17 78
32 50 88
48 62
44
P
![Page 18: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/18.jpg)
140/203Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (1)
(a1) (b1)
Hai trường hợp cây bị mất cân bằng ở nhánh trái
P
P1
AB
C
-1
hh
h+1
-1
h
P
P1
BA
Ch
h+1
-1
+1
![Page 19: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/19.jpg)
Các thuật toán điều chỉnh cây (2)
141Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
(a2) (b2)
Hai trường hợp cây bị mất cân bằng ở nhánh phải
P
A
+1
h
h
P1
CB
h+1
+1
P
A
+1
h
h+1
P1
CB
h
-1
![Page 20: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/20.jpg)
142Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (3)
Trường hợp (a1): áp dụng phép xoay đơn Trái - Phải(SLR – Single Left-to-Right)
P
P1
A C
P
P1
AB
C
-1
hh
h+1
-1
B
SLR
hhh+1
0
0
![Page 21: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/21.jpg)
143Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (4)
Ví dụ: điều chỉnh cây bằng thao tác xoay đơn SLR
44
17 78
32 50 88
48 62
46
P
P1
SLR
P
44
17 50
32 7848
6246
P1
88
-1
-1
0
0
![Page 22: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/22.jpg)
144Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (5)
Ah
P
P1
B1
Ch
-1
+1
P2
B2
DLR
Trường hợp (b1): áp dụng phép xoay kép Trái - Phải(DLR – Double Left–to-Right)
A
PP1
B1 Ch h
0P2
B2
![Page 23: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/23.jpg)
145Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (6)
Ví dụ: thao tác xoay kép DLR
44
17 78
32 50 88
48 62
54
78
P1
P
P2
44
17
32 50 78
48 8854
62P1
P2
P
DLR
-1
+1
-1
0
0+1
![Page 24: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/24.jpg)
146Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thuật toán điều chỉnh cây (7)
� Đối với trường hợp (a2) và (b2)� Xử lý tương tự như (a1) và (b1), đối xứng qua trụcđứng
� Trường hợp (a2)� Áp dụng phép xoay SRL – Single Right-to-Left
� Trường hợp (b2)� Áp dụng phép xoay DRL – Double Right-to-Left
![Page 25: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/25.jpg)
147Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ví dụ tạo cây AVL (1)
� Tạo cây AVL với các khóa lần lượt là:30, 20, 10,…
10
20
30
SLR 10
20
30
30
![Page 26: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/26.jpg)
148Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ví dụ tạo cây AVL (2)
10
20
30
15 4025
27
26
25
DRL
10
20
30
15 4026
2725
…thêm 15, 40, 25, 27, 26
![Page 27: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/27.jpg)
149Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ví dụ tạo cây AVL (3)
… thêm 5, 13, 14
5
10
20
30
15 4026
272513
14
15
DLR
10
20
30
14 4026
2725
5
13 15
![Page 28: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/28.jpg)
150Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đánh giá/so sánh
� Độ cao của cây: hAVL < 1.44*log2(N+1)Cây AVL có độ cao nhiều hơn không quá 44% so với độ caocủa 1 cây nhị phân tối ưu.
� Chi phí tìm kiếm O(log2N)
� Chi phí thêm phần tử O(log2N)� Tìm kiếm: O(log2N)� Điều chỉnh cây: O(log2N)
� Chi phí xóa phần tử O(log2N)� Tìm kiếm: O(log2N)� Điều chỉnh cây: O(log2N)
![Page 29: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/29.jpg)
Các cấu trúc dữ liệu nâng cao
151Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cây nhị phân tìm kiếm cân bằng
B-Cây
3.1
Bảng băm – Hash Table3.3
3.2
(Advanced Data Structures)
![Page 30: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/30.jpg)
152Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm – Hash Table
� Giới thiệu
� Direct-address table
� Bảng băm
� Xung đột địa chỉ
� Hàm băm
� Các phương pháp xử lý xung đột
![Page 31: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/31.jpg)
153Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Giới thiệu (1)
� Bài toán:� Cho một tập các khóa (key). � Nhu cầu chủ yếu là tìm kiếm (thêm, xóa ít khi xảy ra)� Cách tổ chức lưu trữ và tìm kiếm với chi phí thấp ?
![Page 32: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/32.jpg)
Giới thiệu (2)
154Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặc điểm chung của thuật toán tìm kiếm trên cáccấu trúc dữ liệu đã học là gì ?
T H Ử S A I
![Page 33: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/33.jpg)
155Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Giới thiệu (3)
� Các cấu trúc dữ liệu đã biết: � Mảng, Danh sách liên kết, BST,… tìm kiếm bằng cách
so sánh lần lượt các phần tử � thời gian tìm kiếmkhông nhanh và phụ thuộc N (số phần tử)
Cây bậc 3 � chi phí tìm kiếm O(log3N)
![Page 34: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/34.jpg)
156Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Direct-address table (1)
� Giả sử có một tập khoá U:� Kích thước không quá lớn� Các giá trị khoá phân biệt� VD. U = {0, 1, 2, …, 9}
Mô hình minh họa dùng direct-address table T[m] để lưu trữ các khoá trong tập U
![Page 35: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/35.jpg)
157Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Direct-address table (2)
� Direct-address table:� Một mảng T[m] (T[0],…,T[m-1]) để chứa các khoá trong tập U� |T| = |U|� Mỗi vị trí T[k] (slot) sẽ chứa:
• Khóa k, hay• NULL nếu khoá k không có trong tập hợp
� Lưu ý:� U (Universe of keys): tập các giá trị khóa� K (Actual keys): tập các khoá thực sự được dùng
� Chi phí thao tác: O(1)
![Page 36: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/36.jpg)
158Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Direct-address table (3)
� Các giới hạn của direct-address table:� Kích thước tập U quá lớn � không thể tạo bảng T với
số slot tương ứng với |U|� Kích thước của tập K quá nhỏ so với U � rất nhiều
slot bị bỏ trống
![Page 37: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/37.jpg)
159Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm (1)
� Khi tập khóa K nhỏ hơn nhiều (VD) so với tập U � ta chỉ dùng mảng T[m] với kích thước vừa đủ cho tậpK� m = Θ(|K|)
� Do đó, không thể áp dụng ánh xạ trực tiếp T[k] � k được nữa
Thay vì ánh xạ trực tiếp T[k] � k, ta dùng hàm băm h để ánh xạ T[h(k)] � k
![Page 38: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/38.jpg)
160Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm (2)
� Hàm băm h: dùng để ánh xạ các khoá của tập U vào những slot của bảng bămT[0..m-1]
� h(k): giá trị băm (hash value) của khoá k
![Page 39: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/39.jpg)
161Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm (3)
� Định nghĩa bảng băm:� Bảng băm là một cấu trúc dữ liệu, lưu trữ các khóa
trong bảng T (danh sách đặc); sử dụng một hàm băm(hash function) để ánh xạ khoá (key) với một địa chỉlưu trữ
� Hàm băm có tác dụng biến đổi khoá thành chỉ số địachỉ (index) – tương ứng với khoá
� Bảng băm là cấu trúc rất phù hợp để càiđặt cho bài toán “từ điển (dictionary)”� Dictionary: dạng bài toán chỉ chủ yếu sử dụng thao tác
chèn thêm (Insert) và tìm kiếm (Search)
![Page 40: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/40.jpg)
162Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm (4)
Hàm băm – biến đổi khoá thành địa chỉ index
![Page 41: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/41.jpg)
163Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Bảng băm (5)
� Các tính chất:� Cấu trúc lưu trữ dùng trong Hash table thường là danh
sách đặc: mảng hay file� Thao tác cơ bản được cung cấp bởi Hash table là tìm
kiếm (lookup)� Chi phí trung bình là O(1)� Chi phí tìm kiếm xấu nhất (ít gặp) có thể là O(n)
![Page 42: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/42.jpg)
164Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Xung đột địa chỉ (1)
� Một cách lý tưởng, hàm băm sẽ ánh xạ mỗi khoá vào một slot riêng biệt của bảng T
� Tuy nhiên, điều này trong thực tế khó đạt được, vì:� m << |U|� Các khoá là không biết trước
![Page 43: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/43.jpg)
165Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Xung đột địa chỉ (2)
� Hầu hết cấu trúc bảng băm trong thực tế đầu chấp nhận một tỉ lệ nhỏ các khoá đụng độ và xây dựng phương án giải quyết sự đụng độ đó
Minh họa sự đụng độ và phương án giải quyết “chaining (móc xích)”
![Page 44: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/44.jpg)
166Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (1)
� Thành phần quan trọng nhất của bảng băm là “hàm băm”
� Nhiệm vụ của hàm băm là biến đổi khóa k của phần tử thành địa chỉ trong bảng băm.� Khóa có thể là dạng số hay dạng chuỗi
� Phương án xử lý chính của hàm băm là xem các khoá như là các số nguyên� Khóa là chuỗi “key” � xử lý với 3 thành phần 107 (k), 101 (e),
121 (y)
![Page 45: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/45.jpg)
167Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (2)
� Một hàm băm tốt là yếu tố tiên quyết để tạo ra bảng băm hiệu quả
� Các yêu cầu cơ bản đối với hàm băm:
� Tính toán nhanh, dễ dàng� Các khóa được phân bố đều trong bảng� Ít xảy ra đụng độ
![Page 46: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/46.jpg)
168Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (3)
� Các phương pháp xây dựng hàm băm:� Phương pháp chia� Phương pháp nhân
![Page 47: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/47.jpg)
169Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (4)
� Xây dựng hàm băm – phương pháp chia:� h(k) = k mod m� VD. h(k) = k mod 11
� Chọn m như thế nào ?� m không được là lũy thừa của 2. Nếu m = 2p thì
h(k) = k mod m chính là p bit thấp của k� m không nên là lũy thừa của 10, vì khi đó, hash value
sẽ không sử dụng tất cả chữ số thành phần của k� Nên chọn m là số nguyên tố nhưng không quá gần với
giá trị 2n
![Page 48: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/48.jpg)
170Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (5)
� Xây dựng hàm băm – phương pháp nhân:� h(k) = m * (k*A mod 1) � Trong đó:
0 < A < 1(k*A mod 1) là phần thập phân của k*A x là floor(x)
� Ở phương pháp này, giá trị m không quan trọng, ta thường chọn m = 2p
� Knuth đã phân tích và đưa ra một giá trị A tối ưu:
![Page 49: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/49.jpg)
171Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàm băm (6)
� Ví dụ phương pháp nhân:� Giả sử ta có k = 123456; m = 10000; A như trên
![Page 50: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/50.jpg)
172Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các phương pháp xử lý xung đột
� Phương pháp nối kết (Separate chaining)
� Phương pháp địa chỉ mở (Open addressing)
![Page 51: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/51.jpg)
173Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp nối kết (1)
Mô hình cách xử lý đụng độ bằng phương pháp chaining
� Đưa tất cả các khóa đụng độ vào một slot, lưu thành một linked-list
![Page 52: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/52.jpg)
174Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp nối kết (2)
Phương pháp chaining – bảng T chỉ lưu con trỏ của linked-list
![Page 53: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/53.jpg)
175Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp nối kết (3)
Phương pháp chaining –bảng T lưu phần tử đầu tiên + con trỏ của linked-list
![Page 54: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/54.jpg)
176Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp nối kết (4)
� Chi phí các thao tác:� Insert: chi phí xấu nhất là O(1)� Search và Delete: chi phí trung bình là Θ(1+α)
α = n/m (load factor: số phần tử trung bình lưu trữ trong một slot)
� Các cấu trúc dữ liệu khác:� Ngoài linked-list, ta có thể áp dụng các cấu trúc khác
hiệu quả hơn (khi tìm kiếm) như: cây cân bằng (AVL, Red-Black, AA), hay mảng cấp phát động,…
![Page 55: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/55.jpg)
177Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp địa chỉ mở (1)
� Các phần tử chỉ lưu trong bảng T, không dùngthêm bộ nhớ mở rộng như phương pháp nối kết
� Thuật toán cơ bản để thêm khóa k:
![Page 56: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/56.jpg)
178Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp địa chỉ mở (2)
Phương pháp Open addressing – Linear probing
![Page 57: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/57.jpg)
179Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp địa chỉ mở (3)
� Thuật toán cơ bản để tìm khóa k:
![Page 58: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/58.jpg)
180Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Phương pháp địa chỉ mở (4)
� Tên gọi “open addressing” mang ý nghĩa là địa chỉ (address) của phần tử không phải chỉ được xác định bằng “duy nhất” hash value của phần tử đó, mà còn có sự can thiệp của phép “dò tìm (probing)”
� Có 3 phương pháp dò tìm phổ biến:� Phương pháp dò tuần tự (Linear probing)� Phương pháp dò bậc 2 (Quadratic probing)� Phương pháp băm kép (Double hashing)
![Page 59: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/59.jpg)
181Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Linear probing
� Mô tả:h(k, i) = (h(k) + i) mod m
� i: thứ tự của lần thử (i = 0, 1, 2,…)� h(k): hàm băm� m: số slot của bảng băm� h(k, i): địa chỉ của khóa k tại lần thử thứ i
![Page 60: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/60.jpg)
182Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Quadratic probing
� Mô tả:h(k, i) = (h(k) + i2) mod m
� i: thứ tự của lần thử (i = 0,1,2,…)� h(k): hàm băm� m: số slot của bảng băm� h(k, i): địa chỉ của khóa k tại lần thử thứ i
![Page 61: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/61.jpg)
183Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Double hashing
� Mô tả:h(k, i) = (h(k) + i*h’’’’(k)) mod m
� i: thứ tự của lần thử (i = 0,1,2,…)
� h(k) và h’(k) : hàm băm� m: số slot của bảng băm� h(k, i): địa chỉ của khóa k tại lần thử thứ i
![Page 62: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/62.jpg)
184Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Thảo luận
� Hãy so sánh các ưu, khuyết điểm của phương pháp chaining và open addressing
![Page 63: [Slide] Chuong 4 - Cay AVL + Hash Table](https://reader034.vdocuments.net/reader034/viewer/2022050712/5572137a497959fc0b925ff1/html5/thumbnails/63.jpg)
185Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ví dụ
� Bài tập:� Có 1 bảng băm T, chiều dài m = 11; hàm băm h(k) = k mod m� Cho một dãy phần tử theo thứ tự như sau:
10, 22, 31, 4, 15, 28, 17, 88, 59� Hãy trình bày kết quả khi thêm các phần tử trên vào bảng băm,
với lần lượt từng phương pháp xử lý đụng độ:• Nối kết (Chaining)• Dò tuần tự (Linear probing)• Dò bậc 2 (Quadratic probing)• Băm kép (Double hashing), với h’(k) = 1 + (k mod (m – 1))