Cây nhị phân tìm kiếm cân bằng (AVL Tree)

14 2.5K 18
Cây nhị phân tìm kiếm cân bằng (AVL Tree)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

39 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN 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í 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ân bằng ? ! Cây BST có thể không cân bằ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ân bằ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ân bằng ? ! Cây AVL là 1 dạng cây BST cân bằ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ây cân bằng động đầu tiên được đề xuất ! Cây AVL không có độ cân bằ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â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 (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ân bằng (cây con trái cao bằng câ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ân bằ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ân bằ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ân bằ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ân bằng à cần điều chỉnh cho đến khi không còn nút nào bị mất cân bằ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ân bằ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ân bằ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ân bằ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ân bằ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ân bằng ở nhánh phải: tương tự như các xử lý mất cân bằ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

Ngày đăng: 26/10/2013, 00:20

Hình ảnh liên quan

! Đây là mô hình cây cân bằng động đầu tiên - Cây nhị phân tìm kiếm cân bằng (AVL Tree)

y.

là mô hình cây cân bằng động đầu tiên Xem tại trang 2 của tài liệu.
Vì sao phải cân bằng ? - Cây nhị phân tìm kiếm cân bằng (AVL Tree)

sao.

phải cân bằng ? Xem tại trang 2 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan