比较不同的搜索算法

时间:2010-02-11 06:36:27

标签: java algorithm search

DFS和Best-first搜索在哪些方面类似? BFS和Best-first如何相似?

对我而言,为了更好地描述DFS和BestFS是如何相似的,可能更容易指出差异,即在我们选择的BestFS中,使用heuristi函数扩展看起来最接近目标的那个。在几乎所有其他方面,最佳和DFS都是相似的。

但是我发现很难找到BFS和BestFS之间的相似之处

2 个答案:

答案 0 :(得分:7)

好的想象你有一棵树。你知道它有一个包含你想要的数据的叶子假设你想通过在树的各个分支上旅行找到它,直到你找到它。

使用 Depth First search ,如果你遇到一个分支,你会接受那个分支,然后拿另一个分支和另一个分支,直到你找到一个叶子。

当你遇到一个新的分支时,用 Breadth first search (注意我没有说“最好的第一个”)你将它添加到队列中以便稍后返回找到当前级别的所有分支。通常当人们说“BFS”时,他们的意思是 广度第一次搜索,而不是最佳搜索。

那么 Best first search ,就像你问的那样?好吧,假设您正在进行深度优先搜索,并且您遇到了两个分支。使用DFS,您每次都会选择第一个,之后,您将返回并选择另一个。

使用 最佳第一次搜索,您可以选择具有最高启发式值的分支,基于您用来帮助猜测最佳路径的一些启发式算法。因此,Best First搜索是深度优先搜索的类型

对于这些类型的问题,维基百科是very helpful,顺便说一句。

答案 1 :(得分:2)

最佳优先搜索是一种知情搜索,适用于有关您正在搜索的状态空间的某些信息已知的情况。熟悉状态空间或您正在使用的系统,有助于开发一种启发式方法,在每个搜索步骤中确定最佳节点。简而言之,Best First Search使用Greedy范例来达到目标​​,即搜索目标。

Depth First Search和广度优先搜索是不知情的搜索方法,当您对所处理的系统一无所知时,它们非常方便。他们在记忆方面有自己的权衡(相互之间),并保证找到解决方案(如果存在)。您可以在Wiki

中查看详细信息

我没有看到不知情的搜索和知情搜索方法之间的相似之处,只是它们有助于解决搜索问题。可以争论相似性的另一个方面是搜索是否完整(搜索方法在每当存在时返回解决方案时称为完成)和最佳(搜索方法在返回时是最优的只要存在解决方案,最低成本路径解决方案)

广度优先搜索 - 完整且最优(如果所有边都有单位成本)

深度优先搜索 - 完成(对于有限搜索树)而非最佳

最佳首次搜索 - 完整且优化

关键是要知道在什么情况下使用哪一个。

我希望这会有所帮助。

欢呼声