在Java中,是否有一種簡單的方法可以在O(n)時間內創建一個無序數集合中的PriorityQueue,但是順序相反? PriorityQueue的構造函數都沒有采用集合和比較器來指定排序。我知道你可以創建一個指定比較器的PriorityQueue,然後再調用addAll來添加所有的無序數字。不過,我認爲addAll會單獨添加每個值,而不是堆積無序集合,所以我不認爲這會是O(n)時間。在java中構造一個優先級隊列,在O(n)時間中的反向順序時間
回答
addAll具有O(n * log(n))的複雜性,所以這並不太可怕。
我不知道你從哪裏得到了創建一個無序集合中的PriorityQueue的想法,其中有O(n),我認爲它與addAll相同。
您可以從O(n)中的無序列表構建一個堆。請參見http://cs.utsa.edu/~dj/cs3343/lecture6.html – reprogrammer
這是一種就地算法,如果您必須將元素從一個集合複製到另一個集合,則不適用。 – cohadar
將n的列表複製到數組中可以在O(n)中完成。而且,可以從O(n)中的數組構建一個堆。 – reprogrammer
解決方法是首先否定數字,然後在O(n)中創建一個堆。之後,你只需要記住在你從堆中檢索數字之後否定這些數字。
- 1. 優先級隊列的時間?
- 2. 在julia中構造按字母順序排列的優先級隊列
- 3. 一個TTL(生存時間)的驅除優先級隊列
- 4. C++的優先級隊列構造
- 5. 當隊列已滿時在優先級隊列(Java)中插入一個元素
- 6. STL優先級隊列構造函數
- 7. 如何更新dijkstra算法中O(log n)時間的優先級隊列中的密鑰?
- 8. 優先級隊列中的優先級
- 9. C++中優先級隊列的時間複雜度
- 10. 排序在O(n + mlogm)時間陣列
- 11. 優先級隊列錯誤順序
- 12. 查找時間在Dijkstra算法基於堆優先級隊列
- 13. Java地圖:反向時間順序
- 14. 的Java:優先級隊列
- 15. 通用優先級隊列中的同向和反向類型
- 16. 在C++中改進優先級隊列中的時間複雜度
- 17. Java:從優先級隊列中產生奇怪的隊列順序
- 18. 在scala中序列化一個優先級隊列
- 19. 優先級隊列O(n)的分類列表實現的插入時間複雜度是多少?
- 20. 存儲在一個優先級隊列
- 21. Java中對象的優先級隊列
- 22. 比較JAVA中的優先級隊列
- 23. Java中的優先級隊列
- 24. Java優先級隊列
- 25. 使用優先級列表的優先級隊列未命中Java中的所有中間值
- 26. 在O(n)時間中發現陣列中的10個最大整數時間
- 27. 證明 - 優先級隊列操作的時間複雜度
- 28. 優先級隊列的運行時間ADT
- 29. Dijkstra算法的運行時間 - 優先級隊列(堆)
- 30. 優先級隊列構造函數中的參數
不幸的是,這門課留下了許多優化方法。就像許多其他標準庫類一樣。 –
我能想到的最好的選擇是首先將你的集合轉換成一個'SortedSet',然後把'SortedSet'轉換成'PriorityQueue'。 – reprogrammer
但是,如果您可以以比O(n log n)更好的方式對元素進行預先排序,那麼只會有任何內容。 Collections.sort(),例如,基本上是O(n log n)。 –