关于地下爆炸的最新消息让我对以下问题感到好奇。假设我们有一个加权无向图,其节点有时会被删除。问题是在这种删除之后快速重新计算所有节点对之间的最短路径。
通过对Floyd-Warshall algorithm的简单修改,我们可以计算出所有对之间的最短路径。这些路径可以存储在一个表中,其中shortest[i][j]
包含i
和j
之间最短路径上的下一个节点的索引(如果没有路径,则为NULL
值)。该算法需要O(n³)时间来构建表,而每个查询shortest(i,j)
需要O(1)。不幸的是,我们应该在每次删除后重新运行此算法。
另一种方法是对每个查询运行图搜索。这样每次删除都需要零时间来更新辅助结构(因为没有),但每个查询都需要O(E)时间。
当删除图表的节点时,可以使用什么算法来“平衡”查询并更新所有对最短路径问题的时间?
答案 0 :(得分:1)
如goran所述,您只需重新计算包含同时删除的节点的最短路径。所以,我会做以下事情:
答案 1 :(得分:0)
好吧,如果删除一个节点,我认为你不需要重新运行整个构建。仅适用于那些包含节点的路径。
解决您的问题的简单方法是添加有关冗余路径的信息,例如,您可以为最短路径上的每个节点设置第二条最短路径。 这不会减少计算时间,但会缓存它(它还会将存储要求提高n倍,其中n是节点的平均数量,对于单个节点的移除,对于2节点的因子为n *(n-1)冗余...以及n!因子用于完全冗余,并且还通过相同因子增加初始构建时间,并且还增加了添加节点所需的时间)
如果有办法改善这一点并缩短重建时间,那么你需要找到一个允许快速计算最短距离的结构,但是当删除或添加节点时,该结构应该是不可变的(或重新计算的便宜)到图表。
答案 2 :(得分:0)
我将回答问题的隐含非泛型变体,其中图表是道路网络。在我看来,任意图形的理论界限不那么有趣的情况之一。
最短路径查找的一些最佳方法是公路节点路由和传输节点路由。 (在dissertation by Dominik Schultes中描述)。加速结构可以合理快速地构建(对于整个欧洲的HNR约15分钟)并且它支持增量更新。有趣的是,随机查询的查询时间约为1毫秒,所有对距离表的计算结果可低至每条目0.2us。更有趣的是查询性能缩放,数据表明缩放在图形大小中是亚对数/接近常数。在4.3us随机查询中,传输节点路由甚至更快。唉,我没有关于数据结构可更新性的任何信息。直观地说,增量更新不应该太难。
可以在类似于道路网络(稀疏,平面,分层)的其他图表上使用相同或类似的方法。