【问题标题】:Shortest Path Algorithm With Updates具有更新的最短路径算法
【发布时间】:2014-12-30 20:08:56
【问题描述】:

有N个城市,有M条双向道路与之相连,我必须找到两个固定城市A和B之间的最短路径。

但问题是有 Q 查询给定两个城市之间的路径被阻塞,我必须在每个 Q 查询中找到最短路径。

我的蛮力算法的时间复杂度是 O(QNlogN),这给了我超出时间限制的错误,请帮助我如何改进我的解决方案

伪代码:

for u in Q:
  cin>>a>>b;
graph[a][b] = graph[b][a] = INFINITY VALUE
dijkstra algorithm();
cout<<Distance[D]<<endl; 

Problem LINK

MY CODE Which Is giving me Time Limit Exceeded Error

请帮助我如何改进我的算法?

【问题讨论】:

  • 这个网站上有很多关于最短路径或 Djikstra 算法的帖子,你应该查找它们,或者去谷歌。
  • @DavidColer 他的时间复杂度表明他正在使用 Dijkstra 算法
  • @DavidColer 请仔细阅读问题,这不是关于缩短路径,而是关于如果一条路径被阻塞时如何 Djikstra 算法效果
  • @PhamTrung 是的,但我的问题有点不同,请仔细阅读

标签: java algorithm shortest-path


【解决方案1】:

论文Vickrey Prices and Shortest Paths: What is an edge worth? by John Hershberger and Subhash Suri 展示了如何在 O(NlogN+M) 时间内解决这个问题,其中 N 是顶点数,M 是边数。

这允许您根据阻塞的道路预先计算 M 个答案,因此您可以在 O(1) 中回答每个查询,总复杂度为 O(NlogN+M+Q)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多