Hành vi của giải thuật

Một phần của tài liệu cấu trúc dữ liệu chuong 9 (Trang 47 - 48)

3. Cây con tăng chiều cao vốn là cây con cao hơn cây con còn lại Khi đó sub_root sẽ có hai cây con có chiều cao chênh lệch là 2, không thỏa định

9.5.2.4.Hành vi của giải thuật

Số lần mà hàm avl_insert gọi đệ quy chính nó để thêm một nút mới có thể lớn bằng chiều cao của cây. Thoạt nhìn, dường như là mỗi lần gọi đệ quy đều dẫn đến một lần quay đơn hoặc quay kép cho cây con tương ứng, nhưng thực ra, nhiều nhất là chỉ có một phép quay (đơn hoặc kép) là được thực hiện. Để nhìn thấy điều này, chúng ta biết rằng các phép quay được thực hiện chỉ trong các hàm right_balance và left_balance, và các hàm này được gọi chỉ khi chiều cao của cây con có tăng lên. Tuy nhiên, khi các hàm này thực hiện xong, các phép quay đã làm cho chiều cao cây con trở về giá trị ban đầu, như vậy, đối với các lần gọi đệ quy trước đó chưa kết thúc, chiều cao cây con tương ứng sẽ không thay đổi, và sẽ không có một phép quay hay một sự thay đổi các thông số cân bằng nào nữa.

Phần lớn việc thêm vào cây AVL không dẫn đến phép quay. Ngay cả khi phép quay là cần thiết, nó thường xảy ra gần với nút lá vừa được thêm vào. Mặc dù giải thuật thêm vào một cây AVL là phức tạp, nhưng chúng ta có lý do để tin rằng thời gian chạy của nó không khác bao nhiêu so với việc thêm vào một cây nhị phân tìm kiếm bình thường có cùng chiều cao. Chúng ta còn có thể hy vọng rằng chiều cao của cây AVL nhỏ hơn rất nhiều chiều cao của cây nhị phân tìm kiếm bình thường, và như vậy cả hai việc thêm vào và loại bỏ nút sẽ hiệu quả hơn nhiều so với cây nhị phân tìm kiếm bình thường.

Một phần của tài liệu cấu trúc dữ liệu chuong 9 (Trang 47 - 48)