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

pdf55 trang | Chia sẻ: lylyngoc | Lượt xem: 1767 | Lượt tải: 1download
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