【问题标题】:Stopping criteria for a bidirectional Dijkstra's (or uniform cost search) algorithm双向 Dijkstra(或统一成本搜索)算法的停止标准
【发布时间】:2017-06-20 06:53:47
【问题描述】:

据我了解,双向 Dijkstra 搜索(具有单一开始和结束状态)的停止条件如下

从变量 mu = infinity 开始 从开始 (s) 和结束状态 (t) 开始搜索 当两者在节点 w 相交时(我们当前从正向搜索中查看的节点正在反向搜索中,反之亦然),然后重新计算 mu 为

mu = distance(s,w) + distance(w,t)

然后检查前两个节点(接下来要检查的节点)的组合距离是否 >= mu,如果有,则终止

if distance(s, top_forward_node) + distance(top_reverse_node, t) >= mu, stop

但是如果我在一个简单的三角形上尝试这个,它会失败。假设我有一个三角形 (a,b,c),ab = 10,bc = 6 和 ac = 7。起始状态 = a,终止状态 = b。显然,最短距离是 ab = 10。但是前向传球从 a 开始,同时查看 b (10) 和 c (7),而反向传球从 b 开始,查看 a (10) 和 c (6)。由于 c 是成本最低的节点,因此前向传递查看 c,但由于它不在已查看的反向节点中,因此将其存储并移动到反向传递。反向遍历查看 c,发现它在正向遍历查看的节点中,并将 mu 值从无穷大更新为 7 + 6。接下来要查看的节点是 b 和 a,路径成本为 10每个,但是如果我简单地将两个 (10 + 10) 相加,我得到一个值 20,它 >= 7 + 6,所以我的算法错误地以 acb 的路径终止。我哪里错了?

forward pass explored nodes = [a(0)]
reverse pass explored nodes = [b(0)]
forward pass frontier nodes = [c(7), b(10)]
reverse pass frontier nodes = [c(6), a(10)]

从前向传递边界节点探索 c(7)。它是反向传递探索的节点吗?不。继续前进

forward pass explored nodes = [a(0), c(7)]
forward pass frontier nodes = [b(10)]

从反向传递边界节点探索 c(6)。它在前向传播探索节点中吗?是的。重新计算 mu

mu = distance(a,c) + distance(c,b) = 6 + 7 = 13
reverse pass explored nodes = [b(0), c(6)]
reverse pass frontier nodes = [a(10)]

检查终止

top_node(forward pass frontier nodes) + top_node(reverse pass frontier nodes) >= mu
10 + 10 > 13?

是的。返回路径 a-c-b

参考:http://www.cs.princeton.edu/courses/archive/spr06/cos423/Handouts/EPP%20shortest%20path%20algorithms.pdf 上的幻灯片 10

这个答案对我没有帮助:Termination Criteria for Bidirectional Search

【问题讨论】:

  • 为什么要加 10 + 10?

标签: algorithm search dijkstra bidirectional


【解决方案1】:

我知道我哪里出错了。在检查我是否与相反的搜索相交时,我应该检查边界节点和探索节点,而不仅仅是探索节点。这样做会得到正确的结果。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多