0
A
回答
6
如果是一次性操作,我會使用std::vector
後跟std::sort
。這個解決方案應該是等價的:一個集合中的插入是O(log(n)),並且你爲N個元素這麼做,所以它是O(N log(N)) (proof)。另一方面,插入一個向量(假設你事先知道大小)是O(N),排序是O(N log(N)),所以在全局上它是O(N log(N) ))。 (或者,如果您不知道最終大小,它應該在典型實現的O(log(N))重新分配中達到確定的大小);但是,如果您不知道最終大小,另一方面,一個集合(如果實現爲RB樹)需要爲每個節點分配,這意味着您必須調用分配器N次 - 並且POD容器中的分配器調用可能會是瓶頸。此外,樹通常具有較少的緩存局部性和使用更多的內存,所以所有這些開銷可能會損害性能。另外,big-O符號表示函數時間依賴性,但隱藏乘法常量;不要拿我的話來說,但是我幾乎可以肯定,由於每個元素需要額外的簿記工作,所以N *集合插入將在最後花費更多的成本(樹插入通常需要一些努力恢復RB樹屬性)。
在另一方面,如果你要保持排序你的數據結構(由新數據來)設定通常是正確的解決方案。
但是,一如既往,有疑問時輪廓。
相關問題
- 1. CSS - 哪種方法更好?
- 2. 哪一種排序方式最好?
- 3. 哪種方法更好更快 - Symfony2,Doctrine2
- 4. 哪種方法更好/更清潔?
- 5. 哪種方法更好,更安全?
- 6. 哪種方法來存儲靜態數據更好?
- 7. 哪種方法更好的遵循以下兩種方法來安排和停止線程
- 8. 更好的方法來排隊報告
- 9. ICallbackEventHandler,HttpHandler,XMLHttpRequestObjext - 哪種方法更好
- 10. 哪種方法更好? libsvm或svmclassify?
- 11. setter驗證:哪種方法更好?
- 12. 哪種方法可變設置更好?
- 13. 哪種驗證方法更好?
- 14. 關聯範圍 - 哪種方法更好?
- 15. 哪種方法更好String.equalIgnoreCase或StringUtils.equalIgnoreCase
- 16. 哪種方法佈局更好?
- 17. 哪種轉換方法更好?
- 18. 哪種方法更好,爲什麼?
- 19. 哪種方式會更好?
- 20. 顯示文本語法,兩種不同的方法,哪個更好,爲什麼?
- 21. 爲什麼有兩種不同的方法來鏈接Java中的Exception?哪種情況更好?
- 22. 哪種模擬Java中的可選參數更好的方法?
- 23. 哪種方法更好?靜態方法內的ArrayList是困惑
- 24. javascript哪種語法更好?
- 25. 哪種方法最好?
- 26. java哪種方法最好?
- 27. 哪種排序算法更快?
- 28. 哪種方法更好地顯示來自數據庫的大量結果?
- 29. 哪種方法更好和更快,包括或不PHP
- 30. VB.NET通用跨線程操作的兩種不同方法;哪個更好?
你試過了嗎? – billz 2013-02-28 02:24:05
我試過更小的輸入 – Alex 2013-02-28 02:24:45
爲什麼人們嘗試微觀優化? – 2013-02-28 02:27:21