【发布时间】:2012-01-26 14:36:49
【问题描述】:
Dijkstra(G,w,s) {
ISS(G,s);
let S be an empty set
let Q be a priority queue, initialized with V[G]
while Q is not Empty:
u<-extractMin(Q);
add u to S
for each vertex v neighbor of u
Relax(u,v,w);
}
我的问题是,为什么在 while 循环中算法的每一步中选择 Q 中所有 v 的 MINIMUM d[v] 很重要,如果我们不选择最小值会发生什么?
我的意思是,从我的角度来看,所有边 (u,v) 都会以广度一阶放松(意味着如果 - s->u->v 和 (s,v) 不在 E 中,那么(s,u) 会在 (u,v)) 之前放松, 那么为什么每次都选择最小的 d[v] 很重要呢?
假设存在一个函数 extractMaxFiniteD(Q),它返回顶点 v,使得它的最大 d[v] 在 Q 中是有限的
假设我们将该行更改为 u
我知道这个问题可能非常困难和抽象,但如果 some1 可以帮助我解决这个问题会很棒。
【问题讨论】:
-
你真的在任何图表上尝试过吗?使用 Max 会产生错误结果的概率非常高!
-
我对特定图表不太感兴趣,我想了解我们试图通过选择最小的每一步来保留什么属性。
-
如果你在几乎任何图表上这样做,一步一步地查看中间结果,你就会明白 min 的目的
-
选择无穷大是不合法的,让我们假设 extractMaxFiniteD 返回顶点 v 使得它的最大 d[v] 在 Q 中是有限的,还是那么微不足道吗?
标签: algorithm computer-science graph-theory dijkstra