【发布时间】:2017-07-25 12:40:06
【问题描述】:
我正在阅读有关 Binary search 的不同材料,我不清楚它是一个贪婪的二进制文件(在我看来它不是),或者它可以是一个具有某些特定实现的贪婪算法吗?
如果它可以是贪婪的,它有什么意义?如果通过选择局部最优得到全局最优,而不重新考虑之前的选择,就不能保证二分查找的正确结果。
【问题讨论】:
标签: algorithm binary-search greedy
我正在阅读有关 Binary search 的不同材料,我不清楚它是一个贪婪的二进制文件(在我看来它不是),或者它可以是一个具有某些特定实现的贪婪算法吗?
如果它可以是贪婪的,它有什么意义?如果通过选择局部最优得到全局最优,而不重新考虑之前的选择,就不能保证二分查找的正确结果。
【问题讨论】:
标签: algorithm binary-search greedy
我猜如果你斜眼看它,二分搜索是贪婪的,因为你试图在每一步中尽可能多地减少搜索空间。它恰好是搜索空间中的一种贪心算法,其结构既高效又总能找到正确的答案。
我不习惯眯着眼睛。
也就是说,二进制搜索可以在传统的贪心算法中使用。例如,包装问题的贪心算法可能会要求您接下来选择“仍然可以容纳的最大可用物品”。可以使用二分搜索来找到它。
相反,贪心算法可用于创建非常适合二进制搜索的数据结构。参见例如https://en.wikipedia.org/wiki/Geometry_of_binary_search_trees#Greedy_algorithm
【讨论】:
假设您正在 8 位值范围 (1-256) 中查找索引 100 处的元素。您的二分搜索进度将考虑以下指标:
很容易注意到,在每一步中,您都在测试尚未测试的最高有效位,如果它没有溢出结果,它将被添加到部分解决方案中,直到找到最终结果。
因此可以指出贪婪选择的以下特征:
当然不需要回溯,所以这是一个完美的贪心算法。
【讨论】: