我寫了一個存儲優先級類(私有成員爲PRIORITY和KEY)的二進制堆。我想知道當我給出變量的KEY時,如何在小於O(n)複雜度的情況下改變堆中元素的優先級。在此先感謝在O(log(n))複雜性中更改二進制堆元素的優先級
0
A
回答
4
解決此問題的一種方法是有另一種結構(我將調用該輔助數據結構)。例如將密鑰映射到二進制堆中的元素的散列映射(例如unordered_map)。您可以使用此數據結構來查找堆中的哪個元素需要修改其優先級。修改元素的優先級後,需要對其執行一個sink
和一個sift
操作。這兩種操作都具有複雜性O(log(n))
因此總體上對優先級的修改具有複雜性O(log(n))
。在這裏我假設你使用一個輔助數據結構,它支持通過複雜度不超過O(log(n))
(在散列映射的複雜度爲O(1))的情況下通過密鑰查找。
請注意,您必須修改已經爲二進制堆實施的操作,以使輔助數據結構與二進制堆保持同步。
+0
的問題的重複,我也想到了這一點。有沒有其他的數據結構可以用來解決這個問題?是的,我已經使用散列表來查找密鑰,所以複雜度是O(1)。但我不敢用另一個表來存儲優先級索引。我可以使用數據結構來解決這個問題嗎?謝謝btw – user3482695
相關問題
- 1. 優先級隊列 - 二進制堆
- 2. O(log(n))中的優先級驗證器實現
- 3. 如何在優先級隊列中實現二進制堆的同一優先級元素的順序?
- 4. 批量更新二進制堆中的節點優先級?
- 5. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 6. 時間複雜度 - O(n^2)到O(n log n)搜索
- 7. 優先級隊列的二進制堆的優點?
- 8. 複雜度O(log(n))是否等於O(sqrt(n))?
- 9. 與複雜性爲O更好(n)的
- 10. 爲什麼pop_heap的複雜性是O(2 * log(N))?
- 11. 爲什麼C++ STL映射容器O(log(n))的複雜性?
- 12. 證明具有n個元素的二叉樹堆中的二叉樹數量最多爲O(log n)
- 13. 在android中更改進程優先級
- 14. 二進制堆和最小優先級隊列的
- 15. 二進制堆優先級隊列的位置索引?
- 16. 二進制multiplcation大O符號複雜
- 17. 是log(n!)= O((log(n))^ 2)?
- 18. O(log n)中的二叉搜索樹?
- 19. 將k個元素插入包含n個元素的二進制堆的時間複雜度
- 20. 複雜性理論中的O(lg(n))* O(lg(n))
- 21. 二進制和如何使用O(log n)空間?
- 22. O(n * log n)工作,然後O(n^2)工作的代碼的複雜性是什麼?
- 23. 在C++中改進優先級隊列中的時間複雜度
- 24. 二進制堆中最小的元素?
- 25. 如何更改優先級的進程
- 26. 複雜性O(kM(n))多項式的複雜性?
- 27. Morris Traversal o(n)的複雜性如何?
- 28. 如何更新dijkstra算法中O(log n)時間的優先級隊列中的密鑰?
- 29. 查詢的O(log n)複雜度的數據結構
- 30. inplace_merge:是什麼導致N * log(N)與N-1的複雜性?
@ 2501該方法可能類似,但問題不同。我不認爲這是你連接到 –