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排序的空间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

Python语言算法的时间复杂度和空间复杂度

归并排序

排序和数据结构

快排,冒泡排,选择排序,希尔排序

各个排序算法的时间复杂度和空间复杂度

基数树的空间复杂度是多少?