我正在查看我的旧算法笔记并遇到了这个证明。这是我的一个作业,我做对了,但我觉得证明确实缺乏。
问题是prove that the distance values taken from the priority queue in Dijkstra's algorithm is a non-decreasing sequence.
我的证明如下:
反证法。首先,假设我们从 Q 中拉出一个 d 值为“i”的顶点。下一次,我们拉出一个 d 值为 'j' 的顶点。当我们拉出 i 时,我们已经确定了我们的 d 值并计算了从起始顶点 s 到 i 的最短路径。因为我们有正的边权重,所以当我们向路径添加顶点时,我们的 d 值不可能缩小。如果从 Q 中拉出 i 后,我们拉出具有较小 d 值的 j,我们可能没有到 i 的最短路径,因为我们可能能够通过 j 到达 i。但是,我们已经计算了到 i 的最短路径。我们没有检查可能的路径。我们不再有保证的路径。矛盾。
如何改进这个证明?或者更好的是,有不同的方法吗?它似乎很弱:)
编辑:对不起,在这种情况下,我的优先级队列是用最小堆实现的