二进制搜索可以/是二进制搜索是一种贪婪的算法吗?

时间:2017-07-25 12:40:06

标签: algorithm binary-search greedy

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

如果它可以贪婪,它是如何有意义的?如果通过选择局部最优值获得全局最优值,而不重新考虑先前的选择,则无法保证二进制搜索的正确结果。

2 个答案:

答案 0 :(得分:2)

考虑您正在寻找8位值范围内的索引100处的元素(1-256)。您的二进制搜索进度将考虑以下索引:

  • 128?太大了
  • 64?
  • 太小了
  • 64 + 32?
  • 太小了
  • 64 + 32 + 16?太大了
  • 64 + 32 + 8?太大了
  • 64 + 32 + 4?结果

很容易注意到,在每个步骤中,您都在测试尚未测试的最重要的位,如果它没有溢出结果,则会将其添加到部分解决方案中,直到找到最终结果。

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

  1. 有一个由8位数字组成的候选集。
  2. 贪婪选择考虑到每一步中尚未使用的最重要位。
  3. 检查该位是否可以添加到最终解决方案中,在本地查看该位以及到目前为止汇总的结果。
  4. 如果总和没有溢出那个位成为最终解决方案的一部分。
  5. 最终解决方案可以确定何时组合总和等于搜索到的总和。
  6. 当然不需要回溯,所以这是一个完美的贪婪算法。

答案 1 :(得分:2)

我想如果你侧身眯着眼睛,二元搜索就是贪婪,因为你在每一步都尽可能地减少你的搜索空间。它恰好是搜索空间中的一种贪婪算法,其结构使得它既高效又总能找到正确的答案。

我不会眯着眼睛。

所述二进制搜索可以在传统的贪心算法中使用。例如,针对打包问题的贪婪算法可能会要求您接下来选择可以适用的最大可用项目"。可以使用二进制搜索来找到它。

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