Professional Documents
Culture Documents
Lecture 6 Trees Part2 VI
Lecture 6 Trees Part2 VI
thuật
Cây– Phần 2
Node<Item>* root;
E F G
3
Hàng đợi ưu tiên
➢ Hàng đợi ưu tiên lưu trữ một
tập các đội tượng
➢ Mỗi đối tượng bao gồm một
cặp (key, value)
➢ Các phép toán chính của hàng
đợi ưu tiên
❖ insert(k, x)
Chèn một đối tượng có khóa k
và giá trị x
❖ removeMax()
Loại bỏ và trả về đội tượng có
khóa lớn nhất y
➢ Ví dụ:
4
Hàng đợi ưu tiên
5
Cây heap
➢ Cây heap là một cây nhị phân thỏa mãn các
đỉnh trong có giá trị khóa lớn hơn hoặc bằng
giá trị khóa của các đỉnh con
➢ Ứng dụng: Xây dựng cây hàng đợi ưu tiên
44
42 35
33 31 19 27
10 26 14
6
Cây heap
Phép toán Max: Lấy thông tin của đỉnh gốc (có
giá trị khóa lớn nhất)
44
42 35
33 31 19 27
10 26 14
7
Chèn đối tượng
Algorithm insert(v):
➢ Step 1 − Tạo một đỉnh mới vào cuối heap.
➢ Step 2 − Bắt đầu từ đỉnh có giá trị cần chèn, so sánh giá
trị của nó với giá trị của cha. Nếu lớn hơn giá trị đỉnh
cha thì đổi chỗ, thực hiện tiếp bước 2.
8
Heap tree insertion
Insert 70 95
61 83
53 39 72 16
24 48 70
9
Heap tree insertion
Insert 70 95
61 83
53 70 72 16
24 48 39
10
Heap tree insertion
Insert 70 95
70 83
53 61 72 16
24 48 39
11
Exercise 2
➢ Xây dựng cây max heap bao gồm: 52, 69, 38, 79, 66, 64,
72, 3, 16, 89, 15, 37, 0, 28, 73, 95.
12
Loại bỏ đỉnh gốc
70 83
53 61 72 16
24 48 39
14
Loại bỏ gốc
39
70 83
53 61 72 16
24 48
15
Loại bỏ gốc
83
70 39
53 61 72 16
24 48
16
Loại bỏ gốc
83
70 72
53 61 39 16
24 48
17
Bài tập 3
Mô tả các bước loại bỏ gốc của cây heap sau:
44
42 35
33 31 19 27
10 26 14
18
Độ phức tạp của các phép toán
• Phép toán Max : O(1)
• Phép toán chèn: Độ cao của cây
• Phép toán xóa: Độ cao của cây
19
Sử dụng thư viện cho cây heap
Sử dụng make_heap, pop_heap, push_heap, và
sort_heap từ thư viện của C++ để thực hiện các
nhiệm vụ sau:
❖ Tạo một cây heap
❖ Loại bỏ gốc
❖ Chèn một đỉnh vào cây
❖ Sắp xếp các phần tử trong cây
20
Cây tìm kiếm nhị phân
➢ Cây tìm kiếm nhị phân là
một cây nhị phân thỏa 6
mãn đỉnh cha nhỏ hơn
hoặc bằng con phải và lớn 2 9
hơn hoặc bằng con trái.
8
1 4
➢ Duyệt theo trung thứ tự
(inorder) trên cây cho kết
quả các đối tượng được
sắp xếp tăng dần theo
khóa
21
Tìm kiếm
➢ Để tìm kiểm một đỉnh có Algorithm TreeSearch(k, v)
khóa bằng k, Chúng ta if T.isExternal (v)
tìm từ trên xuống bắng return v;
đầu từ gốc if k • key(v)
➢ Đỉnh tiếp theo được thăm return TreeSearch(k, T.left(v));
phụ thuộc vào kết quả của else if k = key(v)
việc so sánh k với giá trị return v;
của đỉnh hiện tại else { k • key(v); }
➢ Nếu đỉnh hiện tại là đỉnh return TreeSearch(k, T.right(v));
lá thì khóa sẽ không tìm
thấy và hàm trả về giá trị 6
null •
➢ Ví dụ: find(4): 2
• 9
❖ Call TreeSearch(4,root)
1 4 = 8
22
Phép toán chèn
6
•
➢ Chèn đính có giá trị khóa 2 9
•
bằng k vào cây.
1 4 8
➢ Thuật toán: Bắt đầu từ gốc, so •
sánh k với đỉnh này. Nếu k
nhỏ hơn, chèn k vào bên trái w
cây. Ngược lại, chèn k vào
bên phải cây. 6
➢ Ví dụ: chèn 5 2 9
1 4 8
w
5
23
Phép toán xóa
6
•
➢ Để thực hiện phép toán xóa 2 9
phần tử bằng k remove(k), •
Chúng ta tìm đỉnh này từ gốc 1 4 v 8
➢ Giả sử rằng k ở trong cây, gọi v 5
là đỉnh chứa k
➢ Nếu đỉnh v là đỉnh lá, loại bỏ v.
Nếu đỉnh v có 1 con, loại bỏ v
và liên kết con của v tới cha 6
của v.
2 9
➢ Ví dụ: loại bỏ 4
1 5 8
24
Phép toán xóa (tiếp)
➢ Trong trường hợp v có 2 con: 1
❖ Tìm đỉnh w sau v trong thứ tự v
sắp xếp theo phương pháp 3
duyệt inorder (đỉnh lá trái nhất 2 8
của con phải của v).
❖ Thay thế v bởi w 6 9
❖ Loại bỏ đỉnh w w
5
➢ Ví dụ: Loại bỏ 3
1
v
5
2 8
6 9
25
Độ phức tạp
Các phép toán: Tìm kiếm, Chèn,
Xóa: Độ cao của cây
26
Bài tập 4
➢ Tạo cây nhị tìm kiếm nhị phân (BST) từ các số: 34, 15, 65, 62,
69, 42, 40, 80, 50, 59, 23, 46, 57, 3, 29
➢ Vẽ các cây BST sau khi xóa các khóa 62, 42 và 3 từ cây trên.
27
Bài tập 5
➢ Vẽ cây BST
EASYQUE STI ON
➢ Vẽ cây BST
DATAS T R U C T R E SAN DALG O R I T H M
28