Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
405,58 KB
Nội dung
39 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 77 Cây nhịphântìmkiếmcânbằng (AVL Tree) ! Vì sao phải cânbằng ? ! Định nghĩa ! Ví dụ ! Mô tả cấu trúc dữ liệu ! Thao tác điều chỉnh cây ! Ví dụ tạo cây ! Các đánh giá Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 78 AVL Tree Vìsao phải cânbằng ? ! Cây BST có thể không cânbằng Tom Nancy Alan Bob Ellen Jane Wendy Cây bị lệch à Chi phí O(N) Trường hợp nào cây BST trở nên bị lệch ? Cần có 1 phương pháp để duy trì độ cânbằng cho cây ! 40 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 79 AVL Tree Vìsao phải cânbằng ? ! Cây AVL là 1 dạng cây BST cânbằng ! Cấu trúc cây AVL do 3 tác giả: Adelson, Velskii, Landis đề xuất năm 1962 ! Đây là mô hình câycânbằng động đầu tiên được đề xuất ! Cây AVL không có độ cânbằng “tuyệt đối”, nhưng 2 cây con không bao giờ có độ cao chênh lệch quá 1. Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 80 AVL Tree Định nghĩa ! Cây AVL là: ! Một cây nhịphântìmkiếm ! Mỗi nút p của cây đều thỏa: độ cao của cây con bên trái (p->pLeft) và độ cao của cây con bên phải (p->pRight) chênh lệch nhau không quá 1 ∀p∈T AVL :abs(h p->pLeft -h p->pRight )≤ 1 41 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 81 AVL Tree Vídụ Cây AVL ? Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 82 AVL Tree Môtảcấu trúc dữ liệu ! Thêm vào mỗi nút trong cây 1 field Bal, diễn tả trạng thái của nút đó: ! Bal = -1: nút lệch trái (cây con trái cao hơn cây con phải) ! Bal = 0: nút cânbằng (cây con trái cao bằngcây con phải) ! Bal = +1: nút lệch phải (cây con phải cao hơn cây con trái) 42 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 83 AVL Tree Môtảcấu trúc dữ liệu 10 20 30 15 40 26 27 25 1 0 -1 0 1 0 0 0 Hệ số cânbằng của các nút trong cây AVL Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 84 AVL Tree Môtảcấu trúc dữ liệu Nút gốc của cây con trái pRoot Count Nút gốc của cây con phải AVLT_NODE AVL_TREE Data Bal pLeft pRight Data Bal pLeft pRight Data Bal pLeft pRight 43 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 85 AVL Tree Môtảcấu trúc dữ liệu // Định nghĩa các cấu trúc dữ liệu typedef struct tagAVLT_NODE { intData; intBal; // Hệ số cânbằng (-1,0,1) tagBT_NODE*pLeft; // con trỏ đến nút con trái tagBT_NODE*pRight; // con trỏ đến nút con phải } AVLT_NODE;// Cấu trúc nút của cây AVL Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 86 AVL Tree Môtảcấu trúc dữ liệu // Định nghĩa các cấu trúc dữ liệu … (tiếp theo) typedef struct AVL_TREE { intCount; // Số nút trong cây AVLT_NODE*pRoot; // con trỏ đến nút gốc };// Cấu trúc cây AVL 44 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 87 AVL Tree Thao tác điều chỉnh cây ! [Insert –Thêm 1 phần tử vào cây]: có thể làm cây mất cân bằng. ! Ta duyệt từ nút vừa thêm ngược về nút gốc, … ! …nếu tìm ra 1 nút P bị mất cân bằng, … ! …thì tiến hành điều chỉnh lại cây tại nút P Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 88 AVL Tree Thao tác điều chỉnh cây ! Ví dụ: thêm phần tử làm cây mất cânbằng tại nút P 44 17 78 32 50 88 48 62 54 78 P 45 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 89 AVL Tree Thao tác điều chỉnh cây ! [Delete –Xóa 1 phần tử]: có thể làm cây mất cân bằng. ! Ta duyệt từ nút vừa xóa ngược về nút gốc, … ! …nếu tìm ra 1 nút P bị mất cân bằng, … ! …thì tiến hành điều chỉnh lại cây tại nút P ! Thao tác điều chỉnh có thể làm cho những nút phía trên nút P bị mất cânbằng à cần điều chỉnh cho đến khi không còn nút nào bị mất cânbằng nữa Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 90 AVL Tree Thao tác điều chỉnh cây ! Ví dụ: xóa phần tử làm cây mất cânbằng tại nút P 44 17 78 50 88 48 62 44 P 32 46 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 91 AVL Tree Thao tác điều chỉnh cây Những trường hợp cây bị mất cânbằng và Các cách điều chỉnh cây Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 92 AVL Tree Thao tác điều chỉnh cây (a)(b) Hai trường hợp cây bị mất cânbằng ở nhánh trái P P 1 A B C -1 h h h+1 -1 h P P 1 B A C h h+1 -1 +1 47 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 93 AVL Tree Thao tác điều chỉnh cây Trường hợp (a): áp dụng phép xoay đơn Trái -Phải (LR –Single Left-Right) P P 1 A C P P 1 A B C -1 h h h+1 -1 B LR hh h+1 0 0 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 94 AVL Tree Thao tác điều chỉnh cây Ví dụ: thao tác xoay đơn LR 44 17 78 32 50 88 48 62 46 P P 1 LR P 44 17 50 32 78 48 62 46 P 1 88 48 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 95 AVL Tree Thao tác điều chỉnh cây h P P 1 B A C h h+1 -1 +1 LR Trường hợp (b): thử áp dụng phép xoay đơn LR ? P P 1 A C B hh+1 h Mất CB Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 96 AVL Tree Thao tác điều chỉnh cây Phép xoay kép Trái -Phải (DLR –Double Left –Right) A h P P 1 B 1 C h -1 +1 P 2 B 2 Trường hợp (b) [...]... Tp.HCM Spring 2004 103 AVL Tree Các đánh giá ! ! ! Độ cao của cây: hAVL < 1.44log2(N+1) Cây AVL có độ cao nhiều hơm 44% so với độ cao của 1 cây nhịphân tối ưu Chi phí tìm kiếm O(log2N) Chi phí thêm phần tử O(log2N) ! ! ! Tìm kiếm: O(log2N) Điều chỉnh cây: O(log2N) Chi phí xóa phần tử O(log2N) ! ! Spring 2004 Tìm kiếm: O(log2N) Điều chỉnh cây: O(log2N) Data Structure & Algorithm - Nguyen Tri Tuan -... Tp.HCM 98 49 AVL Tree Thao tác điều chỉnh cây P +1 P +1 +1 +1 P1 P1 h h A h A B h+1 C h+1 B C h (a) (b) Hai trường hợp cây bị mất cânbằng ở nhánh phải Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 99 AVL Tree Thao tác điều chỉnh cây Phương pháp xử lý cho trường hợp mất cânbằng ở nhánh phải: tương tự như các xử lý mất cânbằng ở nhánh trái Spring 2004 Data Structure... Tree Ví dụ tạo cây ! Tạo cây AVL với các khóa lần lượt là: 30, 20, 10,… 30 20 20 LR 10 30 10 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Spring 2004 101 AVL Tree Ví dụ tạo cây 20 20 30 10 15 40 25 27 30 10 15 40 26 DRL 25 27 26 …thêm 15, 40, 25, 27, 26 Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 102 51 AVL Tree Ví dụ tạo cây 20 20 DLR...AVL Tree Thao tác điều chỉnh cây P -1 P2 0 +1 P1 P2 h P1 DLR C h h A B1 P B1 A h B2 C B2 Trường hợp (b): áp dụng phép xoay kép Trái - Phải (DLR) Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM Spring 2004 97 AVL Tree Thao tác điều chỉnh cây 44 44 P P2 78 17 17 P1 32 88 50 62 DLR 62 P 50 32 P2 48 P1 48 78 54 88 54 Ví dụ: . Tp.HCM 77 Cây nhị phân tìm kiếm cân bằng (AVL Tree) ! Vì sao phải cân bằng ? ! Định nghĩa ! Ví dụ ! Mô tả cấu trúc dữ liệu ! Thao tác điều chỉnh cây ! Ví. Định nghĩa ! Cây AVL là: ! Một cây nhị phân tìm kiếm ! Mỗi nút p của cây đều thỏa: độ cao của cây con bên trái (p->pLeft) và độ cao của cây con bên phải