Dijkstra的算法不能处理负权重,你何时在现实世界中看到负权重?

时间:2011-04-28 18:58:10

标签: graph dijkstra

我想不出你有一个负面重量的具体例子。你不能在两个房子之间有一个负距离,你不能回到过去。你什么时候会有一个负边缘权重的图表?

我发现Bellman Ford算法最初用于处理ARPANET中的路由,但是再一次,无法想象你在哪里遇到负权重的路由,它似乎不可能。我可能只是在想这个,这会是一个简单的例子吗?

5 个答案:

答案 0 :(得分:12)

假设走一段距离需要一定量的食物。但是沿着一些路径,你可以收集食物,所以你可以通过这些途径获得食物。

答案 1 :(得分:2)

在进行路由时,可能会为链接分配负权重,使其成为默认路径。如果您有主线路和备用线路,并且由于某种原因您不希望在它们之间进行负载平衡,则可以使用此功能。

答案 2 :(得分:1)

即使有一个例子;你可以将它标准化为一切正面。负重量的任何实际表示都相对于某些0.我想我所说的是,可能没有使用负权重的应用,而不能仅使用正权重。

编辑:在考虑了这一点后,我想你可能会遇到给定路径负重的情况。在这方面;假设负重是坏的,你必须有一种情况,即实现到达你想要的终点的目标的唯一可能的方法,意味着你的图中至少有一个点,你'需要采取消极的路径(如,没有其他选择可用于达到目标)。但我想如果图表没有被遍历过;你怎么知道这是真的?

编辑(再次):@ Jim,我认为你是对的。阻塞点并不真正相关。我想我太快就认为这是因为在引入负边时出现在我脑海中的一个问题是 - 如果可以在没有任何负边缘的情况下遍历图形,那么在第一个中出现的负边是什么地点?但是,这并不是很好,因为 - 事后看来 - 如果没有跨越负边缘,你怎么能知道图表是否可以遍历?

另外值得注意的是,根据wikipedia page for Djikstra's algorithm

  

Dijkstra算法由荷兰计算机科学家Edsger Dijkstra于1956年构思并于1959年发布,是一种图搜索算法,可解决具有非负边路径成本的图的单源最短路径问题,生成最短路径树。该算法通常用于路由和其他图算法中的子程序。

所以,尽管这次谈话很有用并且发人深思;也许问题的标题应该是“用于遍历具有负边缘的图形的适当算法是什么?” Djikstra的算法旨在找到最短的路径。但是,如果你引入正负权重,那么目标不是从找到最短路径到找到MOST正数 - 无论你选择的路径上有多少边缘?如果确实如此,退出条件是什么?你知道自己已经达到最佳解决方案的唯一方法就是如果你遇到包含所有正边缘而没有任何负边缘的路径 - 并且这种情况不会偶然发生吗?所以 - 如果引入正负权重的情况会使目标变得最积极(或取决于你想如何构建它的负面),这个问题不会注定O(n!),因此最好通过决策算法(如alpha / beta)解决,如果对你允许采取的边缘总量有限制,会产生最佳结果吗?

答案 3 :(得分:1)

我猜你可能会得到负权重,你已经有一个非负权重的系统,并且路径出现比所有现有路径便宜,并且由于某种原因,重新加权网络的成本很高。

答案 4 :(得分:0)

如果你想找到最快的方式在水上乐园的一系列连接池中游泳,它就会有水槽。

相关问题