timsort是通用的还是Python专用的?

时间:2020-03-06 14:56:29  来源:igfitidea点击:
Timsort is an adaptive, stable,
  natural mergesort. It has supernatural
  performance on many kinds of partially
  ordered arrays (less than lg(N!)
  comparisons needed, and as few as
  N-1), yet as fast as Python's previous
  highly tuned samplesort hybrid on
  random arrays.

我们是否看到timsort在CPython之外使用?是否有意义?

解决方案

我们链接的描述看起来很笼统。

它看起来并不特别熟悉,但是在广泛的软件领域中,"智能"合并排序非常普遍。

至于是否有意义,这取决于我们要排序的内容以及比较与内存分配的相对成本。在内存受限的环境中,需要最多2 * N字节的额外内存的排序并不是一个好的选择。

该算法非常通用,但是其好处却是特定于Python的。与大多数排序例程不同,Python的list.sort(使用timsort所关心的)避免了不必要的比较,因为通常比较比交换项目(始终只是一组指针副本)甚至分配一些对象要昂贵得多。额外的内存(因为它始终只是一个指针数组,并且与任何Python操作中的平均开销相比,开销都较小。)

如果我们受到类似的限制,那么它可能是合适的。我还没有看到其他情况下的比较确实如此昂贵的情况,尽管:-)

是的,在CPython之外(特别是在Python之外)或者一般情况下使用timsort相当有意义。

当前正在努力用timsort替换Java的"修改的合并排序",并且初步结果是非常积极的。

现在在Wikipedia上回答:timsort将在从Android复制了Java 7的Java 7中使用。