2015-01-07 32 views

回答

4

解決此問題的一種方法是有另一種結構(我將調用該輔助數據結構)。例如將密鑰映射到二進制堆中的元素的散列映射(例如unordered_map)。您可以使用此數據結構來查找堆中的哪個元素需要修改其優先級。修改元素的優先級後,需要對其執行一個sink和一個sift操作。這兩種操作都具有複雜性O(log(n))因此總體上對優先級的修改具有複雜性O(log(n))。在這裏我假設你使用一個輔助數據結構,它支持通過複雜度不超過O(log(n))(在散列映射的複雜度爲O(1))的情況下通過密鑰查找。

請注意,您必須修改已經爲二進制堆實施的操作,以使輔助數據結構與二進制堆保持同步。

+0

的問題的重複,我也想到了這一點。有沒有其他的數據結構可以用來解決這個問題?是的,我已經使用散列表來查找密鑰,所以複雜度是O(1)。但我不敢用另一個表來存儲優先級索引。我可以使用數據結構來解決這個問題嗎?謝謝btw – user3482695

相關問題