我讀過Python的列表是使用指針實現的。然後我看到這個模塊http://docs.python.org/2/library/bisect.html高效地插入一個排序列表。它如何有效地做到這一點?如果列表是使用指針而不是通過連續數組實現的,那麼如何有效地搜索插入點?如果列表是通過一個連續的數組來支持的,那麼當插入一個元素時就不得不進行元素移位。那麼這個bisect
如何有效地工作呢?Python的平分線如何工作?
1
A
回答
1
我相信列表中的元素是指向的,但「列表」實際上是一個連續的數組(在C中)。他們被稱爲列表,但他們不是鏈接列表。
實際上,在排序列表中查找元素非常好 - 它是O(logn)。但插入不是很好 - 它是O(n)。
如果你需要一個logn數據結構,最好使用一個樹木或紅黑樹。
0
這是有效的搜索,而不是實際的插入。快速搜索使得整個操作「增加一個值並保持所有值的順序」比較快,例如,再次附加然後再排序:O(n)
而不是O(n log n)
。
+2
儘管在Python中,再次附加,然後再排序也是'O(n)'感謝TimSort。 –
相關問題
- 1. 線程的工作平衡
- 2. 當範圍包括分支時,mercurial的平分線如何工作?
- 3. 如何在Python中將工作公平分配給工作人員? - 分裂迭代成同樣大小的塊
- 4. python - 分割方法如何工作?
- 5. 如何將數學工作分解爲工作線程Java
- 6. Python:線程不工作
- 7. Netty - 工作線程如何工作
- 8. Python平滑曲線
- 9. 平方和差分算法是如何工作的?
- 10. 如何製作動態ascii水平分隔線?
- 11. 佈線後不會工作angularjs /平均
- 12. 列表和水平線不工作
- 13. Python中的線程安全(問題是如何工作的)
- 14. Tkinter Python中的水平線
- 15. 流水線如何工作?
- 16. pimcore路線如何工作?
- 17. 多線程如何工作
- 18. CUDA線程如何工作
- 19. 的Python的多線程「工作」
- 20. ZedGraph - 如何製作水平線拖拽?
- 21. 如何使Python Glob模塊工作跨平臺(os.path問題)?
- 22. Python中的Timer如何工作,關於多線程?
- 23. Python 3.4中的多線程如何工作?
- 24. 如何確認我的shebang線爲python工作?
- 25. 平xyz.com不工作,但平www.xyz.com工作
- 26. 的Python:正確終止工作線程
- 27. 線路文件不工作 - Python的
- 28. Python的outFile.writelines - 只有第一線工作
- 29. 如何讓兩個哈斯克爾平臺分開工作
- 30. 如何分配網狀工作線程來新的要求?
我假設您已閱讀鏈接到您鏈接到頁面頂部的源代碼? – vanza
['list'實際上是一個數組](http://stackoverflow.com/questions/3917574/how-is-pythons-list-implemented)。 –
啊我看到了,所以它被存儲爲一個數組。我錯過了「bisect」文檔中說插入實際上是O(n)的部分,所以現在對我來說一切都很清楚,謝謝。 – rafalio