并查集主要用于解决连接问题,其基本思想是为每一个数据都打上标签,当标签一致时则为一个集合。但是考虑到求并集的时候的效率问题,这里采用树形结构解决该问题,简单来说就是利用两个节点的根节点是否一致作为是否为一个集合的标志。
实现
- 查找:为防止该数据结构退化为链表,在每次查找过程中,选择进行路径压缩,使该节点指向该节点的父节点的父节点。查找的结果则返回该节点所在子树的根节点。
- 合并:合并过程为了保证该数据结构的高效性,通过该所在子树的总层数决定哪个根节点(层数少的)为子节点,哪个根节点仍为根节点。
- 查询是否连接:判断两个节点的查找结果是否一致即可。
性能
理论上时间复杂度近乎为O(1)。