1. Trang chủ
  2. » Công Nghệ Thông Tin

[11]Avl.pdf

6 2 0

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

THÔNG TIN TÀI LIỆU

Nội dung

CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>CTDL>

12/13/2018 ĐẶT VẤN ĐỀ  Vẽ nhị phân tìm kiếm lập từ dãy sau CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Data Structures & Algorithms theo chiều từ trái sang phải: 1, 3, 5, 6, 7, CÂY CÂN BẰNG – AVL Khái niệm AVL Cây AVL – Ví dụ  Cây cân AVL nhị phân tìm kiếm mà đỉnh cây, độ cao trái phải chênh lệch không  Do G.M Adelsen Velskii E.M Lendis đưa vào năm CÂY AVL ? 1962, đặt tên AVL Cấu trúc AVL Cấu trúc AVL  Cây cân AVL nhị phân tìm kiếm bổ sung giá trị cho biết cân struct node { KDL Key; struct node *pLeft; struct node *pRight; int bal; }; typedef struct node TNode;  Chỉ số cân node: hiệu số chiều cao phải trái  Đối với AVL: số cân nút mang ba giá trị sau Trong bal số cân  CSCB(p) =0 Nếu Độ cao phải = độ cao trái (EH)  CSCB(p) =1 Nếu Độ cao phải > độ cao trái (RH)  CSCB(p) =-1 Nếu Độ cao phải < độ cao trái (LH) #define EH #define RH #define LH -1 typedef TNode* AVL; 12/13/2018 Các trường trường hợp cân Các thao tác AVL Left - Left  Thêm phần tử vào AVL  Giống NPTK, nhiên sau thêm phải cân lại  Hủy phần tử AVL  Giống NPTK, nhiên sau hủy phải cân Right- Right lại  Cân lại vừa bị cân (Rotation) Các trường trường hợp cân Các trường trường hợp cân Left- Right  Giả sử node xảy cân phải (cây phải chênh lệch với trái 1) RR RL Right- Left Các trường trường hợp cân 10 Các trường hợp cân  Mất cân phải- phải (R-R) RR T L RL L T1 L1 T T1 T2 R1 L21 R1 R21 11 12 12/13/2018 Các trường hợp cân Các trường trường hợp cân  Mất cân phải- trái(R-L)  Giả sử node xảy cân trái(cây trái chênh lệch với trái 1) LL LR 13 Các trường trường hợp cân 14 Các trường hợp cân  Mất cân trái trái (L-L) LL LR T T1 L1 R R1 T T1 R T2 L1 L21 R21 15 Các trường hợp cân 16 Xử lý trường hợp cân  Mất cân trái- phải (L-R)  Mất cân LL P  Quay phải Q b P a T2 T1 T3 17 18 12/13/2018 Xử lý trường hợp cân Xử lý trường hợp cân  Mất cân LL P  Quay phải  Mất cân LL P  Quay phải 12 9 20 12 10 10 20 5 19 Xử lý trường hợp cân 20 Xử lý trường hợp cân  Mất cân LL T  Quay phải  Mất cân LL T  Quay phải 21 Xử lý trường hợp cân void rotateLL ( AVLTree &T) { AVLNode * T1 = T-> pLeft ; T->pLeft = T1->pRight ; T1-> pRight = T; switch( T1-> balFactor ) { case LH: T-> balFactor = EH; T1-> balFactor = EH; break ; case EH: T-> balFactor = LH; T1-> balFactor = RH; break ; } T = T1; } 22 Xử lý trường hợp cân  Mất cân RR P  Quay trái  Mất cân RR P  Quay trái 23 24 12/13/2018 Xử lý trường hợp cân  Mất cân LR P  Quay Trái Q Phải P Xử lý trường hợp cân P  Mất cân RR P  Quay trái P void rotateRR(AVLTree &T) { AVLNode * T1 = T-> pRight ; T->pRight = T1-> pLeft ; T1-> pLeft = T; switch ( T1-> balFactor ) { case RH: T-> balFactor = EH; T1-> balFactor = EH; break ; case EH: T-> balFactor = RH; T1-> balFactor = LH; break ; } T = T1; } b b Q Q C a h T1 T1 a T2 h c T4 T4 T3 25 T2 h Xử lý trường hợp cân  Mất cân LR P  Quay Trái Q Phải P T3 Bước 1: Quay trái Q 26 h-1 Xử lý trường hợp cân  Mất cân LR P b C Q C b a T1 a T2 T3 T4 T1 T2 T3 T4 Bước 2: Quay phải P 27 28 Xử lý trường hợp cân Xử lý trường hợp cân  Mất cân LR 55  Quay Trái 19 Phải 55  Mất cân LR 55  Quay Trái 19 Phải 55 55 55 55 23 69 69 19 23 69 23 55 19 19 19 23 69 4 20 20 20 20 30 29 12/13/2018 Xử lý trường hợp cân Xử lý trường hợp cân  Mất cân LR T  Quay Trái T1 Phải T  Mất cân LR T  Quay Phải Trái void rotateLR(AVLTree &T) { AVLNode * T1 = T-> pLeft ; AVLNode * T2 = T1-> pRight ; T-> pLeft = T2-> pRight ; T2-> pRight = T; T1-> pRight = T2-> pLeft ; T2-> pLeft = T1; switch (T2-> balFactor ) { case LH: T-> balFactor = RH; T1-> balFactor = EH; break ; case EH: T-> balFactor = EH; T1-> balFactor = EH; break ; case RH: T-> balFactor = EH; T1-> balFactor = LH; break ; } T2-> balFactor = EH; T = T2; } 31 32 33 34 Slide tham khảo từ • Slide tham khảo từ: • Slide CTDL GT, Khoa Khoa Học Máy Tính, ĐHCNTT • Congdongcviet.com • Cplusplus.com

Ngày đăng: 25/02/2023, 15:26

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN