【问题标题】:Is golden section search better than binary search?黄金分割搜索比二分搜索更好吗?
【发布时间】:2011-05-13 22:11:14
【问题描述】:

最近我听到一个观点,通过将范围划分为 phi(黄金比例)而不是 2,可以改进二分搜索。这对我来说是一个很大的惊喜,因为我从未听说过这样的优化.这是真的?如果除以 2 和除以 phi 的性能相同,这会是真的吗?

如果不是,是否存在黄金分割搜索比二分搜索执行得更快的一般条件?

UPD:已编辑以删除不相关的维基百科文章的链接。抱歉误导了。

【问题讨论】:

    标签: algorithm search binary-search


    【解决方案1】:

    有两种算法称为“斐波那契搜索”。

    The article you linked 是一种用于查找某些函数的最大值或最小值的数值算法。这是解决这个问题的最佳算法。这个问题与二分搜索问题有很大的不同,对于任何合适的给定情况都应该是显而易见的。

    The other kind of Fibonacci search 确实解决了与二进制搜索相同的问题。二分搜索本质上总是更好。 Knuth 写道,斐波那契搜索“在某些计算机上更可取,因为它只涉及加法和减法,而不是除以 2。”但几乎所有计算机都使用二进制算术,其中除以 2比加减法更简单

    (Wikipedia 文章目前声称斐波那契搜索可以具有更好的参考位置,Knuth 提出了这一说法。也许,它可以,但这是一种误导。由斐波那契搜索完成的测试更接近精确到它们对缩小范围的帮助较小的程度;平均而言,这将导致从表的更多部分进行更多读取,而不是更少。如果记录实际上存储在磁带,因此寻道时间占主导地位,那么斐波那契搜索可能会击败二分搜索——但在这种情况下,这两种算法都远非最优。)

    【讨论】:

    • 与其挥手不如让我们知道斐波那契搜索的复杂性,这在维基百科的article 中是缺失的(只给出了一个复杂性,这并没有说明它是什么类型 - 没用信息)。
    • 差异是常数因子。在随机存取存储器中,二进制搜索和斐波那契搜索都是 O(log n)。搜索磁带时,两者都是 O(n)。
    【解决方案2】:

    我可能在这里遗漏了一些东西,但是在查看了关于黄金分割搜索的 Wikipedia 条目之后,它似乎根本无法解决与二进制搜索相同的问题。二进制搜索对于在排序列表中查找值很有用,而黄金分割搜索用于查找函数在值范围内的最小值或最大值。

    【讨论】:

    • 正确,它们用于不同的目的并且在不同的条件下是最优的。二分法用于查找“根”或某些属性发生变化的位置,并且最适合精炼“括号对” - 符号(属性)不同的位置对。黄金分割搜索用于最小化/最大化,最适合精炼“包围三元组”,即点 a、b、c 的三元组,使得 a
    【解决方案3】:

    “工作得更快”是含糊的;但二分查找应该有访问次数的最低最坏情况界限。

    【讨论】:

    • 就像这样,当搜索到的项目最终进入更大的区域时,任何倾斜分割区域的方法都会有更多的访问。平均情况可能会下降,但最坏的情况会上升。编码中的类似概念(在香农意义上)。
    • ... 扩展最后一个注释 - 当搜索项目往往在较小的区域中更常见时,平均而言,倾斜方法会更好。只有当你有一个很好的方法来决定哪边应该更小时,这种情况才会发生,基于对数据性质的一些了解。
    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2020-09-17
    相关资源
    最近更新 更多