保持增长的无向图的平衡生成树


19

我正在寻找方法来维护图的相对平衡的生成树,因为我向图添加了新的节点/边。

我有一个无向图,该图以单个节点“根”开始。

在每个步骤中,我都会在图上添加一个新节点和将其连接到图的边,或者仅添加一个新的边来连接两个旧节点。随着图形的增长,我会维护一棵生成树。大多数情况下,这意味着当我添加新节点和边时,会将新节点设置为它所连接的旧节点的子节点。

我无法控制新节点的添加顺序,因此上述树构建算法显然会导致生成树不平衡。

有谁知道在线启发式技术可以使生成树“相对平衡”,同时最大程度地减少重新树的工作量?我对树结构有完全控制。我无法控制的是图形连接性,或者添加新节点的顺序。

请注意,标准的Google对诸如“平衡”,“生成”和“树”之类的术语的响应似乎是二叉树和B树,两者均不适用。我的图节点可以具有任意数量的邻居,因此树节点可以具有任意数量的子代,而不是像二叉树那样的2个子代。B树通过更改其邻接表来保持平衡,而我无法更改图的连接性。


3
如果您更详细地了解静态图的理想平衡生成树,则可能会有所帮助。BFS树是否会自动地作为平衡树的好选择(如果选择正确的根,则它应尽可能浅,或者与根无关,在两倍的范围内)?您是否需要每个子树中的节点数要比树中各处的父节点中的节点数小一个常数,如果是,对于没有此类树的图该怎么做?
David Eppstein 2010年

如果我离线运行BFS树,那么它确实是一个理想的平衡生成树,整个图一次给出。不需要使每个子树中的节点数比父树中的节点数小一个常数。
SuperElectric 2010年

你检查过头顶的树木吗?en.wikipedia.org/wiki/Top_tree
Peer Sommerlund 2011年

Answers:


4

每次添加带有边的新顶点时,都没有选项。每次添加新边时,如果当前到根的距离大于通过新边的距离,则删除旧的最短路径中的旧边并添加新的边。否则,您只需保持树不变。我认为通过这种方式,您得到的东西与BFS树非常相似,因为树的级别将包含相同的顶点,并且顶点到根的距离将与BFS树中的距离相同(并且在该图),但我不知道这是否足以满足您的“理想平衡生成树”条件。


2

我最终做了以下工作:

Vinicius Santos的答案是第一部分。如他所说,在任何帧上,我要么添加一个新节点并连接一个父子边缘,要么在两个现有节点之间添加一个交叉边缘。父子边缘没有提供更改树结构的机会,只有交叉边缘可以提供。考虑在节点A和B之间添加交叉边缘E,其中B具有更大的树深。如果(A.depth + 1)<B.depth,那么我们可以通过将B.depth设为A的子元素来减少它。

减小了B的深度之后,我们现在必须检查B的邻居,看看它们是否可以成为B的子元素来减小其深度。因此,我们从B执行广度优先遍历,如果X则从X到Y遍历一条边。 depth + 1 <Y.depth,并将Y设为X的子级。

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.