Dijkstra算法可以找到从单个源顶点到所有其他顶点的所有最短路径,这样路径就可以访问无向和对称图形中的所有顶点一次吗?对称图有更快的算法吗?
答案 0 :(得分:3)
您要求的是一种算法,用于从图中的单个节点到每个其他节点找到最短的Hamiltonian paths(哈密尔顿路径是一个只通过图中每个节点一次的路径)。不幸的是,甚至确定是否无向图中的一对节点之间的哈密顿路径的问题是NP完全的,因此没有已知的多项式时间算法来解决这个问题(除非P = NP,否则它们不存在)。由于Dijkstra的算法在多项式时间内运行,因此该算法没有已知的修改方法可以找到图中每个其他节点的哈密顿路径。
希望这有帮助!
答案 1 :(得分:1)
是的,Dijkstra的算法将帮助您找出有向图和无向图中的最短路径。但是当使用有向图时它更有用。
Bellman-Ford算法可以比Dijsktra快,但仅在少数情况下,该算法对于具有负循环的图形有效。
Dijkstra算法的最简单实现导致O(| E | + | V | ^ 2)的运行时间。 [| E | &安培; | V |表示图的边和顶点。
答案 2 :(得分:0)
Dijkstra算法找到从一个选定点到所有其他点的最短路径。它是针对具有非负边的图(定向或非定向)定义的。对于这种情况,没有更快的算法。
如果边缘权重有限制 - 可能会有更快的算法。例如,如果权重限制为[0,1] - 可以使用BFS算法。
这可以推广到具有整数权重的情况,也可以使用更快的算法。 (即,不是使用二进制搜索树,而是可以使用一组有限的数组)。