问题
我有一个无向图(带有多边),它会随着时间而变化,可能会插入和删除节点和边。在对图进行每次修改时,我都必须更新该图的连接组件。
物产
其他特性是,不会再有两个组件被重新连接。显然,该图可以具有任意数量的循环(否则该解决方案将是微不足道的)。如果边缘不包含节点n,则它将永远不会采用该节点。但是,如果Ñ ∈ Ë,它可以改变ñ ∉ Ë。
方法
到目前为止,我有两种可能的方法,但是如您所见,它们很可怕:
慢无状态
我可以每次从修改后的元素开始搜索(dfs / bfs)图形。这样可以节省空间,但速度很慢,因为每次修改的O(n + m)为。
有状态快速(-er)(?)方法
我可以存储每个节点到所有可能节点的所有可能路径,但是如果我正确看到它,则会占用O(n ^ 4)内存。但是我不确定运行时的改进如何(如果有的话,因为我必须使同一组件中每个节点的信息都保持最新)。
题
您是否有任何指点,如何了解有关该问题的更多信息,或者可以建立一些算法?
注意
如果运行时/内存有了很大的改进,我可以使用非最佳解决方案,该解决方案有时会说两个组件是一个组件,但是我当然更喜欢一个最佳解决方案。