【问题标题】:What is the complexity of the sorted() function?sorted() 函数的复杂度是多少?
【发布时间】:2013-01-04 06:18:27
【问题描述】:

我有一个列表列表,我正在使用以下方法对它们进行排序

data=sorted(data, key=itemgetter(0))

想知道这个 python 函数的运行时复杂度是多少?

【问题讨论】:

  • 与简单的sorted 相同。
  • O(n log n) 就像语言库中使用的几乎所有其他比较排序一样。
  • Timsort是一种基于归并排序和插入排序的自适应排序算法,后来我以为它属于比较排序,没有比较排序可以保证小于lg(N!)的时间复杂度~ N log N。

标签: python algorithm sorting


【解决方案1】:

如果itemgetter(0)data 一起使用时为O(1),则排序为O(n log n),无论是平均情况还是最差情况。

有关 Python 中使用的排序方法的更多信息,请参阅Wikipedia

【讨论】:

  • 如果你知道itemgetter(0) 的复杂性而不是O(1),那么你仍然可以计算出整体复杂性:sorted 使n 调用itemgetter(0) 加上你所说的.
  • Timsort 没有 O(N) 的最佳情况。
  • @MC:确实如此。但是,这与实际使用几乎没有关系。此外,any 排序算法可以有O(n) 最佳情况。
  • 相关也是信息,最好的情况是什么。这里已经是排序的集合,这很好。因此,在 Python 中对已排序的数组进行排序需要 O(n) 时间。
【解决方案2】:

sorted 与 sort 类似,不同之处在于前者从可迭代对象中构建一个新的排序列表,而 sort 则在原地进行排序。主要区别在于空间复杂度。

【讨论】:

    【解决方案3】:

    就是Timsort,Timsort是一种基于归并排序和插入排序的自适应排序算法,然后我以为它属于比较排序,而it's said,没有比较排序可以保证时间复杂度小于lg(N!) ~ N log N.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2020-12-03
      • 2017-09-11
      • 2020-03-13
      相关资源
      最近更新 更多