Cây nhị phân tìm kiếm cân băng
(AVL Tree)
!_ Vì sao phải cân băng 2
!_ Định nghĩa
! Ví dụ
! Mô tả câu trúc dữ liệu
!_ Thao tác điều chỉnh cây
| Vi du tao cay
!_ Các đánh giá
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 77
AVL Tree
Vì sao phải cân bằng 2
!_ Cây BST có thê không cân băng
Cây bị lệch
Chi phi O(N)
Truong hop nao cay BST tré nén bị lệch 2
Can có l phương
pháp đề duy trì độ cân
bang cho cay !
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 78
39
Trang 2AVL Tree
Vì sao phải cân bằng 2
! Cây AVL là I dạng cây BST cân băng
| Cau trtic cay AVL do 3 tac gia: Adelson,
Velskii, Landis dé xuat nam 1962
! Đây là mô hình cây cân băng động đầu tiên
duoc dé xuat
| Cay AVL khong 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á I
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 79
AVL Tree
Dinh nghia
|! Cay AVL la:
! 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 trai (p->pLeft) va độ cao của cay con bên phải (p->pRight) chênh lệch nhau không qua 1
Vpée Tay: abs (h p->pLeft —h p->pRight) S1
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 80
40
Trang 3AVL Tree
Vi du
Cay AVL?
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 81
AVL Tree
Mô tả câu trúc đữ liệu
! Thêm vào mỗi nút trong cây 1 field Bai,
dién ta trạng thái của nút đó:
| Bal =-I: nut léch trái (cây con trái cao hơn
cây con phải)
| Bal = 0: nut can bang (cay con trai cao bang
cay con phai)
| Bal = +41: nut lệch phải (cây con phải cao hơn
cây con trái)
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 82
4]
Trang 4AVL Tree
Mô tả câu trúc đữ liệu
Gy!
1 —_
„ ‘Ny 0 0 0
Hệ sô cân
các nút 0 0
trong cay
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 83
AVL Tree
Mô tả câu trúc đữ liệu
AVL_TREE
pRoot <z> Count
Data Bal
Dk pLeft Right
cây con trái ia AVLT_NODE dậy con phai
Data Bal Data Bal
pLeft pRight pLeft pRight
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 84
42
Trang 5AVL Tree
Mô tả câu trúc đữ liệu
// Định nghĩa các cầu trúc dữ liệu
typedef struct tagAVLT_NODE {
int Data;
int Bal; — // 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é dén nut con phai
} AVLT_NODE; // Cau tric nut cla cay AVL
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 85
AVL Tree
Mô tả câu trúc đữ liệu
// Định nghĩa các câu trúc dữ liệu (tiếp theo)
typedef struct AVL_TREE {
AVLT_NODE *pRoot; / con trỏ đến nút sốc
\; // Cau tric cay AVL
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 86
43
Trang 6AVL 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 tim 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 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 87
AVL Tree
Thao tác điêu chỉnh cây
phân tử làm
cay mat can
bang tai nut
P
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 88
44
Trang 7AVL Tree
Thao tác điêu chỉnh cây
| [Delete — X6a 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 tim 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 tac đ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 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 89
AVL Tree
Thao tác điêu chỉnh cây
I Ví dụ: xóa
phân tử làm
cay mat can
bang tai nut
P
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 90
45
Trang 8AVL 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 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 91
AVL Tree
Thao tác điêu chỉnh cây
PỊI+ PI-1
(a) (b) Hai trường hợp cây bị mât cân băng ở nhánh trái
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 92
46
Trang 9AVL 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) Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 93
AVL Tree
Thao tác điêu chỉnh cây
Vi du: thao tác xoay đơn LR
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 94
47
Trang 10AVL Tree
Thao tác điêu chỉnh cây
A l }
a
lễ |
Truong hop (b): thu 4p dung phép xoay don LR ?
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 95
AVL Tree
Thao tác điêu chỉnh cây
Phép xoay kép Trái - Phải
(DLR — Double Left — Right)
Trường hợp (b) Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 96
48
Trang 11AVL Tree
Thao tác điêu chỉnh cây
Trường hợp (b): áp dụng phép xoay kép Trái - Phải
(DLR) Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 97
AVL Tree
Thao tác điêu chỉnh cây
Vi du: thao tac xoay kép DLR Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT DH KHTN Tp.HCM 98
Trang 12
AVL Tree
Thao tác điêu chỉnh cây
P l+1
a +1
Pi
(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 DH 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 & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 100
SO
Trang 13AVL Tree
Vi du tao cay
| Tao cay AVL voi cdc khéa 1an luot 1a:
30, 20, 10,
(30)
vÐ
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 101
AVL Tree
Vi du tao cay
[[bRL)
thém 15, 40, 25, 27, 26
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 102
51
Trang 14AVL Tree
Vi du tao cay
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 103
thêm 5, 13, 14
AVL Tree
Cac danh gia
| D6 cao cua cay: hyyy, < 1.44log,(N+1) Cay AVL
có độ cao nhiêu hom 44% so voi dO cao cua | cay
nhị phân tôi ưu
!_ Chi phí ìm kiếm O(og;N)
| Chi phi thém phan tir O(log,N)
| Tim kiém: O(log,N)
| Diéu chinh cây: O(og›N)
!_ Chi phí xóa phần tử O(og;N)
!_ Tìm kiếm: O(og;N)
¡_ Điều chỉnh cây: O(og›N)
Spring 2004 Data Structure & Algorithm - Nguyen Tri Tuan - Khoa CNTT BH KHTN Tp.HCM 104
52