Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Dijkstra算法性质 迪克斯特拉(G,w,s){ 国际空间站(G,s); 让我们成为一个空集 设Q为优先级队列,用V[G]初始化 Q不是空的: uu->v和(s,v)不在E中,那么(s,u)会在(u,v)之前放松, 那么为什么每次选择最小d[v]都很重要呢_Algorithm_Computer Science_Graph Theory_Dijkstra - Fatal编程技术网

Algorithm Dijkstra算法性质 迪克斯特拉(G,w,s){ 国际空间站(G,s); 让我们成为一个空集 设Q为优先级队列,用V[G]初始化 Q不是空的: uu->v和(s,v)不在E中,那么(s,u)会在(u,v)之前放松, 那么为什么每次选择最小d[v]都很重要呢

Algorithm Dijkstra算法性质 迪克斯特拉(G,w,s){ 国际空间站(G,s); 让我们成为一个空集 设Q为优先级队列,用V[G]初始化 Q不是空的: uu->v和(s,v)不在E中,那么(s,u)会在(u,v)之前放松, 那么为什么每次选择最小d[v]都很重要呢,algorithm,computer-science,graph-theory,dijkstra,Algorithm,Computer Science,Graph Theory,Dijkstra,假设存在一个函数extractMaxFiniteD(Q),它返回顶点v,这样它的最大d[v]在Q中是有限的 假设我们将该行更改为u示例: 节点:a、b、c 边缘(和重量):(a、b、1)(a、c、10)(b、c、1) 在这个问题上试试你的算法,你会发现c的最小代价路径是10,而它显然是2 当你从Q中删除一个节点时,你不会再放松它,如果你删除一个具有最大成本的节点,那么你不会考虑更少的扩展方法来达到那个节点。 如果你不想从Q中选择最小节点,那么你也不能将其从Q中移除,你必须将其保留在集合中,以便在

假设存在一个函数extractMaxFiniteD(Q),它返回顶点v,这样它的最大d[v]在Q中是有限的

假设我们将该行更改为u示例:

节点:a、b、c
边缘(和重量):(a、b、1)(a、c、10)(b、c、1)

在这个问题上试试你的算法,你会发现c的最小代价路径是10,而它显然是2

当你从Q中删除一个节点时,你不会再放松它,如果你删除一个具有最大成本的节点,那么你不会考虑更少的扩展方法来达到那个节点。


如果你不想从Q中选择最小节点,那么你也不能将其从Q中移除,你必须将其保留在集合中,以便在未来的迭代中放松。这就是该算法的基本功能。

Dijkstra算法的主要思想是:当你从
Q
中取出一个顶点时,该顶点是好的。你不必重新定义在未来把它砍掉

如果您从
Q
中获取一个随机元素,则此条件不成立-一旦您从
Q
中获取一个顶点
v
,则不能保证
d[v]
确实是到
v
的最短路径


如果你采用最小值-这是有保证的,因为如果
v
Q
中是最小值,那么对于
Q
中的每个
u
d[u]>=d[v]
,因此无论你下一步做什么样的放松,你都无法提高
d[v]

你真的在任何图形上尝试过吗?使用Max会产生错误结果的概率非常高!我对特定的图形不太感兴趣,我想通过选择最小每一步来了解我们试图保留什么属性。如果你在几乎任何图形上都这样做,一步一步地进行,并看到中间结果,你会明白选择无穷大的目的是不合法的,让我们假设extractMaxFiniteD返回顶点v,这样它的最大d[v]在Q中是有限的,它仍然那么平凡吗?
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);
}