如何在短时间内计算网格图的树数?

时间:2019-01-29 11:09:18

标签: algorithm

假设(L + 1)^ 2个节点位于L x L网格中。节点与最近的邻居随机链接(因此节点的度数为0、1、2、3或4)。当然,该图通常不会连接,并且说您知道初始状态下已连接组件的数量。

this issue here(图1:初始状态示例)

现在您选择两个相邻的节点,并且

  • 如果它们已链接,则切掉边缘。
  • 如果未链接它们,则将它们链接到新的边缘。

enter image description here(图2:操作示例)

您多次重复此剪切或链接操作。

然后,每次执行该操作时,如何在短时间内知道连接的组件数(例如O(log L ^ 2)或O(L))?如果您维护一个(L + 1)^ 2长度的数组,该数组的元素表示其所属树的索引,则很容易计算O(L ^ 2)中的数字。另外,您可以使用UnionFind算法,但是由于它无法解除链接节点,因此经常必须以O(L ^ 2 * log L ^ 2)重构森林。

有人有想法吗?似乎“链接/剪切树”算法是合适的,但可能无法在此问题中使用(例如,“链接/剪切树”的cut(v)函数仅接收一个参数,其中v是节点的索引)

0 个答案:

没有答案