Cấu trúc dữ liệu : CÂY CÂN BẰNG part 2
Số trang: 5
Loại file: pdf
Dung lượng: 16.66 MB
Lượt xem: 13
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Trong 3 trường hợp lệch về bên trái, trường hợp T1 lệch phải là phức tạp nhất. Các trường hợp còn lại giải quyết rất đơn giản. Sau đây, ta sẽ khảo sát và giải quyết từng trường hợp nêu trên T/h 1.1: cây T1 lệch về bên trái. Ta thực hiện phép quay đơn Left-LeftT/h 1.2: cây T1 không lệch. Ta thực hiện phép quay đơn Left-Left
Nội dung trích xuất từ tài liệu:
Cấu trúc dữ liệu : CÂY CÂN BẰNG part 2Trường hợp 2: cây T lệch về bên phảiTa có các khả năng sau: Ta có thể thấy rằng các trường hợp lệch về bên phải hoàn toàn đốixứng với các trường hợp lệch về bên trái. Vì vậy ta chỉ cần khảo sát trường 7hợp lệch về bên trái. Trong 3 trường hợp lệch về bên trái, trường hợp T1 lệch phải là phứctạp nhất. Các trường hợp còn lại giải quyết rất đơn giản.Sau đây, ta sẽ khảo sát và giải quyết từng trường hợp nêu trênT/h 1.1: cây T1 lệch về bên trái. Ta thực hiện phép quay đơn Left-LeftT/h 1.2: cây T1 không lệch. Ta thực hiện phép quay đơn Left-Left 8Ttoán quay đơn Left-Left: B1: T là gốc; T1 = T->pLeft; T->pLeft = T1->pRight; T1->pRight = T; B2:// đặt lại chỉ số cân bằng Nếu T1->balFactor = LH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T1->balFactor = EH thì: T->balFactor = LH; T1->balFactor = RH; break; B3:// T trỏ đến gốc mới T = T1;T/h 1.3: cây T1 lệch về bên phải. Ta thực hiện phép quay kép Left-Right Do T1 lệch về bên phải ta không thể áp dụng phép quay đơn đã ápdụng trong 2 trường hợp trên vì khi đó cây T sẽ từ trạng thái mất cân bằngdo lệch trái thành mất cân bằng do lệch phải.Hình vẽ dưới đây minh họa phép quay kép áp dụng cho trường hợp này: 9Ttoán quay kép Left - Right B1: gốc T; T1 = T->pLeft; T2 = T1->pRight; T->pLeft = T2->pRight; T2->pRight = T;T1->pRight = T2->pLeft;T2->pLeft = T1; B2: //đặt lại chỉ số cân bằng Nếu T2->balFactor = LH thì: T->balFactor = RH; T1->balFactor = EH; break; Nếu T2->balFactor = EH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T2->balFactor = RH thì: T->balFactor = EH; T1->balFactor = LH; break;B3: T2->balFactor = EH; T = T2; 10 Lưu ý rằng, trước khi cân bằng cây T có chiều cao h+2 trong cả 3trường hợp 1.1, 1.2 và 1.3. Sau khi cân bằng, trong 2 trường hợp 1.1 và 1.3 cây có chiều cao h+1;còn ở trường hợp 1.2 cây vẫn có chiều cao h+2. Và trường hợp này cũng làtrường hợp duy nhất sau khi cân bằng nút T cũ có chỉ số cân bằng khác 0.Thao tác cân bằng lại trong tất cả các trường hợp đều có độ phức tạp O(1). Với những xem xét trên, xét tương tự cho trường hợp cây T lệch vềbên phải, ta có thể xây dựng 2 hàm quay đơn và 2 hàm quay kép sau:3.2.THÊM MỘT PHẦN TỬ TRÊN CÂY AVL: Việc thêm một phần tử vào cây AVL diễn ra tương tự như trênCNPTK. Tuy nhiên, sau khi thêm xong, nếu chiều cao của cây thay đổi, từ vịtrí thêm vào, ta phải tìm ngược lên gốc để kiểm tra các nút bị mất cân bằngkhông. Nếu có, ta phải cân bằng lại ở nút này. TToán: Giả sử cần thêm vào một nút mang thông tin X. 1. Tìm kiếm vị trí thích hợp để thêm nút X (đưa ra thông báo nếu đãcó nút X rồi) 2. Thêm nút X vào cây 3. Cân bằng lại cây.3.3. HỦY MỘT PHẦN TỬ TRÊN CÂY AVL: Cũng giống như thao tác thêm một nút, việc hủy một phần tử X rakhỏi cây AVL thực hiện giống như trên CNPTK. Chỉ sau khi hủy, nếu tínhcân bằng của cây bị vi phạm ta sẽ thực hiện việc cân bằng lại.Tuy nhiên việc cân bằng lại trong thao tác hủy sẽ phức tạp hơn. 11
Nội dung trích xuất từ tài liệu:
Cấu trúc dữ liệu : CÂY CÂN BẰNG part 2Trường hợp 2: cây T lệch về bên phảiTa có các khả năng sau: Ta có thể thấy rằng các trường hợp lệch về bên phải hoàn toàn đốixứng với các trường hợp lệch về bên trái. Vì vậy ta chỉ cần khảo sát trường 7hợp lệch về bên trái. Trong 3 trường hợp lệch về bên trái, trường hợp T1 lệch phải là phứctạp nhất. Các trường hợp còn lại giải quyết rất đơn giản.Sau đây, ta sẽ khảo sát và giải quyết từng trường hợp nêu trênT/h 1.1: cây T1 lệch về bên trái. Ta thực hiện phép quay đơn Left-LeftT/h 1.2: cây T1 không lệch. Ta thực hiện phép quay đơn Left-Left 8Ttoán quay đơn Left-Left: B1: T là gốc; T1 = T->pLeft; T->pLeft = T1->pRight; T1->pRight = T; B2:// đặt lại chỉ số cân bằng Nếu T1->balFactor = LH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T1->balFactor = EH thì: T->balFactor = LH; T1->balFactor = RH; break; B3:// T trỏ đến gốc mới T = T1;T/h 1.3: cây T1 lệch về bên phải. Ta thực hiện phép quay kép Left-Right Do T1 lệch về bên phải ta không thể áp dụng phép quay đơn đã ápdụng trong 2 trường hợp trên vì khi đó cây T sẽ từ trạng thái mất cân bằngdo lệch trái thành mất cân bằng do lệch phải.Hình vẽ dưới đây minh họa phép quay kép áp dụng cho trường hợp này: 9Ttoán quay kép Left - Right B1: gốc T; T1 = T->pLeft; T2 = T1->pRight; T->pLeft = T2->pRight; T2->pRight = T;T1->pRight = T2->pLeft;T2->pLeft = T1; B2: //đặt lại chỉ số cân bằng Nếu T2->balFactor = LH thì: T->balFactor = RH; T1->balFactor = EH; break; Nếu T2->balFactor = EH thì: T->balFactor = EH; T1->balFactor = EH; break; Nếu T2->balFactor = RH thì: T->balFactor = EH; T1->balFactor = LH; break;B3: T2->balFactor = EH; T = T2; 10 Lưu ý rằng, trước khi cân bằng cây T có chiều cao h+2 trong cả 3trường hợp 1.1, 1.2 và 1.3. Sau khi cân bằng, trong 2 trường hợp 1.1 và 1.3 cây có chiều cao h+1;còn ở trường hợp 1.2 cây vẫn có chiều cao h+2. Và trường hợp này cũng làtrường hợp duy nhất sau khi cân bằng nút T cũ có chỉ số cân bằng khác 0.Thao tác cân bằng lại trong tất cả các trường hợp đều có độ phức tạp O(1). Với những xem xét trên, xét tương tự cho trường hợp cây T lệch vềbên phải, ta có thể xây dựng 2 hàm quay đơn và 2 hàm quay kép sau:3.2.THÊM MỘT PHẦN TỬ TRÊN CÂY AVL: Việc thêm một phần tử vào cây AVL diễn ra tương tự như trênCNPTK. Tuy nhiên, sau khi thêm xong, nếu chiều cao của cây thay đổi, từ vịtrí thêm vào, ta phải tìm ngược lên gốc để kiểm tra các nút bị mất cân bằngkhông. Nếu có, ta phải cân bằng lại ở nút này. TToán: Giả sử cần thêm vào một nút mang thông tin X. 1. Tìm kiếm vị trí thích hợp để thêm nút X (đưa ra thông báo nếu đãcó nút X rồi) 2. Thêm nút X vào cây 3. Cân bằng lại cây.3.3. HỦY MỘT PHẦN TỬ TRÊN CÂY AVL: Cũng giống như thao tác thêm một nút, việc hủy một phần tử X rakhỏi cây AVL thực hiện giống như trên CNPTK. Chỉ sau khi hủy, nếu tínhcân bằng của cây bị vi phạm ta sẽ thực hiện việc cân bằng lại.Tuy nhiên việc cân bằng lại trong thao tác hủy sẽ phức tạp hơn. 11
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu tài liệu Cấu trúc dữ liệu đề cương Cấu trúc dữ liệu giáo trình Cấu trúc dữ liệu bài giảng Cấu trúc dữ liệuGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 318 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 162 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
57 trang 133 1 0
-
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 124 0 0 -
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 3 - Một số mô hình thuật toán
42 trang 74 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 73 0 0