是否存在在线算法来跟踪变化的无向图中的组件?


12

问题

我有一个无向图(带有多边),它会随着时间而变化,可能会插入和删除节点和边。在对图进行每次修改时,我都必须更新该图的连接组件。

物产

其他特性是,不会再有两个组件被重新连接。显然,该图可以具有任意数量的循环(否则该解决方案将是微不足道的)。如果边缘不包含节点n,则它将永远不会采用该节点。但是,如果Ñ Ë,它可以改变ñ Ëennene

方法

到目前为止,我有两种可能的方法,但是如您所见,它们很可怕:

慢无状态

我可以每次从修改后的元素开始搜索(dfs / bfs)图形。这样可以节省空间,但速度很慢,因为每次修改的O(n + m)为。

有状态快速(-er)(?)方法

我可以存储每个节点到所有可能节点的所有可能路径,但是如果我正确看到它,则会占用O(n ^ 4)内存。但是我不确定运行时的改进如何(如果有的话,因为我必须使同一组件中每个节点的信息都保持最新)。

您是否有任何指点,如何了解有关该问题的更多信息,或者可以建立一些算法?

注意

如果运行时/内存有了很大的改进,我可以使用非最佳解决方案,该解决方案有时会说两个组件是一个组件,但是我当然更喜欢一个最佳解决方案。


如果我正确地阅读了“属性”中的最后两个句子,则似乎您仅对递减问题感兴趣。如果是这样,请确保检查一下Thorup在递减动态连接方面的工作。(您可以通过JeffE的指针找到引用,这些指针用于问题的完全动态版本。)
Maverick Woo,2010年

@Maverick Woo:总是会有新的边/节点。出于这个原因,我认为最后一个属性不是很强。它仍然符合减量条件吗?
位掩码

糟糕,我不知道我如何错过第一句话...请参阅下面的“答案”。
Maverick Woo,2010年

Answers:


17

在对数时间中,有几种支持边缘插入,边缘删除和连接性查询的数据结构(这两个顶点在同一连接的组件中吗?)。


这听起来很棒,一旦我浏览了论文,我很可能会接受这一点。
bitmask

6

我认为您正在寻找用于连接组件分解的动态图算法。Holm,de Lichtenberg和Thorup的算法[HLT01]在每次边缘更新时均摊销了对数时间。自上次我看问题以来已经很久了,所以可能会有新的进展。

[HLT01] Jacob Holm,Kristian de Lichtenberg和Mikkel Thorup。用于连接性,最小生成树,2边和双连接性的多对数确定性全动态算法。 ACM学报,48(4):723-760,2001年7月 http://doi.acm.org/10.1145/502090.502095


金克斯 你欠我可乐。
杰夫斯(Jeffε)2010年

@JeffE:我不知道那个游戏。但是按照规则,我并没有输掉比赛(我只是处于“混血”状态),所以除非我再说更多,否则我不欠你可乐。哦,等等。
伊藤刚(Tsuyoshi Ito)2010年

如果您只能使用声誉点进行交易:)
Suresh Venkat,2010年

5

(现在,让我只处理连接性查询,不幸的是,这可能不足以适合您的应用程序。)

关于动态连通性问题的许多先前工作是在边更新模型中进行的:您假设顶点的数目是固定的,并且可以在进行查询时插入和/或删除边。如果只能插入(删除),则表示增量(减少)。如果两者都能做到,那是完全动态的。JeffE(以及我自己在评论中)指出的Thorup的工作全部用于边缘更新。

AFAIK,CS理论社区只是开始着眼于一般图形的顶点更新。Chan,Pătraşcu和Roditty在FOCS 2008中对此进行了开创性的工作。有关最新修订(2010年9月)和其中的参考,请参见此链接


你为什么认为霍尔姆等人。等 方法对我的问题不起作用?我打算采用它。
位掩码

1
如果您的图具有界度,那么理论上您可以使用大量边缘更新来模拟顶点更新。否则,单个顶点更新(例如,删除星形图的中心)可能会大大改变图形的连接性,在这种情况下,您需要Chan等人的结果。
Maverick Woo,2010年

我知道了。我应该在原始问题中说过,去除顶点很少,因此我有能力逐条进行。
位掩码
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.