The DISJOINT SET ADT | UNION-FIND
  1. 定义:
    1. A relation R is defined on a set S if for every pair of elements (a, b), a, b 属于S, a R b is either true or false. If a R b is true, then we say that a is related to b.
  1. UNION:需要合并
    1. 顺序相关,A合并到B,还是B合并到A是不相同的
    2. 两种实现的方式:链表和数组
    3. 查询和寻找一般是同对出现的,先执行find然后再执行union
    4. union的操作是常数关系
  1. Smart UNION 算法进行判断:
    1. union-by-size:
    2. find的操作变成的时间复杂度了
    3. 时间复杂度:
      1. notion image
    4. union-by-height:理论上时间复杂度是最低的
      1. 矮的树并到高的树上面
  1. 路经压缩:
    1. union by rank:
    2. 最快的算法
    3. 算法的结论:
      1. notion image
五种实现方式,union by rank一定是带有路径压缩的
分别涉及random,union_by_size 和 union_by_height 几种并查集的模式

路径压缩

现在我们所提到的union/find算法对大多数情况是完全适用的,如果运行find比union多很多,那么其运行时间就比快速查找算法的运行时间要糟。因此,我们可以是算法加速的唯一方法就是对find进行更加聪明的操作 路径压缩
路径压缩是在一次find操作中进行执行的,而与用来执行union的方法没有任何关系
路径压缩是让每一个节点在一条路径中的所有节点x,让他们的父节点都变成root根节点
return S[x] = Find_path_compression(S[x], S) 这一步是整个运算表达式的关键
同时改变S[x]的值

union_by_rank和path_compression的最坏情况

总运行时间为
union/find 的算法分析
M次union和find的总运行时间变为O(M log* N)
 
Loading...
fufu酱
fufu酱
一个爱折腾的大学生
公告
👋
欢迎 欢迎来到fufu酱的blog! 💞️我是22级浙江大学竺可桢学院计算机科学与技术专业的学生 一个爱折腾的大学生 🌱我会在这个网站上更新我的笔记和工具分享 🌈目前all in MLLM 📫你可以用下面的方式联系到我
🍀
今後ともよろしくお願いします