好的,我发布这个问题是因为这个练习:
我们能否修改Dijkstra的算法,通过变极小为极大来解决单源最长路问题?如果是,那么证明你的算法是正确的。如果没有,那么提供一个反例。
距离[w]>距离[v]+重量
更改为距离[w]<距离[v]+重量
然后我做了一些研究来验证我的答案。我发现了这个帖子:
从源到DAG中某些节点之间的最长路径
不,我们不能1-或者至少,不知道多项式缩减/修改-最长路径问题是NP难的,而dijkstra在多项式时间内运行!
如果我们能在多项式时间内找到dijsktra的一个模化来回答最长路径问题,我们可以导出P=np
如果没有,那么提供一个反例。
这是个很糟糕的任务。反例可以提供一个特定的修改是错误的,而可能有一个不同的修改是可以的。
事实是我们不知道最长路径问题在多项式时间内是否可解,但一般的假设是--它不是。
关于只是改变放松步骤:
A
/ \
1 2
/ \
B<--1---C
edges are (A,B),(A,C),(C,B)
来自A的dijkstra将首先选择B,然后B永远无法到达--因为它不在距离集
之外。
(1)很可能,如果p=np,可能是可能的,但可能性很小。
我正在尝试解决在图表中查找最长路径的问题。即使在维基百科中,它也提到我们正试图找到最长的简单路径 。 简单路径是没有顶点/边重复的路径。 非简单路径是顶点/边可以重复的路径。我可以把循环或者回路看作非简单路径。而且由于电路总是有循环的。 问题: 对于有向/无向图,我可以这样说。非简单路径总是有循环吗 因为在非简单路径中有一个循环,最长的非简单路径或图是不可能的?(就像我们没有找到负边图的最短距离的
import scala.reflect.ClassTag import org.apache.spark.graphx._ /** * Computes shortest paths to the given set of landmark vertices, returning a graph where each * vertex attribute is a map containin
我遇到了一个问题,我必须找出给定图形中的最长路径。我有一个边列表(例如,{AB,BC}),它表明在顶点/节点(A,B,C)之间有一条边。现在我想计算出可能的最长路径(不重复顶点),这样它可以覆盖从任何顶点/节点开始的最大节点。 解决这个问题的最佳方法是什么?我必须把它作为一个计划来实施。 我在谷歌上查找最小生成树、Dijkstra的算法等等。但我想不出什么最适合解决这个问题。 任何帮助或阅读参考资
Dijkstra不能用于最长路径,因为它使用的属性是当前最短路径肯定比其他路径短。这是正确的,当然,假设没有负边缘权重。这个概念也是为什么最长路径在Dijkstra上不起作用的原因,因为当前最长的路径不能保证以后不会有另一个更长的路径取更大的值。 另一方面,贝尔曼福特提供了在较差的性能负权重的灵活性。这意味着,对于贝尔曼福特来说,它不像迪克斯特拉那样在同样贪婪的财产上工作。所以这就是为什么我很困惑
我的图形不包含这样的边,它们将顶点连接到自身。两个顶点之间只有一条边。通过维基百科,我了解了一些基于给定条件计算最短路径的算法。最著名的算法之一是Dijkstra的算法,它可以找到从源顶点到图中所有其他顶点的最短路径 但是通过使用Dijkstra的算法,我没有必要探索所有的顶点,但是我的目标只是找到从单一来源到单一目的地的最短路径。我应该在这里使用哪种策略?所以我不需要探索所有其他顶点。 我的方法
我有一个一般性的问题,关于如何在边没有权的无向图中找到最短路径和最长路径。 我们需要使用DFS算法来寻找图中的最长路径,而我们需要使用BFS算法来寻找图中的最短路径,这是一个正确的结论吗?