Yen 算法,数据结构中的 K-最短路径算法


Yen 的 K 短路径算法不会只给出单条最短路径,而是给出 *k* 条最短路径,这样我们就能获得第二条、第三条最短路径,以此类推。

设想这样一个场景:我们必须从 A 地前往 B 地,且在 A 地和 B 地之间有多条可用路线,但我们必须找到最短路径,并且略过所有在时间复杂度方面考虑较少的路径,才能到达目的地。

我们用一个例子来理解一下 -

以给定的示例为桥,它具有 B 点的峰值。如果有人希望从 A 点穿越桥梁到达 C 点,那么没有人会走到桥的最高点去穿越它。所以从 A 点到 C 点会是一条更长的路径。

通过多种方法可以获得最短路径。但我们必须找到至多 (k-1) 条最短路径。

K 最短路径算法

query= “””
MATCH(start: place{id:source}),*end: Place {Id:destination})
Call algo.kshortestPaths.stream(start,end,10, “distance”)
Yield nodeIDs, path costs, index
Return index.
   [node in algo.getNodeByID(nodeId[1…..-1]) | node.id] aS,
   Reduce (acc=0.0, cost in costs | acc+cost ) as total cost
“””
params= {“source”: Alex,Destination: “US”}
With driver.selection() as session:
  Row session.run(query, params)
  df = pd.DataFrame[dict(record) for record in rows])
pd.set_option(‘max_colwidth’, 100)
display(df)

更新于:2021 年 2 月 23 日

1K+ 浏览量

启动你的 职业

通过完成课程获得认证

开始
广告