Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 54 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
54
Dung lượng
1,22 MB
Nội dung
1 Phần 2: Các giải thuật nâng cao Chương 3: Cây cân bằng Balanced trees PGS. TS. TRẦN CAO ĐỆ Đại Học Cần Thơ 2013 2 Cây tìm kiếm nhị phân binary search tree Cây tìm kiếm nhị phân (TKNP) là cây nhị phân mà khoá tại mỗi nút lớn hơn khoá của tất cả các nút thuộc cây con bên trái và nhỏ hơn khoá của tất cả các nút thuộc cây con bên phải. typedef <kiểu dữ liệu của khoá> KeyType; typedef struct Node{ KeyType Key; Node* Left; Node* Right; }; typedef Node* Tree; 20 10 175 15 35 22 42 37 3 thêm một khoá vào cây TKNP void InsertNode(KeyType x,Tree& Root ){ /* thêm nút mới chứa khoá x */ if (Root == NULL){ Root=(Node*)malloc(sizeof(Node)); Root->Key = x; Root->Left = NULL; Root->Right = NULL; } else if (x < Root->Key) InsertNode(x,Root->Left); else if (x>Root->Key)InsertNode(x,Root->Right); } 19 20 10 175 15 35 22 42 37 Xóa nút 35 Xóa nút 17 Xóa nút 20 Xóa một nút trên cây TKNP 20 10 175 22 35 25 42 24 20 10 35NULL 10 175 15 5 Xóa một nút trên cây TKNP KeyType DeleteMin (Tree& Root ){ KeyType k; if (Root->Left == NULL){ k=Root->Key; Root = Root->Right; return k; } else return DeleteMin(Root->Left); } void DeleteNode(KeyType x,Tree& Root){ if (Root!=NULL) if (x < Root->Key) DeleteNode(x,Root->Left); else if (x > Root->Key) DeleteNode(x,Root->Right); else if ((Root->Left==NULL) && (Root->Right==NULL)) Root=NULL; else if (Root->Left == NULL) Root = Root->Right; else if (Root->Right==NULL) Root = Root->Left; else Root->Key = DeleteMin(Root->Right); } 6 Phân tích BST Tìm kiếm một nút trên cây TKNP – Mất O(1) duyệt trên mỗi nút – Mỗi lần duyệt đi sâu xuống một mức – Vậy thời gian tìm kiếm là O(h) với h là chiều cao của cây Thời gian tìm kiếm 1 nút, thêm một nút, xóa một nút trên cây TKNP là O(h), với h là chiều cao của cây TKNP Chiều cao của cây TKNP có n nút: Logn ≤ h ≤ n 7 Cây AVL Trong trường hợp xấu nhất thời gian thực hiện các phép toán trên BST là O(n) Cân bằng AVL – Do Adelson Velski và Landis – AVL: Cây TKNP mà chiều cao của hai cây con của mọi nút chênh lệch nhiều nhất là 1. Trên cây AVL các phép tìm kiếm, thêm, xoa một nút là O(log n), n là số nút Chứng minh Gọi N h số nút cây AVL có chiều cao h. N h ≥ N h-1 + N h-2 + 1 ≥ 2N h-2 + 1 ≥ 1 + 2(1 + 2N h-4 ) = 1 + 2 + 2 2 N h-4 ≥ 1 + 2 + 2 2 + 2 3 N h-6 … ≥ 1 + 2 + 2 2 + 2 3 + + 2 h/2 = 2 h/2+1 – 1 Vậy 2 h/2+1 – 1 < n h/2 +1 < log 2 (n + 1) h < 2 log 2 (n + 1) Phân tích sâu sắc theo số Fibonacci, giới hạn trên là 1.44 log(n + 2). 8 Thêm một nút vào cây AVL Đầu tiên thêm một nút vào cây TKNP. Cây có thể mất cân bằng. Cân bằng lại – Xét cây AVL: tree T=(r,Tl,Tr) trong đó Tl có chiều cao hl và Tr có chiều cao hr – Giả sử nút thêm vào trên Tr. Nếu hl=hr+1: sau khi thêm vẫn cân bằng Nếu hl=hr : sau khi thêm vẫn cân bằng Nếu hl=hr-1 thì sau khi thêm sẽ mất cân bằngcân bằng lại. – Tương tự nếu thêm nút vào Tl 9 Single Rotation-RR RR rotation 10 Single rotation LL LL [...]... Tr172 Tương đương giữa cây đỏ đen và cây (2,4) 10 10 14 13 13 14 13 14 14 13 14 20 13 26 20 Tương đương giữa cây đỏ đen và cây (2,4) 27 Các phép quay Right-Rotation(B) Left-Rotation(A) Định lý: Các phép quay trái và quay phải như trên bảo tồn trật tự các nút trên cây TKNP 28 Thêm một phần tử vào cây đỏ đen 29 Thêm phần tử có khóa x vào cây đỏ đen – Tìm kiếm và thêm vào cây TKNP – Tô màu: Đen nếu là... là nút đen u u 30 v 30 w 10 v w 20 z 20 10 u u 10 v 30 20 z z 20 30 b 20 c a Rotation 10 w v w z 10 30 a,b,c là 3 nút theo thứ tự duyệt trung tự double red: Tô màu lại Trường hợp 1: w là nút đỏ u 30 10 20 30 40 v 20 40 w z 10 Recoloring u 30 30 v 20 z 10 40 w 10 20 40 u Tương tự v w z u w v u z w v z u Recoloring v w z u w v u z w v z Ví dụ: đưa các nút 4,7,12, 15, 3, 5, 14, 18, 16, 17 vào cây đỏ đen... v1, ,vd) sẽ lưu d-1 phần tử dạng (k1,x1), …, (kd-1,xd-1) và mỗi phần tử (k,x) lưu trong cây con gốc vi phải thỏa mãn: ki-1 ≤ k < ki ( k0= -∞ còn kd = +∞) Định lý: cây tìm kiếm đa phân chứa n phần tử có (n+1) nút ngoài Ví dụ: 3- cây 22 25 5 10 3 4 6 8 14 11 13 18 23 24 17 27 Xem thêm các giải thuật B-Cây trong giáo trình GT của Nguyễn Văn Linh Cây 2 -3- 4 hoặc cây (2,4) Cây (2,4) là 4-cây cân bằng: – –... đa 4 nút con Các nút lá cùng một độ sâu Định lý: Cây (2,4) chứa n phần tử có chiều cao Θ(logn) 19 25 50 5 15 0 3 6 79 17 19 20 40 70 Thêm 1 phần tử vào cây (2,4) thêm 4,6,12,15 ,3, 5,10,8 4 12 4, 6 3, 4 12 4, 6, 12, 15 split 6,10 15 5, 12 15 3, 4, 5, 6 3, 4 6, 8, 10 15 split 5, 12 12 4, 6 15 3, 4, 6 4, 6, 12 20 5, 12 15 3, 4 6 15 SỐ lần split khi thêm 1 phần tử là O(logn) Xóa một phần tử trong cây (2,4)... Tương tự v w z u w v u z w v z u Recoloring v w z u w v u z w v z Ví dụ: đưa các nút 4,7,12, 15, 3, 5, 14, 18, 16, 17 vào cây đỏ đen 7 4 7 4 12 15 12 7 4 34 7 12 12 4 15 3 5 15 7 7 12 4 3 4 15 5 14 3 5 12 14 15 18 7 4 3 14 5 12 15 18 7 7 4 3 14 5 12 4 15 3 18 14 5 12 16 15 16 17 18 ... (3- nút, 4-nút) sang, hoặc Kết hợp 2 nút 12 11 5, 10 4 6 8 15 11 13 14 6 17 5 15 8 10 5 8 6 15 11 17 11 12 11 6 10 13 14 13 14 17 5 15 8 10 14 17 11 6 5 15 8 10 15 14 17 6 11 5 8 10 15 17 Hiệu quả của cây (2,4) 24 Thêm, xóa, tìm một phần tử với thời gian O(logn) Cây đỏ-đen red – black trees Cây đỏ đen là cây TKNP với các nút được tô màu đỏ/đen: – – – – Định lý: Cây đỏ-đen chứa n nút sẽ có độ cao. .. 16 See 3. 6.1 chapter 3, Algorithm design, Goodrich d-cây Cây đa phân: là cây mỗi nút có từ hai con trở lên Cây có thứ tự: các nút có tt Nút v là d-nút: V có d≥2 nút con Cây tìm kiếm đa phân (multiway search tree) là cây có thứ tự với các tính chất sau: – – Mỗi nút trong là một d-nút có ít nhất 2 nút con Mỗi nút lưu trữ một tập hợp các phần tử dạng (k,x), 17 k là khóa x là giá trị kết hợp... lý 13 4 phép quay LL, RR, LR, và RL phủ toàn bộ các trường hợp cần phải cân bằng lại Trường hợp cây AVL trở nên mất cân bằng khi thêm một nút chỉ cần một phép quay để làm cho cây cân bằng lại Trường hợp cây AVL trở nên mất cân bằng khi Xóa một nút có thể cần tới O(log n) phép quay để làm cho cây cân bằng lại (từ nút mất cân bằng đến gốc) Ví dụ thêm 1 khóa LL Thêm khóa 1 Thêm khóa 32 14 Xóa nút . 50 0 3 6 7 9 17 19 20 40 70 20 Thêm 1 phần tử vào cây (2,4) thêm 4,6,12,15 ,3, 5,10,8 4 4, 6 4, 6, 12 4, 6, 12, 15 split 4, 6 12 15 3, 4, 6 12 15 3, 4, 5, 6 12 15 3, 4 5, 12 15 6 split 3, 4 5,. tử có (n+1) nút ngoài 18 Ví dụ: 3- cây 22 5 10 25 3 4 6 8 14 23 24 27 11 13 17 Xem thêm các giải thuật B-Cây trong giáo trình GT của Nguyễn Văn Linh 19 Cây 2 -3- 4 hoặc cây (2,4) Cây (2,4) là. (x>Root->Key)InsertNode(x,Root->Right); } 19 20 10 175 15 35 22 42 37 Xóa nút 35 Xóa nút 17 Xóa nút 20 Xóa một nút trên cây TKNP 20 10 175 22 35 25 42 24 20 10 35 NULL 10 175 15 5 Xóa một nút trên cây TKNP KeyType