请问有人可以了解A-sort(不是asort())的工作原理,它使用(a,b)树来排序部分排序的序列?
答案 0 :(得分:10)
算法本身非常简单 - 基本上你在树中插入所有元素,然后遍历树以按顺序读取元素。
为了获得几乎已经排序的序列的更好性能,它使用以下修改:
b>2a-1
,其O(1)
分摊的插入重新平衡时间。要利用O(1)
插入时间,您只需快速找到下一个元素所属的位置,假设序列几乎已排序(因此它不会远离上一个元素插入的位置) 。这大致如下:
这样,您可以在a^k
步骤中遍历树的k
元素,因此,您需要O(log(distance(current, previous))
时间来找到新元素的正确位置。在分摊O(1)
重新平衡的情况下,对于几乎排序的序列,您会比O(n log n)
时间更好,同时保持O(n log n)
最坏情况。