并查集之 Find函数
来源:互联网 发布:天空表白墙源码v4.1 编辑:程序博客网 时间:2024/06/05 21:07
发现自己写了两道题都把Find函数写得一塌糊涂。。。一题是没有路径压缩过不了,一题是因为前面写错过弄混了,不三不四的。。。总结很重要啊!!
路径压缩:递归写法:
int Find (int x)
{
if(Father[x] != x)
{
Father[x] = Find(Father[x]);//原来写成Father[x] = Father[Father[x]]了。。 //不断地找到其根节点并更改其值
}
return Father[x];
}
非递归写法:
int Find(int x)
{
if(Father[x] != x)
{
Father[x] = Father[Father[x]];// 将p节点的父节点设置为它的爷爷节点 ,而自己设置为它的父节点 x = Father[x];
}
return x;
}
一般写法:
非递归递归:
int Find (int x)
{
// 寻找p节点所在组的根节点,根节点具有性质Father[root] = root
if(Father[x] != x)
{
x = Father[x] ;//把它的父节点的值找到赋给它,直到Father[root] = root
}
return x;//
}
递归写法:
int Find(int x)
{
if(a[x]!= x)//符合Father[x] = x的,x就是根节点,不是的就找到根节点返回。
{
return Find(a[x]);
}
return x;
}
总结:所谓的路径压缩,就是把根节点下面的所有子孙直接与根节点相连,这样搜索时搜索深度为1,而一般的写法只是把当前结点与它的父节点直接相连,那么搜索深度就>1了,时间就长了。要知道是不是路径压缩(有时我会弄混),只要看是不是把它的父节点设置为它的爷爷结点就行了。只针对个人总结。
- 并查集之 Find函数
- 数据结构之并查集(Union-Find)
- 并查集find函数3种写法
- 并查集的find和join函数实现
- 并查集(Union-Find)
- Union Find 并查集
- 并查集Union--Find
- 并查集Union-Find
- union-find(并查集)
- 并查集- Union-Find
- union find(并查集)
- 常用类之四---并查集(Union-Find Sets)
- 数据结构与算法之并查集(union-find sets)
- 数据结构之并查集Union-Find Sets
- 并查集 (Union-Find Sets)
- 并查集 (Union-Find Sets)
- 并查集(Union-Find)算法介绍
- 并查集 (Union-Find Sets)
- leetcode——Largest Rectangle in Histogram
- 线程的相关知识
- SGU136 Erasing Edges
- 数据库连接池
- IPC总结
- 并查集之 Find函数
- 使用字符串的处理函数
- 剑指offer 12 -打印1到最大的n位数
- 《C++Primer》读书笔记--命名空间
- java 框架基础知识(2)----动态代理-->Spring AOP
- 【牛腩】界面整合(36-61讲)
- ERROR 2002 (HY000)
- (7)LinuxI2C驱动--I2C总线驱动
- redis集群报错:clusterdown the cluster is down