【发布时间】:2021-03-20 15:03:22
【问题描述】:
这两个函数是如何工作的?
函数find的时间复杂度是O(log n) 假设长度 每条链的长度为 O(log n)。在这种情况下,相同和统一的功能也适用于 O(log n) 时间。函数 unite 确保每条链的长度是 O(log n) 通过将较小的集合连接到较大的集合。
有人可以举个例子解释一下吗?
int find(intx) {
while(x != k[x]) x = k[x];
returnx;
}
bool same(inta,intb) {
returnfind(a) == find(b);
}
void unite(inta,intb) {
a = find(a);
b = find(b);
if(s[a] < s[b]) swap(a,b);
s[a] += s[b];
k[b] = a;
}
【问题讨论】:
标签: data-structures tree minimum-spanning-tree kruskals-algorithm union-find