Binary Search 可以/Binary Search 是一种贪心算法吗?

Can Binary Search be / Is Binary Search a greedy algorithm?

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

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

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

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

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

所以贪婪选择的以下特点可以指出:

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

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

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

我不习惯斜视

也就是说二分搜索可以在传统的贪心算法中使用。例如,打包问题的贪心算法可能会要求您接下来选择 "the largest available item that can still fit"。可以使用二进制搜索来找到它。

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