我有一個排序的向量, 什麼是更好的: 使用lower_bound並插入元素在它的位置在向量中。 或只需將元素push_back到vector中,並在sort()需要時對其進行排序?插入的複雜性
Q
插入的複雜性
0
A
回答
1
對於一次執行的單個操作,使用lower_bound
和insert
更便宜。 lower_bound
是O(log(n))
和insert
將是(最差和平均情況)O(n)
,給出最終複雜度O(n)
。
如果您不需要進行排序,直到你完成插入之後的載體,它會便宜很多,只進行排序,因爲所有的push_back
旨意是O(1)*O(n) = O(n)
和最終排序將是O(n*log(n))
,給你最終的複雜性爲O(n*log(n))
,而多重lower_bound
+ insert
會給你一個複雜的O(n)*O(n) = O(n**2)
。
如果您需要在整個插入過程中排序的元素,哪一個更便宜,這將非常依賴於您的使用模式(您需要多久分配一次元素)。通常情況下,您只需要在施工過程結束時進行排序的元素,這就是爲什麼最終排序可能是工具帶中非常強大的工具。如果這不是您的使用模式,您可能希望至少考慮使用關聯容器,如multi_set
或multi_map
。
+0
謝謝。在我看來,lower_bound和insertion會提供更快的性能。 – anothertest
相關問題
- 1. 複雜插入
- 2. 數組插入的時間複雜性
- 3. 設置的複雜性::插入
- 4. btree的插入複雜性是什麼?
- 5. MyBatis複雜插入
- 6. 複雜的蒙戈插入
- 7. 複雜插入語句
- 8. Simple.Data插入複雜對象
- 9. 角2複雜的內插屬性
- 10. SQL Server 2008的:複雜的插入
- 11. 將n個數字插入二叉搜索樹的複雜性
- 12. 插入優先級隊列的複雜性
- 13. N元樹插入和搜索的複雜性是什麼?
- 14. 插入命令的複雜sed命令
- 15. 插入堆的時間複雜度
- 16. 複雜數據的高效插入mysql
- 17. 複雜的mysql插入查詢
- 18. 插入複雜的XML到SQL Server表
- 19. 複雜性復發
- 20. 二進制插入排序和複雜性
- 21. 哈希表運行時複雜性(插入,搜索和刪除)
- 22. itertools.permutations的複雜性
- 23. Object.keys()的複雜性?
- 24. Perl的複雜性?
- 25. List.mem的複雜性
- 26. trie的複雜性
- 27. EJB的複雜性
- 28. 複雜性類
- 29. Hashtbl.create複雜性
- 30. 複雜性將
這取決於「何時需要」的頻率。 – molbdnilo
我會在需要時進行排序。如果未分類元素的數量與矢量的大小相比較小,則對最後推回的元素使用插入排序。否則,對最後的元素使用std :: sort,然後使用就地合併。 – Nicolas
我不確定爲什麼這個問題被標記爲[tag:C++ 11]。我在這個問題中沒有看到任何特別的[tag:C++] - 依賴,除了'lower_bound','insert','push_back'和'sort',這些都在'C++ 03'中。和「C++ 98」。其他的一切只是通用的算法分析。 –