Chương 4: Cây
Định nghĩa và các khái niệm Cây nhị phân Cây nhị phân tìm kiếm Cây tổng quát
Bạn đang xem trước 20 trang tài liệu Chương 4: Cây, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
Chương 4:
Cây
Giảng viên: Ths. Nguyễn Thị Khiêm Hòa
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
2
Nội dung
Định nghĩa và các khái niệm
Cây nhị phân
Cây nhị phân tìm kiếm
Cây tổng quát
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
3
Mục tiêu
Trang bị khái niệm và ứng dụng trên Cây
Cài đặt các thuật toán trên cây, đặc biệt là cây nhị phân
tìm kiếm.
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
4
Khái niệm
Cây là tập hữu hạn các nút (Tree node):
Có một nút gốc (root)
Các nút còn lại phân hoạch thành n tập riêng biệt T1, T2, …, Tn,
với Ti là một cây
Giữa các nút có quan hệ phân cấp (hierarchical relationship)
“cha con”.
Cây không có nút là cây rỗng (null tree).
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
5
Biểu diễn cây
Bằng đồ thị
Bằng giản đồ
Bằng danh sách (các dấu ngoặc lồng nhau)
Bằng phương pháp Identatio
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
6
Biểu diễn cây
Bằng đồ thị
/
A
D C
F
B
G
E
I H
J
A
B D C
G H E F
I J K
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
7
Biểu diễn cây
Bằng giản đồ
A
B
C F
D
G
J
E
H
I
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
8
Biểu diễn cây
Bằng danh sách (các dấu ngoặc lồng nhau)
(/( A (C (F), D (G ( J ) ) ) ), (B (E ( H, I ) ) ) )
( A ( B ( E, F( I, J, K) ), C ( G,H ), D ) )
/
A
D C
F
B
G
E
I H
J
A
B D C
G H E F
I J K
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
9
Biểu diễn cây
Bằng phương pháp Indentatio
/
A
C
F
D
G
J
B
E
H
I
/
A
D C
F
B
G
E
I H
J
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
10
Các thuật ngữ
Bậc của nút và bậc của cây
Nút gốc, Nút lá và nút nhánh
Nút cha (Parent), nút con (children)
K L
E F
B
G
C
M
H I J
D
A
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
11
Các thuật ngữ
Đường đi (path)
/
A
D C
F
B
G
E
I H
J
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
12
Các thuật ngữ
Mức của nút và chiều cao của cây
1
2
3
4
5
Root
Chiều cao
của cây: 5
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
13
Các thuật ngữ
Tổ tiên (ancestors) của một nút
Con cháu (Descendant) của một nút:
Các con của cùng một cha gọi là anh em ruột (siblings)
/
A
D C
F
B
G
E
I H
J
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
14
Cây có thứ tự và Rừng
Cây có thứ tự (ordered tree)
Một cây gọi là có thứ tự khi ta thay đổi vị trí của các
cây con, ta nhận được một cây mới
Rừng (forest)
Tập hợp hữu hạn các cây phân biệt
Nếu bỏ đi nút gốc của một cây, ta sẽ thu được một
rừng gồm nhiều cây phân biệt
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
15
Cây nhị phân
Định nghĩa
Cây con
trái
Cây con
phải
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
16
Cây nhị phân
Cây nhị phân biểu diễn biểu thức toán học
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
17
Tính chất của cây nhị phân
Số nút tối đa mức i trong cây 2i-1
Số nút tối đa trong cây là 2h-1 (h chiều cao của cây)
Chiều cao của cây h log2N (N là số nút trong cây).
1
2
3
4
5
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
18
Cây nhị phân hoàn chỉnh
/
A
D C
B
G
E I
G J
Các nút ứng với các mức trừ mức cuối đều đạt tối đa,
ở mức cuối, các nút đều đạt về phía trái
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
19
Cây nhị phân đầy đủ
/
A
D C
B
E I
Các nút đạt tối đa ở cả mọi mức
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
20
Cây nhị phân gần đầy
/
A
D C
B
G
E I
G J
Các nút ứng với các mức trừ mức cuối đều đạt tối đa,
ở mức cuối, các nút không dạt đều về phía trái
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
21
Tổ chức lưu trữ cây nhị phân
Sử dụng mảng một chiều (lưu trữ kế tiếp)
Đánh số thứ tự từ gốc, tại mỗi mức, đánh số các nút
từ trái sang phải, từ mức thấp đến mức cao
Sử dụng liên kết
Quản lý cây thông qua nút gốc (root)
Mỗi nút cấp phát động, bao gồm dữ liệu và địa chỉ hai
cây con pLeft, pRight, liên kết tới cây con trái và cây
con phải
Nút lá có hai liên kết trái phải đều rỗng
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
22
Lưu trữ kế tiếp cây nhị phân
Con của nút thứ i là nút thứ 2i+1 và 2i+2
Cha của nút thứ j là nút [(j-1)/2]
R
A
D C
B
E I
0
1 2
3 4 5 6
R A E D I B C
V[0] V[1] V[6] V[4] V[5] V[2] V[3]
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
23
Sử dụng liên kết
R
A B
C D E
G G
Root
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
24
Sử dụng liên kết
Cấu tạo của nút
Tạo lập bằng cách cấp phát bộ nhớ động
Mỗi nút gồm có các thông tin:
Dữ liệu (data)
Địa chỉ 2 cây con pLeft, pRight liên kết đến nút con
trái và nút con phải
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
25
Cây nhị phân
public class Node: IComparable >
where T: IComparable
{
private T data;
private Node left;
private Node right;
public Node(T data)
{
this.data = data;
this.left = this.right = null;
}
//Đóng gói DL
//các phương thức
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
26
Cây nhị phân
//Đóng gói dữ liệu: Properties
public T Data
{
get{ return this.data;}
set{ this.data = value;}
}
public Node Left
{
get { return this.left; }
}
public Node Right
{
get { return this.right; }
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
27
Cây nhị phân
//các phương thức dùng để so sánh sắp xếp
public int CompareTo(Node rhs)
{
return data.CompareTo(rhs.data);
}
public bool Equals(Node rhs)
{
return this.data.Equals(rhs.data);
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
28
Cây nhị phân
public class BinTree
where T: IComparable
{
private Node root;
public BinTree()
{
this.root = null;
}
//các phương thức
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
29
Phép duyệt cây nhị phân (Binary Tree Traversing)
Định nghĩa
Là phép xử lý các nút trên cây, mỗi nút một lần
Duyệt cây theo thứ tự trước (preorder)
Duyệt cây theo thứ tự giữa (inorder)
Duyệt cây theo thứ tự sau (postorder)
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
30
Phép duyệt cây nhị phân (Binary Tree Traversing)
Duyệt cây theo thứ tự trước (NLR)- Đệ qui
Thăm gốc
Duyệt cây con trái theo thứ tự trước
Duyệt cây con phải theo thứ tự trước
R
A
D C
F
B
G
E
I H
J
R A C F D G J B E H I
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
31
Cây nhị phân
//In danh sách
public void PrintTree(Node root)
{
if(root != null)
{
Console.Write("{0} ", root.data);
PrintTree(root.left);
PrintTree(root.right);
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
32
Phép duyệt cây nhị phân (Binary Tree Traversing)
Duyệt cây theo thứ tự giữa (LNR)- Đệ qui
Duyệt cây con trái theo thứ tự giữa
Thăm gốc
Duyệt cây con phải theo thứ tự giữa
R
A
D C
F
B
G
E
I H
J
F C A G J D R B H E I
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
33
Cây nhị phân
//In danh sách
public void PrintTree(Node root)
{
if(root != null)
{
PrintTree(root.left);
Console.Write("{0} ", root.data);
PrintTree(root.right);
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
34
Phép duyệt cây nhị phân (Binary Tree Traversing)
Duyệt cây theo thứ tự sau (LRN)- Đệ qui
Duyệt cây con trái theo thứ tự sau
Duyệt cây con phải theo thứ tự sau
Thăm gốc
R
A
D C
F
B
G
E
I H
J
F C J G D A H I E B R
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
35
Cây nhị phân
//In danh sách
public void PrintTree(Node root)
{
if(root != null)
{
PrintTree(root.left);
PrintTree(root.right);
Console.Write("{0} ", root.data);
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
36
Cây nhị phân tìm kiếm (BST_Binary Search Tree)
Định nghĩa
Cây nhị phân
Mỗi nút có 1 khóa duy
nhất
Các nút trên cây con
trái nhỏ hơn nút gốc
Các nút trên cây con
phải lớn hơn nút gốc
44
18
37 13
5
88
23
93
98 90
30
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
37
Thao tác trên cây nhị phân tìm kiếm
Thêm vào phần tử
Tìm nút
Xóa một nút
Tìm nút có khóa nhỏ nhất
Tìm nút có khóa lớn nhất
Giải phóng cây
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
38
Thêm một phần tử
Thêm X= 50 44
18 88
13 37 59 108
15 23 40 55 71
X > 44
X < 88
X < 59
50
X < 55
root
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
39
Tìm một nút có khóa cho trước
Tìm X = 55
44
18 88
13 37 59 108
15 23 40 55 71
X >44
X < 88
X < 59
root
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
40
Xóa một nút trên cây nhị phân tìm kiếm
Xóa một nút trên cây nhị phân tìm kiếm, có ba
trường hợp:
Nút cần xóa là nút lá.
Nút cần xóa chỉ có 1 con (trái hoặc phải).
Nút cần xóa có đủ cả 2 con
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
41
Xóa một nút trên cây nhị phân tìm kiếm
Trường hợp 1 :Nút cần xóa là nút lá
44
18 88
13 37 59 108
15 23 40 55 71
Xóa: X = 40
root
Đơn giản :
Xóa nút X,
vì nó
không móc
nối đến nút
nào khác
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
42
Xóa một nút trên cây nhị phân tìm kiếm
Trường hợp 2: Nút cần xóa có một cây con trái
root
44
18 88
13 37 59 108
15 23 55 71
Xóa X=37
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
43
Xóa một nút trên cây nhị phân tìm kiếm
Trường hợp 2: Nút cần xóa có một cây con phải
44
18 88
13 37 59
108
15 40 55 71
Xóa X=37
root
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
44
Xóa một nút trên cây nhị phân tìm kiếm
Trường hợp 3 : Nút cần xóa có hai cây con trái và phải
15
44
18 88
13 37 59 108
15 23 40 55 71
Xóa nút X=18
30
root
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
45
Cây M_phân (M_ary)
Định nghĩa
Cây m phân là cây mà mỗi nút có tối đa m nút con
(cây con)
Biểu diễn cây m phân bằng liên kết động
Mỗi nút có m+1 trường, với m mối nối
Với cây m phân đầy đủ, có n(m-1)+1 mối liên
kết NULL
Cây m phân đầy đủ có chiều cao logmN (N:số nút)
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
46
Cây M phân
Phép duyệt cây tổng quát LNR(T)
Nếu T rỗng, dừng
Ngược lại, T1,…,Tn là cây con gốc T
LNR(T1), T1 cây con thứ nhất của gốc T
Thăm gốc của T
Duyệt cây con T2,…,Tn của T theo thứ tự
giữa
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
47
Cây M_phân
Phép duyệt cây tổng quát LRN(T)
Nếu T rỗng, dừng
Ngược lại, T1,…,Tn là cây con gốc T
LNR(T1), T1 cây con thứ nhất của gốc T
Duyệt cây con T2,…,Tn của T theo thứ tự giữa
Thăm gốc của T
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
48
Cây M_phân
Duyệt cây theo mức
Duyệt cây theo chiều rộng
Ý tưởng
Tổ chức thành một hàng đợi
Đưa nút gốc vào hàng đợi
Lặp
Lấy một nút ra khỏi hàng đợi
Duyệt nút T
Đưa các nút con của T (nếu có) vào hàng đợi
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
49
Cây M_phân tìm kiếm
Tương tự cây nhị phân tìm kiếm trong đó mỗi nút có thể
có m nút con.
M càng lớn thì bậc của cây càng thấp.
Cây m phân tìm kiếm cân bằng: B_cây
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
50
B_Cây
B-Tree bậc M là cây M-Phân tìm kiếm có
các tính chất:
Mỗi node (ngoại trừ gốc) có ít nhất M/2
node con.
Node gốc (nếu không phải nút lá) có ít
nhất 2 nút con.
Mọi nút lá đều nằm cùng một mức.
Các khóa và cây con duợc sắp xếp theo
cây tìm kiếm.
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
51
B_Cây_Ứng dụng
Hạn chế số thao tác đọc mỗi lần tìm kiếm
trên cây Thích hợp cho việc tìm kiếm
trên bộ nhớ ngoài
Chiều cao cây = logMN chiều cao cây
giảm rất nhanh.
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
52
B Cây_Tìm kiếm
Tương tự cây nhị phân tìm kiếm
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
53
B Cây_Thêm nút vào cây
Ý tưởng: Tìm vị trí thích hợp để thêm vào cây. Nút thêm vào sẽ là
nút lá.
Nếu nút lá chưa đầy thêm vào
Nếu đầy: phân đôi nút lá
Chuyển phần tử giữa lên nút cha
Hai bên của nút lá thành hai nhánh con
Việc phân đôi có thể lan truyền.
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
54
B Cây_Thêm nút vào cây
Thực hiện thêm các nút sau vào B_cây bậc
5:
1 12 8 2 25 5 14 28 17 7 52 16 48 68
3 26 29 53 55 45
Kết quả:
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
55
Q&A