问题描述
这两个函数是如何工作的?
函数 find 的时间复杂度是 O(log n) 假设长度 每条链的长度是 O(log n)。在这种情况下,函数 same 和 unite 也适用于 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;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)