Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm A-sort是如何工作的?_Algorithm_Sorting - Fatal编程技术网

Algorithm A-sort是如何工作的?

Algorithm A-sort是如何工作的?,algorithm,sorting,Algorithm,Sorting,有人能解释一下A-sort(而不是asort())的工作原理吗?它使用(A,b)-树对部分排序的序列进行排序。算法本身非常简单-基本上是在树中插入所有元素,然后遍历树以按顺序读取元素 为了对几乎已排序的序列获得更好的性能,它使用了以下修改: 树必须是具有b>2a-1且具有O(1)摊销插入再平衡时间的(a,b)树 该树包含指向同一级别(跨整个树)上节点的兄弟节点的链接 要利用插入时间O(1)insert,您只需快速找到下一个元素所属的位置,假设序列几乎已排序(因此它与前一个元素插入的位置不会太远)

有人能解释一下A-sort(而不是asort())的工作原理吗?它使用(A,b)-树对部分排序的序列进行排序。

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

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

  • 树必须是具有
    b>2a-1
    且具有
    O(1)
    摊销插入再平衡时间的(a,b)树
  • 该树包含指向同一级别(跨整个树)上节点的兄弟节点的链接
  • 要利用插入时间
    O(1)
    insert,您只需快速找到下一个元素所属的位置,假设序列几乎已排序(因此它与前一个元素插入的位置不会太远)。大致如下所示:

    • 从插入的上一个元素开始
    • 检查下一个元素是否不属于此节点或此节点的任何子树;如果不是,则查看同级(假设新元素较小,因此它将是左同级)
    • 如果兄弟姐妹的值仍然太大,则可以上升一级并重复
    • 如果新元素属于同级的子树,则从那里开始执行常规搜索
    • 如果新元素属于同级节点和此节点之间,则转到最左边的子节点并向下重复搜索,直到找到正确的子树

    这样,您可以按
    k
    步骤遍历树中的
    a^k
    元素,因此,您需要
    O(log(距离(当前,以前))
    时间才能找到新元素的正确位置。给定摊销
    O(1)
    重新平衡,您会比
    O(n日志n)更好
    O(n log n)O(n log n)最坏情况下几乎排序的序列的时间。

    您能提供一个指向a-sort定义的链接吗?@templatetypedef奇怪的是,我还无法在网上找到有关此排序的任何信息。谢谢,这非常有用。