我有一个图表,经常需要知道所有最短路径(或者它们的长度)。因为我不想重新计算它们,所以我将它们存储在一个简单的数组中,并从那里检索它们。然而,由于图表可能随着时间的推移而发生变化,因此我将不得不在特定时间重新计算它们。
目前可能发生以下更改:
- 向图表添加节点和边 - 更改边的长度 - 向图表添加新边 - 删除边或删除节点
在所有情况下,所有节点始终连接,并且所有边都具有正权重。此外,该图表是无向的。操作序列如此,以至于所有节点始终来自图表的同一组件。如果在此之前删除了一个节点或边,则会添加其他节点和边,以使图表永远不会分离。
目前,我打算仅对更新进行处理,然后通过图形结构传播所有更改。但是,我还不确定如何正确处理这个问题。您将如何尝试实现这些缓存长度的更新?
编辑:正如一些人指出的那样,当添加节点或更改链接时,可能需要重新计算所有内容。例如,如果所有距离都通过更新更改,则可能需要重新计算。但是,如果我只是通过图形传播更改并执行类似于Dijkstra的松弛,那么我可能必须多次松弛相同的节点,因为我可能不选择最佳顺序。问题在于如何排序松弛步骤,以尽可能避免多次更新。
不确定没有实际想法是否有多大意义,但我希望这可以更清楚一些。
目前可能发生以下更改:
- 向图表添加节点和边 - 更改边的长度 - 向图表添加新边 - 删除边或删除节点
在所有情况下,所有节点始终连接,并且所有边都具有正权重。此外,该图表是无向的。操作序列如此,以至于所有节点始终来自图表的同一组件。如果在此之前删除了一个节点或边,则会添加其他节点和边,以使图表永远不会分离。
目前,我打算仅对更新进行处理,然后通过图形结构传播所有更改。但是,我还不确定如何正确处理这个问题。您将如何尝试实现这些缓存长度的更新?
编辑:正如一些人指出的那样,当添加节点或更改链接时,可能需要重新计算所有内容。例如,如果所有距离都通过更新更改,则可能需要重新计算。但是,如果我只是通过图形传播更改并执行类似于Dijkstra的松弛,那么我可能必须多次松弛相同的节点,因为我可能不选择最佳顺序。问题在于如何排序松弛步骤,以尽可能避免多次更新。
不确定没有实际想法是否有多大意义,但我希望这可以更清楚一些。