对于这样的问题(https://leetcode.com/problems/cheapest-flights-within-k-stops/),我可以使用Dijkstra算法(上限为O(| E | + | V | log | V |))解决此问题。
但是,由于还有一个额外的停止标准,即最多K个停止。如果K 问:我如何将K停靠点纳入Dijkstra算法的分析中? Q2:如果我们假设图是完全连接的(每个顶点每隔一个顶点连接一次,那么E = V ^ 2)怎么办?这会改变分析吗?
答案 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)时间。