Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
description
Transcript of Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
![Page 1: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/1.jpg)
Cây - Tree
![Page 2: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/2.jpg)
Mục tiêu
Giới thiệu khái niệm cấu trúc cây. Cấu trúc dữ liệu cây nhị phân tìm kiếm: tổ
chức, các thuật toán, ứng dụng. Giới thiệu cấu trúc dữ liệu cây nhị phân tìm
kiếm cân bằng.
![Page 3: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/3.jpg)
Cấu trúc cây
![Page 4: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/4.jpg)
Cây- một số định nghĩa Định nghĩa 1: cây là một tập hợp T các phần tử (gọi
là nút của cây) trong đó có 1 nút đặc biệt được gọi là gốc, các nút còn lại được chia thành những tập rời nhau T1, T2 ,... , Tn theo quan hệ phân cấp trong đó Ti cũng là một cây. Mỗi nút ở cấp i sẽ quản lý một số nút ở cấp i+1. Quan hệ này người ta còn gọi là quan hệ cha-con.
Định nghĩa 2: cấu trúc cây với kiểu cơ sở T là một nút cấu trúc rỗng được gọi là cây rỗng (NULL). Một nút mà thông tin chính của nó có kiểu T, nó liên kết với một số hữu hạn các cấu trúc cây khác cũng có kiểu cơ sở T. Các cấu trúc này được gọi là những cây con của cây đang xét.
![Page 5: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/5.jpg)
Cây - Một số khái niệm cơ bản
Bậc của một nút: là số cây con của nút đó. Bậc của một cây: là bậc lớn nhất của các nút trong cây
(số cây con tối đa của một nút thuộc cây). Cây có bậc n thì gọi là cây n-phân.
Nút gốc: là nút không có nút cha. Nút lá: là nút có bậc bằng 0. Nút nhánh: là nút có bậc khác 0 và không phải là gốc. Mức của một nút:
Mức (gốc (T) ) = 0. Gọi T1, T2, T3,... , Tn là các cây con của T0 Mức (T1) = Mức (T2) = ... = Mức (Tn) = Mức (T0) + 1.
![Page 6: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/6.jpg)
Cây- một số định nghĩa Độ dài đường đi từ gốc đến nút x: là số nhánh cần đi
qua kể từ gốc đến x. Độ dài đường đi tổng của cây:
trong đó Px là độ dài đường đi từ gốc đến X. •Độ dài đường đi trung bình: PI = PT/n (n là số nút trên cây T). •Rừng cây: là tập hợp nhiều cây trong đó thứ tự các cây là quan trọng.
![Page 7: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/7.jpg)
Ví dụ
Sơ đồ tổ chức công ty
![Page 8: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/8.jpg)
Ví dụ
Cấu trúc trang webTrang chủ
Giới thiệu Tin tức Liên kết
Tổng công ty Trang web Van hóa
Xã hội
Chính trị
Nội bộ
![Page 9: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/9.jpg)
Mục lục một quyển sách Cấu trúc cây thư mục trong DOS/WIN Cấu trúc thư viện, … Nhận xét:
Trong cấu trúc cây không tồn tại chu trình. Tổ chức 1 cấu trúc cây cho phép truy cập nhanh
đến các phần tử của nó.
![Page 10: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/10.jpg)
Cây nhị phân
![Page 11: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/11.jpg)
Định nghĩa
Cây nhị phân là cây mà mỗi nút có tối đa 2 cây con.
Trong thực tế thường gặp các cấu trúc có dạng cây nhị phân. Một cây tổng quát có thể biểu diễn thông qua cây nhị phân.
![Page 12: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/12.jpg)
Hình ảnh cây nhị phân
a
b k
1 4
G
f
W
Con trái Con phải
![Page 13: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/13.jpg)
Biểu diễn heap19
9 8
1 5
4
6
0
![Page 14: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/14.jpg)
Biểu diễn tính toán biểu thức ((1*x)-2)/((2+5+10)*(y/(3-17)))
1
*
x
2
2 5
10 y
3 17
-
/
*
/+
-+
![Page 15: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/15.jpg)
` Một số tính chất của cây nhị phân: Số nút nằm ở mức I nhỏ hơn 2I. Số nút lá 2h-1, với h là chiều cao của cây. Chiều cao của cây h log2(số nút trong cây). Số nút trong cây 2h-1.
19
9 8
1 5
4
6
0
0
1
2
3
4
![Page 16: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/16.jpg)
Biểu diễn cây nhị phân T
Cây nhị phân là một cấu trúc bao gồm các phần tử (nút) được kết nối với nhau theo quan hệ “cha-con” với mỗi cha có tối đa 2 con. Để biểu diễn cây nhị phân ta chọn phương pháp cấp phát liên kết. Ứng với một nút, ta dùng một biến động lưu trữ các thông tin: Thông tin lưu trữ tại nút. Địa chỉ nút gốc của cây con trái trong bộ nhớ. Địa chỉ nút gốc của cây con phải trong bộ nhớ.
![Page 17: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/17.jpg)
C#
Khai báo tương ứng trong ngôn ngữ C# có thể như sau:
class CTreeNode
{
Data Key; //Data là kiểu dữ liệu ứng với thông tin lưu tại nút
CTreeNode TLeft, TRight;
…
}
Do tính chất mềm dẻo của cách biểu diễn bằng cấp phát liên kết, phương pháp này được dùng chủ yếu trong biểu diễn cây nhị phân.
![Page 18: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/18.jpg)
Có 3 kiểu duyệt chính có thể áp dụng trên cây nhị phân: Duyệt theo thứ tự trước (NLR), Thứ tự giữa (LNR) Thứ tự sau (LRN)
![Page 19: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/19.jpg)
Duyệt theo thứ tự trước (Node-Left-Right) Kiểu duyệt này trước tiên thăm nút gốc sau đó thăm các nút của
cây con trái rồi đến cây con phải. Thủ tục duyệt có thể trình bày đơn giản như sau:
void NLR(CTReeNode *a) {
if (a != NULL) { <Xử lý a.key>; //Xử lý tương ứng theo nhu cầu
NLR(a->TLeft); NLR(a->TRight);
} }
![Page 20: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/20.jpg)
Ví dụ: Duyệt thông tin của ổ đĩa C
C
HOCTAP
NFP TOAN
DAISO
MANG
WANSetup.exe Run.bat
Zentriz.exe
Sohoc.doc Matran.com rip.txt Atm.doc
GAME
LANbaitap.doc
IP.doc thietke.doc
C
HOCTAP
NFP TOAN
DAISO
MANG
WANSetup.exe Run.bat
Zentriz.exe
Sohoc.doc Matran.com rip.txt Atm.doc
GAME
LANbaitap.doc
IP.doc thietke.doc
![Page 21: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/21.jpg)
Duyệt theo thứ tự giữa (Left- Node-Right) Kiểu duyệt này trước tiên thăm các nút của cây con
trái sau đó thăm nút gốc rồi đến cây con phải. Thủ tục duyệt có thể trình bày đơn giản như sau:
void LNR(CTREEnode a) { if (a != NULL)
{ LNR(a.Left);
<Xử lý a.key>; //Xử lý tương ứng theo nhu cầu LNR(a.Right); }
}
![Page 22: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/22.jpg)
từ cây nhị phân mảng sắp xếp
19
9 50
2 35
22
56
701 3
10
21 25
37 51
61 81
1,2,3,9,10,19,21,22,25,35,37,50,51,56,61,70,81
![Page 23: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/23.jpg)
(3 + 1)3/(9 – 5 + 2) – (3(7 – 4) + 6) = –13
![Page 24: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/24.jpg)
Duyệt theo thứ tự sau (Left-Right-Node) Kiểu duyệt này trước tiên thăm các nút của cây con trái sau
đó thăm đến cây con phải rồi cuốio cùng mới thăm nút gốc. Thủ tục duyệt có thể trình bày đơn giản như sau:
void LRN(TREE Root) { if (Root != NULL)
{ LRN(Root->Left);
LRN(Root->Right); <Xử lý Root>; //Xử lý tương ứng theo nhu
cầu }
}
![Page 25: Bai13-Cau truc du lieu va giai thuat - Cay (Tree)](https://reader035.fdocument.pub/reader035/viewer/2022062307/5585fcc9d8b42a5d068b4e2c/html5/thumbnails/25.jpg)
(3 1+ 3 x 9 5-2+/ 3 7 4 – x6+-