lee1892 发表于 2013-4-25 15:31
按原论文,701后面一个是1750
再后面的都不是Ciura序列了,是拿2.25乘出来的~
不同的序列,在大数据量下,差距还是很可观的。
对俺这等数学盲来说,啥算法无所谓,如果能在希尔排序里面,找到一个更快的序列,那就用嘛。
要说证明,嗯... 俺的意见是,如果计算机跑10次,大部分时候都是某个序列快的话,那就当作是真快好了{:soso_e113:}
随机单精度数据数量:5,000,000
Ciura 的 序列:2331004, 1036002, 460445, 204643, 90952, 40423, 17965, 7985, 3549, 1577, 701, 301, 132, 57, 23, 9, 4, 1
用时 105.602 秒 移动 185,427,945 / N ^ 1.234 比较 182,904,249 / N ^ 1.233
Ciura 的 部分质数序列:2330959, 1036001, 460451, 204641, 90947, 40427, 17971, 7993, 3547, 1579, 701, 307, 131, 57, 23, 9, 4, 1
用时 95.973 秒 移动 186,994,537 / N ^ 1.235 比较 184,471,604 / N ^ 1.234
法师改良 前后互质的 Sedgewick 双公式 序列:4188161, 2354689, 1045055, 587527, 260609, 146309, 64763, 36293, 16001, 8929, 3907, 2161, 929, 503, 211, 109, 41, 19, 5, 1
用时 94.875 秒 移动 188,564,332 / N ^ 1.235 比较 185,962,704 / N ^ 1.234
随机单精度数据数量:300,000
Ciura 的 序列:204643, 90952, 40423, 17965, 7985, 3549, 1577, 701, 301, 132, 57, 23, 9, 4, 1
用时 4.059 秒 移动 8,749,473 / N ^ 1.267 比较 8,607,971 / N ^ 1.266
Ciura 的 部分质数序列:204641, 90947, 40427, 17971, 7993, 3547, 1579, 701, 307, 131, 57, 23, 9, 4, 1
用时 3.930 秒 移动 8,861,307 / N ^ 1.268 比较 8,719,886 / N ^ 1.267
法师改良 前后互质的 Sedgewick 双公式 序列:260609, 146309, 64763, 36293, 16001, 8929, 3907, 2161, 929, 503, 211, 109, 41, 19, 5, 1
用时 4.039 秒 移动 8,935,631 / N ^ 1.269 比较 8,777,861 / N ^ 1.268
随机单精度数据数量:10,000,000
Ciura 的 部分质数序列:5244763, 2330959, 1036001, 460451, 204641, 90947, 40427, 17971, 7993, 3547, 1579, 701, 307, 131, 57, 23, 9, 4, 1
用时 170.113 秒 移动 394,476,462 / N ^ 1.228 比较 389,258,290 / N ^ 1.227
Ciura 的 序列:5244759, 2331004, 1036002, 460445, 204643, 90952, 40423, 17965, 7985, 3549, 1577, 701, 301, 132, 57, 23, 9, 4, 1
用时 183.105 秒 移动 390,649,594 / N ^ 1.227 比较 385,431,311 / N ^ 1.227
法师改良 前后互质的 Sedgewick 双公式 序列:9427969, 4188161, 2354689, 1045055, 587527, 260609, 146309, 64763, 36293, 16001, 8929, 3907, 2161, 929, 503, 211, 109, 41, 19, 5, 1
用时 190.367 秒 移动 396,334,465 / N ^ 1.228 比较 391,201,441 / N ^ 1.227
俺不明白的是,为什么Ciura 原序列移动和比较的次数少,时间反而长呢?
|