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中使用。