龙华观澜网站建设,有梦商城公司网站,软文营销的方法,有什么网站可以做海报目录
1.概念
2.并查集的优化
1.路径压缩#xff08;Path Compression#xff09;
1#xff09;隔代压缩#xff1a;
2#xff09;完全压缩#xff1a;
2.按秩合并 1.概念
并查集#xff1a;用于判断一对元素是否相连#xff0c;它们的关系是动态添加#xff08…目录
1.概念
2.并查集的优化
1.路径压缩Path Compression
1隔代压缩
2完全压缩
2.按秩合并 1.概念
并查集用于判断一对元素是否相连它们的关系是动态添加一边查询一边合并的这一类叫做动态连通性问题
作用支持元素的合并、查询是否在同一个集合 合并将一个集合的根节点指向另一个集合的根节点当根结点相同就说明在同一个集合中
数据结构数组或哈希表表示节点指向的父节点初始化时指向自己 2.并查集的优化
1.路径压缩Path Compression
核心思想只关心两个顶点的连通性而不关心两个顶点之间的距离 为了避免并查集所表示的树形结构高度过高影响查询性能我们在查询的过程中使用路径压缩将不同变量转换为同一个变量从而降低树的高度
1隔代压缩 将一个节点指向它的父节点的父节点然后对该节点新的父节点执行隔代压缩令其指向它的父节点的父节点依次类推直到指向根节点体现了核心思想只关注连通性不关注如何连通的 压缩前 压缩后
代码实现
//parent[a] b表示结点 a 的直接父亲结点是 b
//隔代压缩
public int find(int x){while(x ! parent[x]){parent[x] parent[parent[x]];x parent[x];}return x;
}2完全压缩 将节点到根节点沿途经过的节点都指向根节点
如下图在查询节点4的根节点的同时将节点4到根节点的沿途所有节点的父亲节点都指向根节点特殊情况下根节点的父节点就是根节点自己从而使得路径压缩后的树的高度均为2 压缩前 压缩后 代码实现需要借助递归算法
//完全压缩
public int find(int x){if(parent[x] ! x){parent[x] find(parent[x]);}return parent[x];
}
一般来说完全压缩的效率并不如隔代压缩且隔代压缩多执行几次也能够达到完全压缩的效果
2.按秩合并
核心思想合并过程中将高度较小的树的根节点指向高度较大的根节点从而避免合并后树的高度增加
秩以当前节点为根节点的树的高度或者是以当前节点为根节点的树的节点的个数
注意当同时使用路径压缩和按秩合并时难以维护秩的准确定义因此一般不维护且合并与查询的时间复杂度接近O(1)