最近我听说过可以通过将范围按phi(黄金比例)而不是2分割来改进二分搜索。这对我来说是一个很大的惊喜,因为我从来没有听说过这样的优化。这是真的?如果除以2和按照phi同样具有效率,那么这是真的吗?
如果没有,黄金分割搜索的执行速度是否比二分搜索更快?
UPD:已编辑删除与不相关的维基百科文章的链接。对不起误导。
答案 0 :(得分:6)
有两种称为“Fibonacci搜索”的算法。
The article you linked是一个用于查找某些函数的最大值或最小值的数值算法。它是解决此问题的最佳算法。这个问题与二元搜索问题完全不同,对于任何适当的特定情况,它应该是显而易见的。
The other kind of Fibonacci search会攻击与二进制搜索相同的问题。二进制搜索基本上总是更好。 Knuth写道,Fibonacci搜索“在某些计算机上更可取,因为它只涉及加法和减法,而不是2除法。”但几乎所有的计算机都使用二进制算术,其中2除以更简单而不是加法和减法。
(维基百科的文章目前声称Fibonacci搜索可能有更好的参考位置,Knuth声称不制造。可能,但这可能会产生误导。斐波纳契搜索所做的测试更接近于它们在缩小范围方面不太有用的程度;平均而言,这将导致从表的更多部分读取更多,而不是更少。如果记录实际存储在磁带,所以搜索时间占主导地位,然后斐波纳契搜索可能会击败二分搜索 - 但在这种情况下,两种算法都远非最佳。)
答案 1 :(得分:3)
我可能在这里遗漏了一些东西,但是在查看黄金分割搜索的维基百科条目之后,似乎它根本无法解决与二元搜索相同的问题。二进制搜索对于在排序列表中查找值很有用,而黄金分割搜索用于在一系列值中查找函数的最小值或最大值。
答案 2 :(得分:0)
“工作得更快”是模糊的;但二进制搜索应该具有访问次数最低的最差情况。