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