Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL trình bày một số vấn đề của cây nhị phân tìm kiếm, cây nhị phân tìm kiếm cân bằng, các phép biến đổi, thuật toán DSW,... Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1CẤU TRÚC DỮ LIỆU
CÂY AVL
Bùi Tiến Lên01/01/2017
Trang 2Một số vấn đề của cây nhị phân tìm kiếm
Vấn đề
Khi thực hiện các thao tác trên cây nhị phân tìm kiếm chẳng hạnnhư thêm, xóa có thể dẫn đến cây mất cân bằng Dẫn đến cây nhịphân tìm kiếm không còn hiệu quả
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 3Một số vấn đề của cây nhị phân tìm kiếm (cont.)
Ví dụ 1
Tạo cây nhị phân tìm kiếm từ dãy các số {4, 3, 2, 1} ta sẽ được
4 3 2 1
Hình 1:Cây tuyến tính
Trang 4Cây nhị phân tìm kiếm cân bằng
Định nghĩa 1
h = log2(n + 1) với n là số nút của cây
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 5Cây nhị phân tìm kiếm cân bằng (cont.)
Ví dụ 2
Cây hoàn chỉnh là một cây cân bằng tối ưu
Hình 2:Cây nhị phân tìm kiếm hoàn chỉnh
Trang 6Cây nhị phân tìm kiếm cân bằng (cont.)
Ý tưởng
Có hai chiến lược cân bằng:
Đa số kỹ thuật sử dụng biến đổi xoay để cân bằng lại
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 7Các phép biến đổi
Để duy trì được sự cân bằng trong cây T, các nhà lập trình
thường sử dụng các phép biến đổi sau
Định lý 1
Các phép biến đổi xoay trái và xoay phải không làm mất đi tính chất “tìm kiếm” của cây
Trang 8Các phép biến đổi (cont.)
(b) sau khi xoay
Hình 3:Thao tác xoay trái
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 9Các phép biến đổi (cont.)
(b) sau khi xoay
Hình 4:Thao tác xoay phải
Trang 10Các phép biến đổi (cont.)
15 6
3
7 13 9
18
17 19
15 7
6 3
13 9
Trang 11Các phép biến đổi (cont.)
15 6
3
7 13 9
18
17 19
6 3
15 7
13 9
18
17 19
Hình 6:Xoay phải 6 và 15
Trang 12Thuật toán DSW
Ý tưởng
Thuật toán được Quentin F Stout và Bette L Warren đề xuấtdựa trên công trình của Colin Day Đây là thuật toán được hoạtđộng theo từng chu kỳ hoạt động
Trang 13Thuật toán DSW (cont.)
createBackbone(root)
p ← root
while(p 6= null)
if p có con nút con trái c
xoay p với c và hoán đổi vai trò
else
di chuyển p đến nút con phải
Trang 14Thuật toán DSW (cont.)
createPerfectTree()
n ← số lượng nút
m ← 2blog 2n+1c− 1
thực hiện xoay trái n − m lần bắt đầu
từ đỉnh của cây backbone dọc theo hướng phải
while (m > 1)
m ← m/2
thực hiện xoay trái m lần bắt đầu từ đỉnh
của cây backbone dọc theo hướng phải
Spring 2017 Data structure & Algorithm 14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 15Đánh giá
Việc duy trì một cây cân bằng tối ưu đòi hỏi chi phí rất lớn Do
đó, trong thực tế các loại cây cân bằng theo từng thao tác cậpnhật phổ biến hơn vì chi phí để duy trì ít tốt kém hơn
Trang 16Cây nhị phân cân bằng AVL
Lịch sử
M Adelson-Velskii và E M Landis đề xuất vào năm 1962[Sedgewick, 2002]
Spring 2017 Data structure & Algorithm 16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 17Cây nhị phân cân bằng AVL (cont.)
Định nghĩa 2
Cây cân bằng AVL là cây nhị phân tìm kiếm sao cho
trái và cây con phải không chênh lệch quá 1”
∀p : |h (p → left) − h (p → right)| ≤ 1 (1)
Trang 18Cấu trúc dữ liệu động cho nút cây AVL
Nút của cây AVL có thể được biểu diễn bằng một lớp như sau
Trang 19Cấu trúc dữ liệu động cho nút cây AVL (cont.)
trạng thái cân bằng tại nút đó
cao hơn cây con phải
nhau
hơn cây con trái
Trang 20Thao tác thêm một nút
thêm nút Khi thêm một nút vào cây AVL có thể làm cây mấtcân bằng Do đó cần thực hiện
cây tại nút này
Spring 2017 Data structure & Algorithm 20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 21Thuật toán cân bằng lại cây AVL
xảy ra một trong bốn trường hợp sau tương ứng với bốn hình vẽ:
Trang 22Thuật toán cân bằng lại cây AVL (cont.)
Trang 23Thuật toán cân bằng lại cây AVL (cont.)
Hiệu chỉnh cân bằng cho trường hợp 1
Trang 24Thuật toán cân bằng lại cây AVL (cont.)
Hiệu chỉnh cân bằng cho trường hợp 2
Spring 2017 Data structure & Algorithm 24
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 25Thuật toán cân bằng lại cây AVL (cont.)
Trang 26Minh họa thêm một nút
44 17
32
78 50
48 62
88
(a)trước khi thêm
44 17 32
78 50
48 62 54 88
(b) sau khi thêm
Hình 8:Thêm nút 54 vào cây AVL
Spring 2017 Data structure & Algorithm 26
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 27Minh họa thêm một nút (cont.)
44 17
32
78 50
48 62 54 88
(a)trước khi xoay
44 17 32
78 62 50
48 54
88
(b) sau khi xoay
Hình 9:Mất cân bằng tại nút 78 → xoay nút 50 và 62
Trang 28Minh họa thêm một nút (cont.)
44 17
32
78 62 50
48 54
88
(a)trước khi xoay
44 17
32
62 50
48 54
78 88
(b) sau khi xoay
Hình 10:Mất cân bằng tại nút 78 → xoay nút 62 và 78
Spring 2017 Data structure & Algorithm 28
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 29Thao tác xóa một nút
Khi xóa một nút của cây AVL có thể làm cây mất cân bằng.Vậy cần phải cân bằng lại
lại
Trang 30Minh họa xóa một nút
44 17
32
78 50
48 62
88
(b) sau khi xóa
Hình 11:Xóa nút 32 khỏi cây AVL
Spring 2017 Data structure & Algorithm 30
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 31Minh họa xóa một nút (cont.)
44
17 78 50
(b) sau khi xoay
Hình 12:Cây mất cân bằng tại nút 44 → xoay 50 với 78
Trang 32Minh họa xóa một nút (cont.)
17 48
78
62 88
(b) sau khi xoay
Hình 13:Cây mất cân bằng tại nút 44 → xoay 50 với 44
Spring 2017 Data structure & Algorithm 32
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 34Định lý về chiều cao cây AVL
Trang 35Định lý về chiều cao cây AVL (cont.)
!n#
Trang 36Định lý về chiều cao cây AVL (cont.)
Định lý 4
Chiều cao của cây AVL gần với chiều cao tối ưu
Chứng minh
Sinh viên hãy tự chứng minh
Spring 2017 Data structure & Algorithm 36
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 37Đánh giá cây AVL
Phân tích chi phí thực hiện theo n (số lượng nút của cây)
Trang 38Tài liệu tham khảo