广度优先搜索与贪婪算法

时间:2020-06-30 19:46:37

标签: algorithm graph-algorithm

在一本著名的算法书籍中,提到广度优先搜索是一种贪婪算法。但是我进行了搜索,但发现很多链接都没有这样。

我的问题: 广度优先搜索是贪婪算法吗?为什么?

您能给我一个明显的参考答案吗?!

4 个答案:

答案 0 :(得分:2)

术语“贪心算法”是指解决优化问题的算法。

BFS并非专门用于解决优化问题,因此,除非您要应用到优化中,否则说BFS是一种贪婪算法是没有道理的(即,甚至没有错)问题。在这种情况下,该语句是否正确取决于其应用方式。

“信誉良好的算法书”可能是针对特定优化问题的BFS,并且在这种情况下说它是一种贪婪的算法是正确的……您在问题中已将其省略。

答案 1 :(得分:1)

我将贪婪理解为“在给定的时间里尽力而为”。

BFS在访问节点时,只是将其子级添加到队列中。在BFS中并没有真正的“更好的孩子”,因为它通过逐层覆盖来传播图形。当访问一个节点时,可以将其子级的任何顺序添加到队列中,因此似乎没有哪个子级是更好的选择,因此,一旦不一定有更好的选择,对我来说就没有贪心的意义在算法的每个时刻。

答案 2 :(得分:0)

我认为这里存在混淆。 也许你读过 BFS Greedy 并认为它是 Breadth First Search Greedy,但事实是它是 Best First Search Greedy。这是调用应用于搜索的常用贪心算法的另一种方法。

答案 3 :(得分:0)

简单的是。为了更好地理解这一点,我建议阅读贪婪算法与启发式算法。

<块引用>

贪心算法提供了精确的解决方案!启发式算法使用概率和统计数据来避免遍历所有可能性并提供“估计的最佳解决方案”(这意味着如果存在更好的解决方案,它只会稍微好一点)。

贪心算法在每个阶段都遵循局部最优解。在搜索最佳解决方案时,只有在搜索找到更好的解决方案时才会更新目前最好的解决方案。而启发式算法(例如遗传、进化、禁忌搜索、蚂蚁搜索等)并非总是如此。启发式算法可能会更新目前最好的,即使它比目前最好的更差,以避免陷入局部最优解。

因此,简而言之,BFS/DFS 通常属于贪婪算法。

相关问题