Algorithm Dijkstra处理一个负边并给出正确的解决方案,一旦给出错误的解决方案

Algorithm Dijkstra处理一个负边并给出正确的解决方案,一旦给出错误的解决方案,algorithm,graph,dijkstra,greedy,Algorithm,Graph,Dijkstra,Greedy,我知道这可能会被选为重复(因为我已经看到了这一个,我认为没有答案,所以我正在寻找。 我对Dijkstra算法在有一条负边的图中的解决方案感兴趣,但Dijkstra仍然会显示正确的解决方案。该图会是什么样子?我无法想象,或者我还不足以理解Dijkstra如何处理负边。我知道有一个带负边的图可以用Dijkstra仍然拥有正确的路径。请不要告诉我使用Bellman Ford或Johnson的算法。事实上,Dijkstra的算法试图通过比较能够达到目标的路径成本,并选择成本最低的路径来找到最短路径。因此

我知道这可能会被选为重复(因为我已经看到了这一个,我认为没有答案,所以我正在寻找。
我对Dijkstra算法在有一条负边的图中的解决方案感兴趣,但Dijkstra仍然会显示正确的解决方案。该图会是什么样子?我无法想象,或者我还不足以理解Dijkstra如何处理负边。我知道有一个带负边的图可以用Dijkstra仍然拥有正确的路径。请不要告诉我使用Bellman Ford或Johnson的算法。

事实上,Dijkstra的算法试图通过比较能够达到目标的路径成本,并选择成本最低的路径来找到最短路径。因此,它基本上可以节省从起点到每个能够达到目标的节点的最低成本n到达目标。它通过比较节点和最后一个节点的新成本来实现,因此如果负值不影响该顺序(负边缘是最短路径的一部分),则路径没有问题(但您得到的路径成本错误)。此外,负边缘也无法引导您到达目标(它不是任何路径的一部分),那么你的路径和成本就没有问题了。也许你可以找到第三个例子,边缘是通往目标的一条路径的一部分,但它仍然不是最短路径的一部分。 希望这有帮助,
祝你好运。

事实上,Dijkstra的算法试图通过比较能够达到目标的路径成本和采用成本最低的路径来找到最短路径。因此,它基本上节省了从起点到能够到达目标的每个节点的最低成本。它通过将新成本与一个节点和最后一个节点进行比较来做到这一点,因此如果负值不影响该顺序(负边是最短路径的一部分)路径没有问题(但您得到了错误的路径成本)。还有负边无法引导您达到目标的情况(它不是任何路径的一部分),那么你的路径和成本就没有问题了。也许你可以找到第三个例子,边缘是通往目标的路径之一的一部分,但它仍然不是最短路径的一部分。 希望这有帮助,
祝你好运。

如果负边的绝对值小于无向图中任何其他边的权重,那么Dijkstra的算法将运行良好

这确保了我们不会出现到从队列中弹出的节点的距离稍后会更新的情况。在典型设置中(仅为正权重),一旦我们从队列中弹出一个节点,我们就可以保证无法通过较短的路径到达它


注意:此不适用于有向图,在有向图中,从队列中弹出目标端点后,可能会遇到负边的源端点(因此可能需要更新弹出的节点)如果负边的绝对值小于无向图中任何其他边的权重,则Dijkstra的算法可以正常工作

这确保了我们不会出现到从队列中弹出的节点的距离稍后会更新的情况。在典型设置中(仅为正权重),一旦我们从队列中弹出一个节点,我们就可以保证无法通过较短的路径到达它


注意:此不适用于有向图,在有向图中,从队列中弹出目标端点后,可能会遇到负边的源端点(因此可能需要更新弹出的节点)例如,任何一个图,负边导致没有边开始的竖曲线。

示例是任何一个图,负边导致没有边开始的竖曲线。

简短回答:如果图的权重为负,Dijkstra的算法不能保证有效。这并不意味着它总是失败知道吗,但当Dijkstra仍在工作时,负边缘的图形会是什么样子呢?当它是A->B(权重5)--->C(权重1)它通常是减去这两个,还是无限期地标记为?简单回答:如果图的权重为负,Dijkstra的算法就不能保证有效。这并不意味着它总是会失败。我知道,但如果图的边为负,Dijkstra怎么会仍然有效?当它是A->B(权重5)--->C(权重-1)时它通常是减去这两个,还是无限期地标记为?这就是我们看待负边的方式?我们不减去它,而是使用它的绝对值?这就是Dijkstra处理负权重的方式吗?不,负值会被加上(像往常一样),即减去其绝对值。如果顶部提到的条件为真,则算法将输出正确的路径。“Dijkstra就是这样处理负权重的吗?”--Dijkstra算法不是为负权重而设计的,因此它没有一种特定的方法来处理它们。我只是试图找到一种情况,在不做任何修改的情况下运行该算法会给出正确的结果,尽管某个地方有负权重。所以这就是我们看待负边的方式?我们不减去它,但是t使用它的绝对值?这就是Dijkstra处理负权重的方式吗?不,负数将被相加(通常),即其绝对值被减去。如果上面提到的条件为真,那么算法将输出正确的路径。“Dijkstra就是这样处理负权重的吗?”--Dijkstra算法不是为负权重设计的,因此它没有处理负权重的具体方法。我只是试图找到一种情况,在不做任何修改的情况下运行该算法将给出正确的结果,尽管存在负权重som