【发布时间】:2011-05-13 22:11:14
【问题描述】:
最近我听到一个观点,通过将范围划分为 phi(黄金比例)而不是 2,可以改进二分搜索。这对我来说是一个很大的惊喜,因为我从未听说过这样的优化.这是真的?如果除以 2 和除以 phi 的性能相同,这会是真的吗?
如果不是,是否存在黄金分割搜索比二分搜索执行得更快的一般条件?
UPD:已编辑以删除不相关的维基百科文章的链接。抱歉误导了。
【问题讨论】:
标签: algorithm search binary-search
最近我听到一个观点,通过将范围划分为 phi(黄金比例)而不是 2,可以改进二分搜索。这对我来说是一个很大的惊喜,因为我从未听说过这样的优化.这是真的?如果除以 2 和除以 phi 的性能相同,这会是真的吗?
如果不是,是否存在黄金分割搜索比二分搜索执行得更快的一般条件?
UPD:已编辑以删除不相关的维基百科文章的链接。抱歉误导了。
【问题讨论】:
标签: algorithm search binary-search
有两种算法称为“斐波那契搜索”。
The article you linked 是一种用于查找某些函数的最大值或最小值的数值算法。这是解决这个问题的最佳算法。这个问题与二分搜索问题有很大的不同,对于任何合适的给定情况都应该是显而易见的。
The other kind of Fibonacci search 确实解决了与二进制搜索相同的问题。二分搜索本质上总是更好。 Knuth 写道,斐波那契搜索“在某些计算机上更可取,因为它只涉及加法和减法,而不是除以 2。”但几乎所有计算机都使用二进制算术,其中除以 2比加减法更简单。
(Wikipedia 文章目前声称斐波那契搜索可以具有更好的参考位置,Knuth 不 提出了这一说法。也许,它可以,但这是一种误导。由斐波那契搜索完成的测试更接近精确到它们对缩小范围的帮助较小的程度;平均而言,这将导致从表的更多部分进行更多读取,而不是更少。如果记录实际上存储在磁带,因此寻道时间占主导地位,那么斐波那契搜索可能会击败二分搜索——但在这种情况下,这两种算法都远非最优。)
【讨论】:
我可能在这里遗漏了一些东西,但是在查看了关于黄金分割搜索的 Wikipedia 条目之后,它似乎根本无法解决与二进制搜索相同的问题。二进制搜索对于在排序列表中查找值很有用,而黄金分割搜索用于查找函数在值范围内的最小值或最大值。
【讨论】:
“工作得更快”是含糊的;但二分查找应该有访问次数的最低最坏情况界限。
【讨论】: