如何解决Kruskals 算法中的联合查找算法
这两个函数是如何工作的?
函数 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 举报,一经查实,本站将立刻删除。