Để xóa một nút trong cây nhị phân, chúng ta phải tìm kiếm nút đó là gì. Đó là có thể trong tối thiểu O (log N) và tối đa O (N). Tùy thuộc vào nút, chúng ta phải sắp xếp lại các con trỏ. Làm cách nào để tính toán độ phức tạp của thời gian đó.Độ phức tạp về thời gian của việc xóa một nút trong cây nhị phân
Trả lời
Hầu hết sự phức tạp là tìm kiếm nút. Một khi nó đã được tìm thấy - miễn là nút cha được giữ lại, nó chỉ là một vài nhiệm vụ nữa để xóa nút. Vì vậy, nó là một thứ tự liên tục.
Điều đó tùy thuộc vào cách bạn thực hiện xóa. Cách phổ biến nhất liên quan đến việc tìm kiếm người kế thừa của nút, sau đó thay thế nút với người kế nhiệm đó. Điều này có thể được thực hiện trong O (h), trong đó h là chiều cao của cây. Trong trường hợp xấu nhất này là O (n), nhưng trong một cây cân bằng là trường hợp xấu nhất O (lg n).
Bạn nhận được "thời gian tìm kiếm tồi tệ nhất ở mức tối đa O (N)" ở đâu? Điều đó sẽ không bao giờ xảy ra trong BST. Tại tồi tệ nhất, nó phải là tối đa O (h) cho tìm kiếm và xóa, trong đó 'h' là chiều cao của cây. Xem số này helpful article.
O (h) có thể là O (n) trong cây thoái hóa bệnh. – templatetypedef
Có phức tạp trường hợp tốt nhất là O (logn) (khi hoàn toàn cân bằng) và
tồi tệ nhất trường hợp phức tạp là O (n)
1 - 2 - 3 - 4
Nhưng vấn đề chính với xóa BST (Hibbard Deletion) là nó không đối xứng. Sau nhiều lần chèn và xóa BST trở nên ít cân bằng hơn. Các nhà nghiên cứu đã chứng minh rằng sau khi đủ số lượng chèn ngẫu nhiên và chiều cao xóa của cây trở thành sqrt (n). vì vậy bây giờ mọi hoạt động (tìm kiếm, chèn, xóa) sẽ mất sqrt (n) thời gian không tốt so với O (logn).
Đây là vấn đề mở rất dài (khoảng 50 năm) để xóa đối xứng hiệu quả đối với BST. đối với cây cân bằng được đảm bảo, chúng tôi phải sử dụng RedBlack Tree, v.v.
- 1. Độ phức tạp thời gian của random.sample
- 2. Độ phức tạp về thời gian đếm
- 3. Độ phức tạp về thời gian của erlang dict
- 4. Độ phức tạp về thời gian của system.out.println
- 5. Độ phức tạp về thời gian được đặt trong Java
- 6. Độ phức tạp của thời gian nguyên trong Haskell
- 7. Độ phức tạp về thời gian đối với java ArrayList
- 8. Độ phức tạp về thời gian tìm kiếm nhị phân đối với mảng không được phân loại
- 9. Độ phức tạp về thời gian của thuật toán đồ thị độ sâu đầu tiên
- 10. Độ phức tạp của thời gian đi qua cây là gì?
- 11. Độ phức tạp thời gian của thuật toán Prim
- 12. Độ phức tạp truyền tải trong đơn hàng trong cây tìm kiếm nhị phân (sử dụng trình vòng lặp)?
- 13. Độ phức tạp về thời gian chứa (Object o), trong ArrayList của các đối tượng
- 14. Độ phức tạp về thời gian của chuỗi con của Java()
- 15. Độ phức tạp về thời gian của thuật toán của Fleury
- 16. Độ phức tạp của thời gian chạy bảng Hash (chèn, tìm kiếm và xóa)
- 17. Haskell GHC: độ phức tạp về thời gian của một mẫu khớp với N constructors là bao nhiêu?
- 18. Độ phức tạp về thời gian của thuật toán đệ quy
- 19. Đặt thời gian và tốc độ phức tạp
- 20. Thời gian phức tạp của phương pháp HashMap
- 21. Độ phức tạp về thời gian truy cập vào Python dict
- 22. Tại sao Java không bao gồm độ phức tạp về thời gian/không gian của mỗi hàm trong javadoc?
- 23. Độ phức tạp thời gian tiệm cận của việc chèn phần tử n vào đống nhị phân đã chứa các phần tử n
- 24. Một công cụ để tính toán độ phức tạp thời gian lớn của mã Java?
- 25. Sắp xếp các phần tử trong cây nhị phân
- 26. Các công cụ phân tích phức tạp mã vượt quá độ phức tạp của chu trình
- 27. phân tích cú pháp một biểu thức logic phức tạp trong pyparsing theo kiểu cây nhị phân
- 28. Thời gian phức tạp của Sieve of Eratosthenes thuật toán
- 29. Cân bằng một cây nhị phân (AVL)
- 30. Phân tích các thuật toán cho độ phức tạp thời gian
+1, Đẹp và ngắn gọn. –