【问题标题】:Can Binary Search be / Is Binary Search a greedy algorithm?二分搜索可以是/二分搜索是一种贪心算法吗?
【发布时间】:2017-07-25 12:40:06
【问题描述】:

我正在阅读有关 Binary search 的不同材料,我不清楚它是一个贪婪的二进制文件(在我看来它不是),或者它可以是一个具有某些特定实现的贪婪算法吗?

如果它可以是贪婪的,它有什么意义?如果通过选择局部最优得到全局最优,而不重新考虑之前的选择,就不能保证二分查找的正确结果。

【问题讨论】:

    标签: algorithm binary-search greedy


    【解决方案1】:

    我猜如果你斜眼看它,二分搜索是贪婪的,因为你试图在每一步中尽可能多地减少搜索空间。它恰好是搜索空间中的一种贪心算法,其结构既高效又总能找到正确的答案。

    我不习惯眯着眼睛。

    也就是说,二进制搜索可以在传统的贪心算法中使用。例如,包装问题的贪心算法可能会要求您接下来选择“仍然可以容纳的最大可用物品”。可以使用二分搜索来找到它。

    相反,贪心算法可用于创建非常适合二进制搜索的数据结构。参见例如https://en.wikipedia.org/wiki/Geometry_of_binary_search_trees#Greedy_algorithm

    【讨论】:

      【解决方案2】:

      假设您正在 8 位值范围 (1-256) 中查找索引 100 处的元素。您的二分搜索进度将考虑以下指标:

      • 128 ?太大了
      • 64 ?太小了
      • 64 + 32 ?太小了
      • 64 + 32 + 16 ?太大了
      • 64 + 32 + 8 ?太大了
      • 64 + 32 + 4 ?找到

      很容易注意到,在每一步中,您都在测试尚未测试的最高有效位,如果它没有溢出结果,它将被添加到部分解决方案中,直到找到最终结果。

      因此可以指出贪婪选择的以下特征:

      1. 有一个由8位数字组成的候选集要查找。
      2. 贪心选择在每一步都考虑尚未使用的最高有效位。
      3. 检查该位是否可以添加到本地查看该位和迄今为止组装的结果的最终解决方案中。
      4. 如果总和没有溢出,则该位将成为最终解决方案的一部分。
      5. 当组合和等于搜索到的时,可以确定最终解决方案。

      当然不需要回溯,所以这是一个完美的贪心算法。

      【讨论】:

      • 是的,从某种意义上说,二分搜索是一种贪心算法,但在另一种更准确的意义上,它不是。
      • 嗯。有趣,谢谢。有没有更准确的定义?
      • @Stas 这不是正式的。更像是通过将代表最终数字的位相加来代替在二分搜索中丢弃一半输入的想法。这最终可以实现相同的目标(log(n) 甚至尝试相同的索引),同时严格满足对贪心算法的期望。当然,可能需要进行一些调整以使输入大小为 2 的幂。另一个问题是二进制搜索甚至不假设数字是由位组成的。但这两种方法仍有一些共同点。
      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 2012-02-09
      • 2019-04-27
      • 2020-09-23
      • 2017-07-02
      • 2017-01-06
      • 2012-04-04
      相关资源
      最近更新 更多