Hàm tiềm năng nhị phân heap extract max O (1)


10

Tôi cần trợ giúp để tìm ra hàm tiềm năng cho một heap tối đa để trích xuất max được hoàn thành trong thời gian khấu hao . Tôi nên nói thêm rằng tôi không hiểu rõ về phương pháp tiềm năng.O(1)

Tôi biết rằng hàm chèn phải "trả" nhiều hơn để giảm chi phí khai thác và điều này phải liên quan đến chiều cao của heap (nếu cho chiều cao của heap nên chèn là hoặc )2 log ( n ) Σ n k = 1 2 log ( k )log(n)2log(n)k=1n2log(k)

Câu trả lời:


12

Hãy thử như sau:

Trọng số của một phần tử trong heap là độ sâu của nó trong cây nhị phân tương ứng. Vì vậy, phần tử trong gốc có trọng lượng bằng không, hai đứa con của nó có trọng lượng 1 và cứ thế. Hàm bạn xác định là hàm tiềm năng i HwTôiTôiH

Φ(H)= =ΣTôiH2wTôi.

Bây giờ chúng ta hãy phân tích các hoạt động heap. Để chèn, bạn thêm phần tử mới thêm độ sâu tối đa . Điều này làm tăng tiềm năng thêm và có thể được thực hiện trong thời gian . Sau đó, bạn "đánh bóng" phần tử heap mới để đảm bảo thuộc tính heap. Điều này làm mất thời gian và không thay đổi . Do đó, chi phí cho việc chèn là .dđăng nhập(n)2dÔi(1)Ôi(đăng nhậpn)Φ(H)Ôi(đăng nhập(n)+Δ(Φ(H)))= =Ôi(đăng nhậpn)

Bây giờ hãy xem xét các trích xuất . Bạn lấy ra root và thay thế nó bằng phần tử cuối cùng trong heap. Điều này làm giảm tiềm năng xuống , do đó bạn có thể đủ khả năng để sửa chữa tài sản heap, và do đó chi phí khấu hao hiện là .O ( 1 )2đăng nhập(n)Ôi(1)

Nếu bạn có một câu hỏi chung cho chức năng tiềm năng, bạn nên đặt câu hỏi này như một câu hỏi khác.


Tôi chắc chắn bạn đã đúng nhưng tôi không hiểu cách chèn. Tại sao là không thay đổi? Xin lỗi nếu câu trả lời là rõ ràng nhưng bạn có thể vui lòng mở rộng Δ ? Tôi không thể hiểu tại sao bạn lại có số âm ở đóΔ(Φ(H)))Δ
andrei

đề cập đến sự khác biệt tiềm năng - trước và sau khi chèn. Đó là trong trường hợp chèn tối đa 2 log ( n ) . Khi bạn trao đổi hai yếu tố trong heap (bong bóng hoặc bong bóng xuống), thì một trọng số được +1 và yếu tố kia được thay đổi -1, do đó tiềm năng (tổng của tất cả các trọng số) vẫn như nhau. Δ(Φ(H))2đăng nhập(n)
A.Schulz

Làm thế nào là sửa chữa O (1)? Việc sử dụng các chức năng tiềm năng trong việc sửa chữa đống là gì? Bạn có thể vui lòng làm rõ
Sohaib

Ôi(đăng nhậpn)Ôi(1)

@ A.Schulz Vì vậy, về bản chất điều này có nghĩa là do hoạt động giải nén được thực hiện n số lần vì mỗi lần hàm tiềm năng sẽ giảm 2logn (có thể tăng hoặc không tăng khi sửa chữa). Sự phức tạp tổng thể cho một điều như vậy sẽ là thời gian không đổi vì cuối cùng sẽ không có nút nào trong cây. Tôi có đúng không
Sohaib
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.