当前位置: 首页 > 知识库问答 >
问题:

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

狄宪
2023-03-14

我知道这可能会被选为副本(因为我已经看到了这张使用Dijkstra算法的负权重图,所以我认为其中没有一个答案是我想要的。我对Dijkstra算法在有一条负边的图中的解感兴趣,但Dijkstra仍然会显示正确的解。那张图会是什么样子?我无法想象,或者我不擅长enough需要了解Dijkstra如何处理负边缘。我知道有一个带负边的图,可以用Dijkstra遍历,并且仍然有正确的路径。请不要告诉我使用贝尔曼·福特或约翰逊算法

共有3个答案

乔丁雨
2023-03-14

如果负边的绝对值小于无向图中任何其他边的权重,则Dijkstra算法可以很好地工作。

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

注意:这不适用于有向图,在有向图中,从队列中弹出目标endpoint后可能会遇到负边的源endpoint(因此可能需要更新弹出的节点)。

卫博学
2023-03-14

例如,任何一个图,负边都会导致竖直,而竖直中没有边。

壤驷德宇
2023-03-14

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

 类似资料:
  • 问题是: 下面是我的Java类,我认为它的代码可以解决问题9:

  • Spring配置 2016-07-15 16:03:12,525 DEBUG MethodSecurityInterceptor:348-以前通过身份验证:org.springframework.security.authentication.usernamePasswordAuthenticationToken@7670236f:principal:SystemUser[userid=1,nam

  • 我是机器学习和OpenCV的新手。我从Cohn-Kanade人脸数据库中为每种情绪(中性和快乐)拍摄了一组10张图像。然后,我从每个图像中提取面部特征,并将它们放入我的训练数据矩阵中,并为各自的情绪分配标签(例如:0表示中性,1表示快乐)。 我使用了gamma=0.1和C=1的RBF内核。经过训练后,我将从智能手机摄像头中提取出的面部特征用于预测。预测总是返回1。 如果我增加中性表达式的训练样本数

  • 问题内容: 情况一: 输出: 2005年7月8日星期五00:00:00 GMT-0700(PST) 案例二: 输出: Thu Jul 07 2005 17:00:00 GMT-0700(PST) 为什么第二次解析不正确? 问题答案: 在第5版规范发布之前,该Date.parse方法完全依赖于实现(除后者返回数字而不是a之外,其他方法new Date(string)等效)。在第5版规范中,添加了该要

  • 我在React应用程序中使用moment.js,并使用以下代码查找两个unix时间戳之间的差异: null 使用时刻V2.19.2和节点V7.9.0 编辑:输出需要'ed,和之间的时间差可以是几分钟到几个月...