2

我试图理解 timsort 算法。维基百科说合并使用几乎就地策略,在合并排序之前运行受限于二进制搜索以优化性能。

Timsort 执行几乎就地合并排序,因为实际的就地合并排序实现具有很高的开销。First Timsort 执行二分查找,以查找第二次运行中第一个元素在第一次运行中的位置,以及第一次运行中最后一个元素在第二次运行中的位置。这些位置之前和之后的元素已经在其正确的位置,并且可以从进一步考虑中删除。

然后,关于驰骋模式,说明如下

上面的单独合并保留了从同一输入集中选择的连续元素的计数。当达到最小疾驰阈值 (min_gallop) 时,算法切换到疾驰模式。这试图利用数据中的子运行;因此,舞动的成功或失败用于调整最小舞动阈值,作为数据是否包含足够的子运行的指示。(初始阈值为 MIN_GALLOP。)[6]

选择的输入集让我想到了二分搜索优化后的运行结果。但它也说

此外,在发现疾驰比二分搜索效率低的情况下,退出疾驰模式。

这给了我相反的印象,即驰骋可以替代二分搜索优化。

那么,用于合并的二分搜索优化是奔腾补充还是替代?有人可以给我更清楚地解释整个算法(尤其是合并和驰骋模式),因为我在一般算法领域相对较新。

4

0 回答 0