我正在查看我的旧算法说明,并且遇到了这个证据。这来自我的任务,我认为它是正确的,但我觉得证据确实缺乏。
问题是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到达我。然而, 我们已经计算出最短的 我的路。我们没有检查过 可能的道路。我们不再有了 保证路径。矛盾。
如何改进这个证据?或者更好的是,有不同的方法吗?它看起来很弱......)
编辑抱歉,在这种情况下,我的优先级队列是用最小堆实现的
答案 0 :(得分:1)
让我们建立这些(这些都是正确的,因为它们基本上是算法的定义):
- Dijkstra算法中的优先级队列将为您提供算法每次迭代中d值最低的节点。
- 没有负边缘权重。
- 一旦节点出列,它将永远不会返回队列。
- 已出列的节点的d值是最终的,并且不会从该点开始改变。
醇>
继续(1),假设(2)应用的该出队节点的d值将至少等于前面提取的d值,因为每个节点的d值取决于d值在它之前出列的节点,这是一种递归定义。由于(3)和(4)是正确的,因此该递归定义在d值为0的起始节点处结束 因此,如果每个节点的d值至少等于他之前的d值,并且(1)仍然适用,则从优先级队列中提取的d值集合非递减
(阅读完这篇文章后,你写的内容基本相同,但我觉得有点好)