Graph 迪克斯特拉';寻找最加权路径的s算法

Graph 迪克斯特拉';寻找最加权路径的s算法,graph,dijkstra,longest-path,Graph,Dijkstra,Longest Path,我只是想确定这会起作用。你能用Dijkstra的算法找到最大的路径吗?您是否需要先将距离初始化为-1,然后更改relax子例程以检查距离是否更大 这是一个不会有任何负权重的问题 这实际上就是问题所在: 假设给你一张电话网络图,这是一张图 其顶点表示交换中心,其边表示通信 两个中心之间的直线。边缘以其最低带宽标记 带宽边缘。给出一个算法,给定一个图和两个开关,一个 和b,将输出a和b之间路径的最大带宽 这样行吗 编辑: 我确实发现: 提示:基本子程序与Dijkstra中的Relax子程序非常相似

我只是想确定这会起作用。你能用Dijkstra的算法找到最大的路径吗?您是否需要先将距离初始化为-1,然后更改relax子例程以检查距离是否更大

这是一个不会有任何负权重的问题

这实际上就是问题所在:

假设给你一张电话网络图,这是一张图 其顶点表示交换中心,其边表示通信 两个中心之间的直线。边缘以其最低带宽标记 带宽边缘。给出一个算法,给定一个图和两个开关,一个 和b,将输出a和b之间路径的最大带宽

这样行吗


编辑:

我确实发现:

提示:基本子程序与Dijkstra中的Relax子程序非常相似。 假设我们有一条边(u,v)。如果min{d[u],w(u,v)}>d[v],那么我们应该更新 d[v]到min{d[u],w(u,v)}(因为从a到u再到v的路径具有带宽 min{d[u],w(u,v)},这比我们目前拥有的要多)


由于初始化时所有距离都是无穷大的,所以不太确定这意味着什么。所以,我不知道这是怎么回事。有什么线索吗?

计算流量可能更适用,但是流量允许使用多条路径。

我不确定Djikstra的方法是否可行。负权重会对Djikstra造成不好的影响

我认为您可以按边的权重排序,并开始删除权重最低的边(最严重的瓶颈),然后查看图形是否仍然连接(或者至少是起点和终点)。当你知道你已经解决了瓶颈,你可以通过查看边的值来获得带宽时,这个图就被破坏了。(如果我没有弄错的话,每次迭代都需要O(E)时间,您需要O(E)次迭代才能找到瓶颈边缘,因此这是一个O(E2)算法


编辑:您必须认识到,最大的路径不一定是最高的带宽:您希望最大化
min({edges in path})
,而不是
sum({edges in path})

只将边权倒置。也就是说,如果边权为D,则将其视为D^ 1。然后将Dijkstra设为常态。将所有距离初始化为常量。

< P>可以使用Dijkstra的算法找到唯一的最长路径,但由于只有两个交换中心,所以我不明白为什么需要像我一样访问每个节点。n Dijkstra’s。有一种更为理想的方法,例如分支定界算法。

您可以通过修改Dijkstra’s来计算到所有其他顶点的最大带宽,从而轻松解决此问题

您不需要将起始顶点初始化为-1

Algorithm: Maximum Bandwidth(G,a)

Input: A simple undirected weighted graph G with non -ve edge weights, and a distinguished     vertex a of G

Output: A label D[u], for each vertex u of G, such that D[u] is the maximum bandwidth available from a to u.


Initialize empty queue Q;
Start = a;
for each vertex u of G do,
   D[u] = 0;

for all vertices z adjacent to Start do{                              ---- 1

 If D[Start] => D[z] && w(start, z) > D[z] {
    Q.enqueue(z);
    D[z] = min(D[start], D[z]);
  }
}
If Q!=null {
   Start = Q.dequeue;
   Jump to 1

}

else
  finish();

这可能不是计算带宽的最有效方法,但这是我现在能想到的。

你能调整AllPairsShortestPath算法中的一些逻辑吗(Floyd Warshall)?


将未连接的边初始化为负无穷大,而不是取距离的最小值取最大值?

@b他说没有负权重如果原始图没有负权重,那么对它们求反将使它们为负……这是使用最短路径算法查找lo时首先想到的n最长路径。你真的,真的不能。至少,在我们证明P==NP之前,我们不能。最长路径问题是NP完全的。@B区域-很有趣。那么,你能不能继续删除边,当你发现一条边使从A到B的路径不完整时,就把那条边放在一边,继续到下一条边,直到所有边都被迭代通过?否…如果我理解正确,带宽受到所选路径中最小带宽边缘的限制。因此,您希望最大化此最小带宽边缘。因此,您继续删除“当前最小”边缘,直到您发现当前最小的边缘对连接至关重要。然后您停止,因为您知道无法通过使用其他边缘而不是当前最小的边缘来增加带宽。简短的回答是:不,它不起作用。最长路径问题没有Dj假设的最佳子结构ikstra的,所以Djikstra的不会给你正确的答案。