证明在Dijkstra算法中提取的距离值是非递减的?

时间:2010-04-14 02:14:43

标签: algorithm computer-science dijkstra proof

我正在查看我的旧算法说明,并且遇到了这个证据。这来自我的任务,我认为它是正确的,但我觉得证据确实缺乏。

问题是prove that the distance values taken from the priority queue in Dijkstra's algorithm is a non-decreasing sequence.

我的证据如下:

  

矛盾证明。拳头,假设   我们从Q中拉出一个顶点   d值'我'。下次,我们拉一个   具有d值'j'的顶点。什么时候我们   拉着我,我们已经完成了我们的工作   d值并计算最短路径   从起点顶点,s到i。以来   我们有正边权,它是   我们的d值不可能缩小   当我们将顶点添加到路径中时。如果   从Q拉出我后,我们拉j   一个较小的d值,我们可能没有   因为我们可能是最短的路径   能够通过j到达我。然而,   我们已经计算出最短的   我的路。我们没有检查过   可能的道路。我们不再有了   保证路径。矛盾。

如何改进这个证据?或者更好的是,有不同的方法吗?它看起来很弱......)

编辑抱歉,在这种情况下,我的优先级队列是用最小堆实现的

1 个答案:

答案 0 :(得分:1)

让我们建立这些(这些都是正确的,因为它们基本上是算法的定义):

  
      
  1. Dijkstra算法中的优先级队列将为您提供算法每次迭代中d值最低的节点。
  2.   
  3. 没有负边缘权重。
  4.   
  5. 一旦节点出列,它将永远不会返回队列。
  6.   
  7. 已出列的节点的d值是最终的,并且不会从该点开始改变。
  8.   

继续(1),假设(2)应用的该出队节点的d值将至少等于前面提取的d值,因为每个节点的d值取决于d值在它之前出列的节点,这是一种递归定义。由于(3)和(4)是正确的,因此该递归定义在d值为0的起始节点处结束 因此,如果每个节点的d值至少等于他之前的d值,并且(1)仍然适用,则从优先级队列中提取的d值集合非递减

(阅读完这篇文章后,你写的内容基本相同,但我觉得有点好)