A-sort如何运作?

时间:2012-02-05 22:18:41

标签: algorithm sorting

请问有人可以了解A-sort(不是asort())的工作原理,它使用(a,b)树来排序部分排序的序列?

1 个答案:

答案 0 :(得分:10)

算法本身非常简单 - 基本上你在树中插入所有元素,然后遍历树以按顺序读取元素。

为了获得几乎已经排序的序列的更好性能,它使用以下修改:

  1. 树必须是{a,b}树b>2a-1,其O(1)分摊的插入重新平衡时间。
  2. 树包含指向同一级别(整个树)上节点的兄弟姐妹的链接
  3. 要利用O(1)插入时间,您只需快速找到下一个元素所属的位置,假设序列几乎已排序(因此它不会远离上一个元素插入的位置) 。这大致如下:

    • 从插入的上一个元素开始
    • 检查下一个元素是否属于该节点或该节点的任何子树;如果没有,你看看兄弟姐妹(让我们说新元素更小,所以它将是左兄弟姐妹)
    • 如果兄弟姐妹的价值仍然太大,你上升一级并重复
    • 如果新元素属于兄弟的子树,则从那里进行正常搜索
    • 如果新元素属于兄弟节点和此节点之间,则转到最左边的子节点并重复搜索,直到找到正确的子树

    这样,您可以在a^k步骤中遍历树的k元素,因此,您需要O(log(distance(current, previous))时间来找到新元素的正确位置。在分摊O(1)重新平衡的情况下,对于几乎排序的序列,您会比O(n log n)时间更好,同时保持O(n log n)最坏情况。