1. Trang chủ
  2. » Thể loại khác

chuong-7cay-can-bang

37 6 0

Đ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

Thông tin cơ bản

Tiêu đề Cây Cân Bằng
Định dạng
Số trang 37
Dung lượng 426 KB

Nội dung

PowerPoint Presentation 1 3 Cây cân bằng (Balanced Tree) 3 1 Định nghĩa – Cấu trúc dữ liệu  Cây cân bằng tương đối  Là cây nhị phân thỏa mãn điều kiện là đối với mọi nút của cây thì chiều cao của câ[.]

3 Cây cân (Balanced Tree) 3.1 Định nghĩa – Cấu trúc liệu  Cây cân tương đối:  Là nhị phân thỏa mãn điều kiện nút chiều cao trái chiều cao phải nút khơng q (theo định nghĩa Adelson-Velskii Landis)  Cây cân tương đối gọi AVL (AVL Tree)  Cây cân hoàn toàn:  Là nhị phân thỏa mãn điều kiện nút số nút trái số nút phải nút không  Cây nhị phân cân hoàn toàn nhị phân cân tương đối Ví dụ: AVL Tree AVL Tree 3.1 Định nghĩa – Cấu trúc liệu (tt)  Để ghi nhận mức độ cân nút gốc con, dùng thêm thành phần Bal cấu trúc liệu nút typedef struct BALNode { T Key; int Bal; BALNode *BALLeft; BALNode *BALRight; }BALOneNode; typedef BALOneNode * BALType;  Để quản lý cân bằng, cần quản lý địa nút gốc BALType BALTree; 3.1 Định nghĩa – Cấu trúc liệu (tt)  Giá trị số cân Bal nút gốc cân tương đối hiệu số chiều cao trái chiều cao phải nút  Giá trị số cân Bal nút gốc cân hoàn toàn = hiệu số số nút trái số nút phải nút  Nếu nút nhị phân mà thỏa mãn điều kiện -1 Bal = -1)  AncRL AncRR có chiều cao h+1 (AncR->Bal = 0)  AncRL có chiều cao h+1 AncRR có chiều cao h (AncR->Bal = 1) 3.2.a Thêm nút vào cân  Nếu phát nút AncestorNode có thay đổi vượt phạm vi cho phép (bằng –2 +2) tiến hành cân lại nút AncestorNode  Việc cân lại nút AncestorNode tiến hành cụ thể theo trường hợp sau: Trường hợp 1: Nếu AncestorNode->Bal = -2:  AncRL có chiều cao h AncRR có chiều cao h+1 (AncR->Bal = -1)  AncRL AncRR có chiều cao h+1 (AncR->Bal = 0)  AncRL có chiều cao h+1 AncRR có chiều cao h (AncR->Bal = 1) 3.2.a (tt) Trường hợp 1: Nếu AncestorNode->Bal = -2: (lệch phải) Gọi: AncL = AncestorNode->BAL_Left AncR = AncestorNode->BAL_Right =>AncL có chiều cao h AncR có chiều cao h+2 (h 0) =>Có AncR có chiều cao h+1 Gọi: AncRL = AncR->BAL_Left AncRR = AncR->BAL_Right 3.2.a (tt) Trường hợp 1: Nếu AncestorNode->Bal = -2: a1) AncRL có chiều cao h AncRR có chiều cao h+1 (AncR->Bal = -1) Để cân lại AncestorNode, thực việc  quay đơn phải AncR nút lên thành nút gốc;  chuyển AncestorNode thành nút trái nút gốc AncestorNode có hai AncL AncRL (BAL_Right Rotation) Cây AncestorNode sau quay phải AncR cân 3.2.a (tt) Trường hợp 1: Nếu AncestorNode->Bal = -2: a1) AncRL có chiều cao h AncRR có chiều cao h+1 (AncR->Bal = -1) 10 3.2.a (tt)Trường hợp 2: Nếu AncestorNode->Bal = 2: b2) AncLL AncLR có chiều cao h+1 (AncL->Bal = 0) 23  Vd 2.b: 35 50 35 20 10 20 70 50 10 40 40 70 44 44 24 3.2.a (tt) Trường hợp 2: Nếu AncestorNode->Bal = 2: c2) AncLL có chiều cao h AncLR có chiều cao h+1 (AncL>Bal = -1)  Tương tự T1.3), việc cân lại AncestorNode thực thông qua phép quay kép: quay phải AncLR quay trái AncL (Double Rotation) Việc quay tiến hành: Gọi: AncLRL = AncLR->BAL_Left AncLRR = AncLR->BAL_Right => AncLRL AncLRR có chiều cao tối đa h 25

Ngày đăng: 20/04/2022, 16:44

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

TÀI LIỆU LIÊN QUAN

w