Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 正加权有向无环图的k边最短路径_Algorithm_Shortest Path_Directed Acyclic Graphs - Fatal编程技术网

Algorithm 正加权有向无环图的k边最短路径

Algorithm 正加权有向无环图的k边最短路径,algorithm,shortest-path,directed-acyclic-graphs,Algorithm,Shortest Path,Directed Acyclic Graphs,给我一个图,G=(V,E),它是正加权的,有向的,无环的。我将设计一个运行在O(k(m+n))中的算法,用于报告从s到t的k边最短路径。k边最短路径定义为从s到t的具有k条边的路径,并且对于从s到t的所有路径,该路径的总权重也必须最小 由于BFS不能单独用于查找最短路径(除非权重相等),我认为运行时间意味着使用BFS查找具有k边的路径。让我不舒服的是k,因为我认为它意味着执行BFS k次 我可能的想法是从源代码运行BFS,以找到所有可能的k-link路径。通过跟踪沿途的级别,并在将每个节点添加到

给我一个图,G=(V,E),它是正加权的,有向的,无环的。我将设计一个运行在O(k(m+n))中的算法,用于报告从s到t的k边最短路径。k边最短路径定义为从s到t的具有k条边的路径,并且对于从s到t的所有路径,该路径的总权重也必须最小

由于BFS不能单独用于查找最短路径(除非权重相等),我认为运行时间意味着使用BFS查找具有k边的路径。让我不舒服的是k,因为我认为它意味着执行BFS k次


我可能的想法是从源代码运行BFS,以找到所有可能的k-link路径。通过跟踪沿途的级别,并在将每个节点添加到队列时存储其总路径权重,我可以找到所有可能的k-link路径及其权重。显然,如果我在较低的层次上遇到具有较低路径权重的目的地,则根据定义不存在k边最短路径。如果路径的总权重小于k条边,那么会发生什么情况?它也不是O(k(m+n))。任何有用的提示都将不胜感激。

f[i][j]
成为从
s
j
的i-link最短路径,最初我们有

f[1][x] = e(s, x);
然后迭代
K-1
次,每轮我们使用
f[i][]
计算
f[i+1][]
,这可以通过

for each node v:
    f[i + 1][v] = INF;
for each edge e[u][v]:
    f[i + 1][v] = min(f[i + 1][v], f[i][u] + e[u][v]);

因此,将
O(k(n+m))
f[i][j]
为从
s
j
的i-link最短路径,最初我们有

f[1][x] = e(s, x);
然后迭代
K-1
次,每轮我们使用
f[i][]
计算
f[i+1][]
,这可以通过

for each node v:
    f[i + 1][v] = INF;
for each edge e[u][v]:
    f[i + 1][v] = min(f[i + 1][v], f[i][u] + e[u][v]);

因此需要
O(k(n+m))

Dijkstra算法?Dijkstra算法?您还需要跟踪路径本身,而不仅仅是其成本。需要一个类似的数组父节点[i][j](i:步数,j:目标节点)。当在边(u,v)上迭代时,存储导致最小f[i+1][v]的u,您还需要跟踪路径本身,而不仅仅是其成本。需要一个类似的数组父节点[i][j](i:步数,j:目标节点)。在边(u,v)上迭代时,存储导致最小f[i+1][v]的u