Dijkstra的运行时间分析,用于最短路径算法,但最大K停

时间:2019-02-05 03:21:48

标签: algorithm

对于这样的问题(https://leetcode.com/problems/cheapest-flights-within-k-stops/),我可以使用Dijkstra算法(上限为O(| E | + | V | log | V |))解决此问题。

但是,由于还有一个额外的停止标准,即最多K个停止。如果K

问:我如何将K停靠点纳入Dijkstra算法的分析中?

Q2:如果我们假设图是完全连接的(每个顶点每隔一个顶点连接一次,那么E = V ^ 2)怎么办?这会改变分析吗?

1 个答案:

答案 0 :(得分:0)

Dijkstra的算法不适用于此问题。一旦找到顶点的最便宜路径,就不会再寻找任何其他路径...但是,到达顶点的最便宜路径可能会占用太多的插槽,以允许从那里到目标的最便宜路径。如果它有更多的停靠点可以到达目标,则可能是一条更昂贵的通向中间顶点的路径。

例如:

S--1--A--1--B--1--C--1--T
 \         / \         /
  `---4---'   `---9---'

在此示例中,从S到T有2个停靠点的最便宜路径是S-B-C-T,成本为6。但是Dijkstra的有限停靠点算法仅会找到成本为11的S-A-B-T

从我的头顶上,我知道这个问题的最佳算法需要O(KE)时间。