微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

联合查找集算法返回parent [v] = find_setparent [v];手段

如何解决联合查找集算法返回parent [v] = find_setparent [v];手段

int find_set(int v) {
if (v == parent[v])
    return v;
return parent[v] = find_set(parent[v]); }

这是不相交集算法的代码片段 我可以问一下return parent [v] = find_set(parent [v]);的含义和目的是什么? 通常返回的是整数,布尔值或其他数据类型。

解决方法

这行代码(parent[v] = find_set(parent[v]);)是一种启发式优化,称为路径压缩,这是一种简单而高效的启发式方法。路径压缩使find_set路径上的每个节点都直接指向根。之前在路径中任何节点上对find_set的进一步调用将非常快。这种启发式方法的时间复杂度如下所示。

如《算法简介》(Cormen,第571-572页)第三版中所述:

单独按等级合并会产生运行时间 的 O(m log n)的范围,这个界限很严格。 尽管我们不会在这里证明它,但是对于n个MAKE-SET操作的序列 (因此最多是 n-1 个UNION操作)和f个FIND-SET操作, 仅路径压缩启发式给出的最坏情况运行时间为 O(n + f *(1 + log 2 + f / n n))

>

当我们同时使用等级压缩和路径压缩并集时,最坏情况下的运行 时间是 O(mα(n)),其中α(n)是一个非常缓慢的增长函数,我们定义 在第21.4节中。在任何不相交集数据结构的可能应用中, α(n)≤4 ;因此,在所有实际情况下,我们都可以在 m 中将运行时间视为线性。严格来说,它是超线性的。

您可以通过阅读该书来了解更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。