算法竞赛知识提要1
来源:互联网 发布:淘宝达人申请步骤 编辑:程序博客网 时间:2024/06/04 01:27
并查集
并查集是什么
并查集是用来管理元素分组情况的数据结构。不过需要注意的是只能合并而不能拆分。因此,并查集所能做到的是查询元素之间是否同组以及将不同组合并为同一组。
并查集结构
并查集的组成是树形结构,但是并不是二叉树,我们不考虑节点的父亲以及树的形状细节,而关注的重点在于树的整体。
- 初始化
我们准备n个节点来表示n个元素。最开始没有边。 - 合并
从一个组的根向另一组的根连边。当然为了避免树状结构退化成链状,我们合并遵从下面的法则,记录每个组的树高rank,合并时如果两棵树高度不同,rank小的向大的连边。此外,路径压缩也是极为关键,由于并查集并不是二叉树结构,所以一旦在查询中,找到元素的根,那么直接就将该元素与根连边。 - 查询
沿着树向上走,来查询包含这个元素的根是谁,如果两个元素的根一致,则同组。
- 初始化
- 并查集的实现
并查集查询非常高,他的均摊复杂度(多次操作时间取平均)非常快,比logn还快。
int par[max]; // 父亲 int rank[max]; // 树的高度void init(int n){ for(int i=0;i<n;i++){ par[i] = i; rank[i] = 0; }}int find(int x){ if(par[x]==x) return x; else par[x] = find(par[x]); //将x的父亲直接连到根节点上,压缩光路}void unite(int x,int y){ if(x==y) return; if(rank[x]<rank[y]) par[x] = y; else if(rank[x]>rank[y]) par[y] = x; else{ par[y] = x; rank[x]++; //根节点互联 }}bool theSame(int x,int y){ return find(x)==find(y);}
阅读全文
0 0
- 算法竞赛知识提要1
- 算法竞赛知识提要2
- 算法竞赛知识提要3
- 算法竞赛知识提要4
- 第一章知识(算法竞赛入门)
- 算法竞赛入门基础1
- 算法竞赛
- 线程及同步相关知识提要-----------黑马程序员
- 算法竞赛入门经典 例题9-1
- 算法竞赛入门经典 例题8-1
- 算法竞赛入门 5.3.1 6174问题
- 算法竞赛入门经典课后习题1
- 算法竞赛入门经典7.1.1除法
- 算法竞赛入门经典6.2.1
- 算法竞赛入门经典---函数部分1
- 算法竞赛入门经典(刘汝佳)1
- 算法竞赛入门-枚举-7.1.1-除法
- 算法竞赛入门经典 1 实验
- 【Mongo】 环境搭建部署
- 程序员应该阅读的非编程类书籍有哪些?
- mysql使用记录
- git提交代码,账号信息为他人
- Android系统shell中的df命令实现
- 算法竞赛知识提要1
- 深度学习笔记——深度学习框架TensorFlow(二)
- WEB前端学习笔记-CSS基础教程
- Leetcode Remove Duplicates from Sorted Array II
- JS和CSS中背景
- 小结一篇-(秀我工作一年)
- [ASCII] 回车(CR)与换行(LF), '\r'和'\n'的区别
- Python 语句
- servlet接收multipart/form-data表单数据