algorithm - 为什么序列 1,4,13,40,121... 在插入排序时比 1,2,4,8,16... 更有效?

标签 algorithm math sorting

1,4,13,40,121...((3 * n) + 1) 在将随机数插入到排序算法。

这是为什么?与线程有关吗?

谢谢。

最佳答案

众所周知,2^k、2^(k-1)、...、1 的 shell 排序增量步长是最差的步长之一。例如,您只比较奇数位置的元素,仅在最后一步比较偶数位置的元素!

其他步骤似乎是 (3^k -1)/2(而不是 3n+1)并且不会遇到诸如偶数/奇数问题之类的问题。这不是证明,但我们可能希望这比 2 的幂更好。

如果您正在寻找数学分析,众所周知,Shell 排序会给数学家带来困难。

我没有在 Sedgewick 的论文 here 中找到对您的序列的任何分析.也许 Knuth 的一本书中有它。

祝你好运。

顺便说一句,你为什么要问线程?

关于algorithm - 为什么序列 1,4,13,40,121... 在插入排序时比 1,2,4,8,16... 更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5481531/

相关文章:

algorithm - 在我现有的 Mandelbrot 生成器中实现平滑颜色算法

algorithm - 麻将 - 无论布局如何,排列牌以确保至少有一条通向胜利的道路

c++ - 用特定分布的非均匀屏幕点填充 vector

javascript - 计算图像 A 比图像 B 大多少

c - 最容易在C中实现在线排序数据结构

arrays - 给定一系列范围,找到覆盖的总距离?

algorithm - 以下算法的时间复杂度是多少?

math - 导航卡尔曼滤波器中的投影问题

mysql - SQL使用带有字母数字数据的数字排序对列(varchar(255))进行排序

sorting - 如何在mapreduce中按键和值排序?