python排序的空间复杂度是多少?
Posted
技术标签:
【中文标题】python排序的空间复杂度是多少?【英文标题】:What is the space complexity of the python sort? 【发布时间】:2018-07-23 08:56:40 【问题描述】:python 排序的空间复杂度是多少?我在任何地方都找不到任何明确的文档
【问题讨论】:
【参考方案1】:Python 的内置排序方法是合并排序的衍生品,称为 Timsort,更多信息请点击此处 - https://en.wikipedia.org/wiki/Timsort。
它本质上并不比归并排序好或差,这意味着它的平均运行时间是O(n log n)
,它的空间复杂度是Ω(n)
【讨论】:
...这没有回答问题。【参考方案2】:空间复杂度定义为算法在N
元素方面需要多少额外空间。即使根据docs,sort
方法对列表进行了适当的排序,它确实使用了一些额外的空间,如实现的description 中所述:
timsort 可以要求包含多达 N//2 个指针的临时数组,这意味着在 32 位盒子上多达 2*N 个额外字节。在对随机数据进行排序时,可以预期需要这么大的临时数组;对于具有重要结构的数据,它可能会在不使用任何额外堆内存的情况下消失。
因此,最坏情况下的空间复杂度是O(N)
,最好情况下是O(1)
【讨论】:
嗯,你肯定是在排序一些占用内存空间的东西。 是的,你当然是,但空间复杂度是用额外的内存来衡量的,而不是数组本身。尽管如此,我还是查看了实现描述,并认为他们确实使用了更多额外的空间来实现算法。我的答案已相应更新以上是关于python排序的空间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章