假设(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
是节点的索引)