借鉴百度百科的解释,并查集就是在一些有N个元素的集合问题中,开始的时候让每个元素成为自己的集合,然后按照一定的顺序将属于同一组的元素所在的集合进行合并(合并的是集合),在合并的期间需要方法查找元素所在的集合。并查集的原理比较简单,解决的问题的特点是看似并不复杂,但数据量极大。例如:图的连通子图问题,一个图里面有几个连通子图,判断这幅图是否连通等。若用正常的数据结构来描述,往往时空复杂度会过高。并查集是一种树形数据结构,用于处理一些不相交集合的合并和查询问题。并查集的原理就是朋友的朋友就是我的朋友。
基本
正如名字表达的那样,并查集需要合并和查询集合,所以并查集一般需要一个数组和两个函数:int[] parent, int find(int element)和void unionElements(int firstOne, int secondOne)。
parent数组用来记录每个元素的前导点,也就是确定该元素所在的集合id;find函数用来查找某元素所在的集合id;unionElements用来合并不同的集合。其基本过程如下图所示。