贪心最佳优先搜索算法是否与最佳优先搜索算法不同?

时间:2011-12-04 09:06:12

标签: algorithm search artificial-intelligence best-first-search

贪婪最佳优先搜索算法是否与最优先搜索算法不同?

wiki page有一个关于贪婪BFS的单独段落,但有点不清楚。

我的理解是,Greedy BFS只是BFS,维基百科算法中的“OPEN最佳节点”是一个为节点计算的启发式函数。所以实现这个:

OPEN = [initial state]
CLOSED = []
while OPEN is not empty
do
 1. Remove the best node from OPEN, call it n, add it to CLOSED.
 2. If n is the goal state, backtrace path to n (through recorded parents) and return path.
 3. Create n's successors.
 4. For each successor do:
   a. If it is not in CLOSED: evaluate it, add it to OPEN, and record its parent.
   b. Otherwise: change recorded parent if this new path is better than previous one.
done

“来自OPEN的最佳节点”是一个启发函数,用于估计节点与目标的接近程度,实际上是Greedy BFS。我是对的吗?

编辑:评论Anonymouse的回答:

所以基本上贪婪的BFS不需要“OPEN列表”,而且应该仅根据当前节点做出决定?这个算法是GBFS:

1. Set START as CURRENT node
2. Add CURRENT to Path [and optinally, to CLOSED?]
3. If CURRENT is GOAL, exit
4. Evaluate CURRENT's successors
5. Set BEST successor as CURRENT and go to 2.

3 个答案:

答案 0 :(得分:26)

“最佳第一”可以允许修改决定,而在贪婪算法中,决策应该是最终决定,而不是修改。

例如,A * -search是最佳搜索,但并不贪心。

但请注意,这些术语并不总是使用相同的定义。 “贪婪”通常意味着决定永远不会被修改,最终接受次优解决方案,从而有利于改善运行时间。但是,我打赌你会发现“贪婪”用于“最佳第一+深度优先”的组合情况,如“尝试扩展最佳下一步直到我们达到死胡同,然后返回上一步并继续那里的下一个最好的“(我称之为”优先深度优先“)。

此外,它取决于您所谈论的抽象级别。 A *在“建立路径”中并不贪心。保持一大堆开放路径很好。然而,“将搜索空间扩展到真正的最短路径”是贪婪的。

答案 1 :(得分:2)

BFS是tree search and graph search algorithms的一个实例,其中根据评估函数f(n) = g(n) + h(n)选择一个节点进行扩展,其中g(n)是从根到{{1}的路径的长度}和n是从h(n)到目标节点的路径长度的估计值。在BFS算法中,选择评估最低的节点(即最低n)进行扩展。

贪婪BFS使用以下评估函数f(n),它只是启发函数f(n) = h(n),它估计h(n)与目标的接近程度。因此,贪婪的BFS尝试扩展被认为最接近目标的节点,而不考虑先前收集的知识(即n)。

总而言之,这些(类似的)搜索方法之间的主要区别在于评估功能。

作为旁注,A *算法是一种最好的搜索算法,其中启发式函数g(n)是一个可接受的启发式算法(即h总是低估完美的启发式函数{ {1}},适用于所有h)。 A *不是一个gredy BFS算法,因为它的评估函数是h*

答案 2 :(得分:0)

据我所知,“最佳优先搜索”只是特定搜索技术的集体名称,您可以使用启发式评估函数h(n)。 因此,A *和贪婪的最佳优先搜索是属于此类别的算法。