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 ?找到
很容易注意到,在每一步中,您都在测试尚未测试的最高有效位,如果它没有溢出结果,则会将其添加到部分解决方案中,直到找到最终结果。
所以贪婪选择的以下特点可以指出:
- 有一个由8位数字组成的候选集要查找
- 贪婪选择在每一步都考虑尚未使用的最高有效位。
- 检查是否可以将该位添加到本地的最终解决方案中,查看该位和目前组装的结果。
- 如果总和没有溢出,则该位构成最终解决方案的一部分。
- 当组合和等于搜索的总和时,可以确定最终的解决方案。
当然不需要回溯,所以这是一个完美的贪心算法。
我想如果您斜着眼睛看,二分搜索是贪婪的,因为您试图在每一步中尽可能多地减少搜索 space。它恰好是搜索中的贪心算法space,其结构既高效又总能找到正确答案。
我不习惯斜视
也就是说二分搜索可以在传统的贪心算法中使用。例如,打包问题的贪心算法可能会要求您接下来选择 "the largest available item that can still fit"。可以使用二进制搜索来找到它。
相反,可以使用贪心算法来创建非常适合二进制搜索的数据结构。参见示例 https://en.wikipedia.org/wiki/Geometry_of_binary_search_trees#Greedy_algorithm
我正在阅读关于 Binary search 的不同材料,我不清楚它是一个贪婪的二进制文件(在我看来它不是),或者,它是否可以是一个具有某些特定实现的贪婪算法?
如果它可以贪心,它有什么意义?如果通过选择局部最优来获得全局最优,而不重新考虑之前的选择,则不能保证二分查找的正确结果。
假设您正在寻找 8 位值范围 (1-256) 中索引 100 处的元素。您的二进制搜索进度将考虑以下索引:
- 128 ?太大
- 64 ?太小
- 64 + 32 ?太小
- 64 + 32 + 16 ?太大
- 64 + 32 + 8 ?太大
- 64 + 32 + 4 ?找到
很容易注意到,在每一步中,您都在测试尚未测试的最高有效位,如果它没有溢出结果,则会将其添加到部分解决方案中,直到找到最终结果。
所以贪婪选择的以下特点可以指出:
- 有一个由8位数字组成的候选集要查找
- 贪婪选择在每一步都考虑尚未使用的最高有效位。
- 检查是否可以将该位添加到本地的最终解决方案中,查看该位和目前组装的结果。
- 如果总和没有溢出,则该位构成最终解决方案的一部分。
- 当组合和等于搜索的总和时,可以确定最终的解决方案。
当然不需要回溯,所以这是一个完美的贪心算法。
我想如果您斜着眼睛看,二分搜索是贪婪的,因为您试图在每一步中尽可能多地减少搜索 space。它恰好是搜索中的贪心算法space,其结构既高效又总能找到正确答案。
我不习惯斜视
也就是说二分搜索可以在传统的贪心算法中使用。例如,打包问题的贪心算法可能会要求您接下来选择 "the largest available item that can still fit"。可以使用二进制搜索来找到它。
相反,可以使用贪心算法来创建非常适合二进制搜索的数据结构。参见示例 https://en.wikipedia.org/wiki/Geometry_of_binary_search_trees#Greedy_algorithm