我想更好地理解各种常见的搜索算法是如何相互关联的。有人知道相关的资源吗?例如层级图表或关于此的简洁文字描述。
举个小例子,我想要的是这样的:
A* 搜索 -> 统一代价搜索是 A* 的一个变体,其中启发式函数是一个常数函数 -> Dijkstra 算法是无目标的统一代价搜索的一个变体 -> 广度优先搜索是 A* 的一个变体,其中所有步进代价都是正数且相同
等等。
谢谢!
回答:
实际上并没有这样的层级结构,只有一堆具有不同特征的不同算法。
例如,A* 可以被认为是基于 Dijkstra 算法的,并添加了一个启发式函数。或者可以被认为是基于启发式最佳优先搜索的,并额外考虑了到目前为止的路径代价。
类似地,A* 的实现方式与典型的广度优先搜索非常相似(即使用节点队列)。迭代加深的 A* (IDA*) 基于 A*,因为它使用相同的代价和启发式测量,但实际上是作为深度优先搜索方法实现的。
这里与优化算法也有很大的交叉。有些人认为遗传算法是一堆复杂的爬山尝试,但另一些人认为它是一种束搜索。
搜索和优化算法通常从多个来源借鉴属性,混合和匹配方法,使其更适合搜索领域或计算需求。因此,你不会找到方法的层级结构,而是会发现各种方法中出现的一系列主题。