将不同喜欢的水果的人划分为子集
两个元素要么属于同一个集合,要么不属于同一个集合
实现并和查功能的集合
双亲表示法:节点存在双亲节点的位置
能够很方便地找到根节点地位置
从而能够很方便实现并和查
并:先查找到两个集合的根,然后把根的父节点的索引值赋值给另一个根的的父节点的内容
查:通过节点的父节点往上遍历即可
主要是union操作时间复杂度和对应集合的树的高度有关
树的高度越低时间复杂度也低些
让高度小的树合并到高度大的树的根节点的孩子节点(小树并到大树)
使得总的树的高度相比于原来高度大的树不会增加
根节点的内容为当前树的节点个数的负数
通过节点的内容正负判断是否为根节点
然后通过根节点的内容更小即判断为高度更高的树
说白了这种方法就是让合并的树每一层都是满的
所以n个节点的高度可以通过之前的满二叉树的方法计算出来
由于高度降低所以最终可以降低Find操作的时间复杂度
Find操作两次循环
第一次循环:找到根节点
第二次循环:再次遍历查找根节点,将遍历到的节点的内容都更新为第一次循环找到的根节点
通过这样,第二次Find时可以直接找到对应的根节点
合并n个独立元素时,Union会首先得查找独立元素对应的根节点(时间复杂度和树的高度有关),然后再进行n-1次合并。所以就是总的时间复杂读就是合并的次数*查找的的时间复杂度