Algorithm 分行与分行之间的差异;绑定(+;扩展列表)和Dijkstra';图的s算法

Algorithm 分行与分行之间的差异;绑定(+;扩展列表)和Dijkstra';图的s算法,algorithm,graph,dijkstra,branch-and-bound,Algorithm,Graph,Dijkstra,Branch And Bound,23:14时,我正在研究,我觉得带有“扩展列表”的branch&bound与Dijkstra的算法非常相似。稍后在讲座中,当算法再次用可接受的启发式进行扩展时,我们得到一个* 这让我想到Dijkstra的算法就是分支定界的一个子类。是这样吗 总结讲座: 探索了搜索算法。特别是,它们从一个简单的分支定界解决方案开始: 在访问(扩展)目标节点之前,访问与源距离最短的节点,并将其后续节点添加到要访问的节点优先级队列(按最小距离排序)。这还不能检测周期(例如,多次访问节点),而且由于组合爆炸,效率相当

23:14时,我正在研究,我觉得带有“扩展列表”的branch&bound与Dijkstra的算法非常相似。稍后在讲座中,当算法再次用可接受的启发式进行扩展时,我们得到一个*

这让我想到Dijkstra的算法就是分支定界的一个子类。是这样吗


总结讲座:

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

在访问(扩展)目标节点之前,访问与源距离最短的节点,并将其后续节点添加到要访问的节点优先级队列(按最小距离排序)。这还不能检测周期(例如,多次访问节点),而且由于组合爆炸,效率相当低

一个简单的扩展可以使算法执行得更好:记住哪些节点已经被访问(扩展,因此扩展列表)。现在没有节点被访问两次,并且算法的性能相当好

在最后一部分中,一个可接受的启发式被添加到混合中,以得到一个*


我希望这是足够的信息,并且我不必复制讲座中的例子。如果不是,让我知道,我会做的

区别只是在执行上,想法是一样的。Dijkstra算法的特殊之处在于它是用堆进行分支绑定的(这会给您带来很大的加速)。

是的,您是对的,只要我们假设扩展列表可以动态检查。如果我们在
“扩展列表”
中有一个状态,这意味着我们访问该状态的路径为
value=n


当我们运行算法时,如果我们遇到一条路径访问该节点时,其值为
“扩展列表”
为我们提供了在
BnB
的优先级队列上替换该路径的选项,该队列本质上是
Djikstra
。你可以用一个哈希表来实现它,该哈希表为每个节点保留算法运行的每一时刻的最短路径值,就像
Djikstra

我最近看了这些讲座,也有同样的想法。你有没有找到这个问题的答案?很遗憾,没有。但我很确定我是对的。我不再喜欢这个讲座了,但我认为唯一的区别可能是,在Dijkstra的《我们放松已经排队的节点》,而听起来分支定界方法是让一个重复的节点排队。这是一个实现细节。你会说一个是完整的,而另一个不是吗?我不知道你所说的“完整”是什么意思。