我读过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