分支与边界(+ 扩展列表)与 Dijkstra 的图上算法之间的区别

Seb*_*raf 5 algorithm graph dijkstra branch-and-bound

我在http://youtu.be/gGQ-vAmdAOI?t=23m14s工作时,在 23:14 我觉得“扩展列表”的分支和绑定与 Dijkstra 的算法非常相似。稍后在讲座中,当算法再次使用可接受的启发式进行扩展时,我们得到 A*。

这让我想到 Dijkstra 的算法就是分支定界的子类。那正确吗?


总结讲座:

探索了搜索算法。特别是,它们从一个简单的分支定界解决方案开始:

直到访问(扩展)目的节点为止,访问与源节点距离最短的节点,并将其后继节点加入要访问的节点优先级队列(按最小距离排序)。这还没有检测到循环(例如多次访问节点)并且由于组合爆炸而效率低下。

一个简单的扩展会使算法执行得更好:记住哪些节点已经被访问过(扩展,因此是扩展列表)。现在没有节点被访问两次,算法的性能要好得多。

在最后一部分中,将可接受的启发式添加到混合中以获得 A*。

我希望这是足够的信息,并且我不必复制讲座中的示例。如果不是,请告诉我,我会做的!

npf*_*oss 3

区别仅在于实现方式,想法是相同的。Dijkstra 算法的特殊之处在于它是使用堆进行分支定界的(这会给你带来很大的加速)。