Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p8

5 7 0
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p8

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

Thông tin tài liệu

Tham khảo tài liệu ''giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p8'', công nghệ thông tin, cơ sở dữ liệu phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

O W N y bu k lic } delete DelNode; return (1); } d Hủy toàn cây: Thao tác đơn giản việc thực nhiều lần thao tác hủy nút nhị phân tìm kiếm trở thành rỗng Hàm BST_Delete có prototype: void BST_Delete(BST_Type &BS_Tree); Hàm thực việc hủy tất nút nhị phân tìm kiếm BS_Tree void BST_Delete(BST_Type &BS_Tree) { BST_Type DelNode = BS_Tree; while (BST_Delete_Node_TRS(BS_Tree, DelNode->Key) == 1) DelNode = BS_Tree; return; } 5.3 Caây cân (Balanced Tree) 5.3.1 Định nghóa – Cấu trúc liệu a Định nghóa: - Cây cân tương đối: Theo Adelson-Velskii Landis đưa định nghóa cân tương đối sau: Cây cân tương đối 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 Cây cân tương đối gọi AVL (AVL tree) - Cây cân hoàn toàn: Cây cân hoàn toàn 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 Như vậy, cân hoàn toàn chắn cân tương ñoái Trang: 188 d o m w if (PrMLNode == DelNode) PrMLNode->BST_Right = MLNode->BST_Right; else PrMLNode->BST_Left = MLNode->BST_Right; MLNode->BST_Right = NULL; DelNode = MLNode; o m o c C k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật lic C c u -tr a c k w w d o w to to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c c u -tr a c k O W N y bu k lic b Caáu trúc liệu cân bằng: Để ghi nhận mức độ cân nút gốc sử dụng thêm thành phần Bal cấu trúc liệu nút Do vậy, cấu trúc liệu nhị phân tìm kiếm cân tương đối nhị phân tìm kiếm cân hoàn toàn nói riêng cân nói chung tương tự cấu trúc liệu nhị phân ngoại trừ đưa thêm thành phần Bal làm số cân nút sau: typedef struct BAL_Node { T Key; int Bal; // Chỉ số cân nút gốc BAL_Node * BAL_Left; // Vùng liên kết quản lý địa nút gốc trái BAL_Node * BAL_Right; // Vùng liên kết quản lý địa nút gốc phải } BAL_OneNode; typedef BAL_OneNode * BAL_Type; Để quản lý nhị phân tìm kiếm cân cần quản lý địa nút gốc cây: BAL_Type BALTree; 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 Như vậy, nút nhị phân mà thỏa mãn điều kiện -1 ≤ Bal ≤ cân phạm vi từ –1 đến +1 phạm vi cho phép số cân Bal: + Nếu Bal = 0: trái phải + Nếu Bal = -1: trái nhỏ (thấp hơn) phải (lệch phải) + Nếu Bal = +1: trái lớn (cao hơn) phải (lệch trái) 5.3.2 Các thao tác Trong phạm vi phần xem xét thao tác nhị phân tìm kiếm cân tương đối Các thao tác cân hoàn toàn sinh viên tự vận dụng tương tự Do vậy, trình bày thao tác mà nói tới cân nghóa nhị phân tìm kiếm cân xét nhị phân tìm kiếm trường hợp không trùng khóa nhận diện Trong thao tác nhị phân tìm kiếm cân tương đối có hai thao tác Thêm nút vào Hủy nút khỏi hai thao tác phức tạp có nguy phá vỡ cân cây, phải thực việc cân lại Các thao tác khác hoàn toàn tương tự nhị phân nói chung nhị phân tìm kiếm nói riêng Do vậy, phần trình bày hai thao tác mà Trang: 189 d o m o c C w o m C lic k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật w w d o w to to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c O W N y bu to lic a Thêm nút vào cân bằng: Giả sử cần thêm nút NewNode có thành phần liệu NewData vào cân BALTree cho sau thêm BALTree cân Để thực điều trước hết tìm kiếm vị trí nút cần thêm nút trái nút phải nút PrNewNode tương tự nhị phân tìm kiếm Sau thêm NewNode vào trái phải PrNewNode số cân nút từ PrNewNode trở nút trước bị thay đổi dây chuyền phải lần ngược từ PrNewNode theo nút trước để theo dõi thay đổi 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: Goï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 ⇒ Cây có nút gốc AncestorNode vào ba dạng sau: a1) AncRL có chiều cao h AncRR có chiều cao h+1 (AncR->Bal = -1) AncestorNode AncL -2 AncR AncRL -1 AncRR h h h+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) Caây AncestorNode sau quay caây phải AncR cân Ví dụ: Việc thêm nút có Key = 50 vào nhị phân tìm kiếm cân sau làm cho cân phải cân lại theo trường hợp này: Trang: 190 d o m o c C w o c u -tr a c k w k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật w w d o m C lic k to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c O W N y bu to lic BALTree 25 -1 19 NULL 40 NULL 30 NULL 44 NULL NULL NULL Để thực cân lại phép quay đơn thực bước sau: B1: AncestorNode->BAL_Right = AncR->BAL_Left AncestorNode AncL -2 AncR -1 AncRR h h h+1 B2: AncR->BAL_Left = AncestorNode AncestorNode AncL -2 AncR -1 AncRR h h h+1 B3: AncR->Bal = AncestorNode->Bal = Trang: 191 d o m o c C w o c u -tr a c k w k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật w w d o m C lic k to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c O W w N y bu to c AncR AncL 0 AncRR AncRL h h h+1 Chuyển vai trò AncR cho AncestorNode: AncestorNode = AncR Kết sau phép quay: AncestorNode AncR AncL AncRR AncRL h h h+1 Ví dụ: Thêm nút có Key = 50 vào nhị phân tìm kiếm cân sau đây: BALTree 25 -1 19 NULL 40 NULL NULL 30 44 NULL NULL NULL Cây nhị phân tìm kiếm cân sau thêm nút có Key = 50 sau: Trang: 192 d o m w Việc quay kết thúc, trở thành cân AncestorNode C lic k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật o o c u -tr a c k w w d o m C lic k to bu y N w w w h a n g e Vi e ! XC er O W F- w PD h a n g e Vi e ! XC er PD F- c u -tr a c k c ... bu k lic b Cấu trúc liệu cân bằng: Để ghi nhận mức độ cân nút gốc sử dụng thêm thành phần Bal cấu trúc liệu nút Do vậy, cấu trúc liệu nhị phân tìm kiếm cân tương đối nhị phân tìm kiếm cân hoàn... tương tự nhị phân nói chung nhị phân tìm kiếm nói riêng Do vậy, phần trình bày hai thao tác mà Trang: 189 d o m o c C w o m C lic k Giáo trình: Cấu Trúc Dữ Liệu Giải Thuật w w d o w to to bu y N... phần xem xét thao tác nhị phân tìm kiếm cân tương đối Các thao tác cân hoàn toàn sinh viên tự vận dụng tương tự Do vậy, trình bày thao tác mà nói tới cân nghóa nhị phân tìm kiếm cân xét nhị phân

Ngày đăng: 10/05/2021, 23:28

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan