数据结构:并查集 Union-Find算法(不相交集)原理及C++实现

前言:

        这一次为大家介绍的另外一种比较基础的算法——并查集Union-Find算法。这是一种用于不相交集( Disjoint Sets)的查询以及合并问题的算法。主要用树的形式来进行链接,这里我们将使用的是数组来表现。
PS:不相交集是并查集的另一个说法~~
还是老样子,先是 GitHub传送门~~

原理:

        首先我们要认识到并查集算法是用来处理不相交集问题的一个工具,它为等价关系的确定提供了很大的便利。 并查集中的Union可以将集合进行链接,使它们成为等价类;而Find可以查找集合的类别,从而直观的了解其等价关系。而我们对等价关系有严格的定义,先看看什么是等价关系吧。


等价关系:
        等价关系 R 要求处于同一个等价类S中的任意元素a,b满足三点要求:
1.自反性,对于所有的a属于S,有aRa;
2.对称性,若aRb则有bRa;
3.传递性,若aRb,bRc,则有aRc;

        这样似乎很模糊,对于没有学过离散数学的朋友来说等价的概念仍然不清楚,那我就举两个例子,第一个就是 “=”关系;这是一个最经典的等价关系它满足:自反性—— 1 = 1成立;对称性——若 a = b,则b = a;传递性——若a = b,b = c,那么a = c;不知道这样理解了吗?
        如果还没有的话那就在举一个例子吧,有三个人分别是小A,小B和小C,现在有一个关系为“某人和某人是一个学院的”;现在我们就来判断这个关系是不是一个等价关系;首先我们来 判断自反性——小A和小A是一个学院的吗?答案显而易见,那么 自反性满足!接下来是 对称性判断——如果我们知道了小A和小B是一个学院的,那么小B和小A是一个学院的吗?肯定是的啊;最后就是 传递性判断了——若小A和小B一个学院,小B和小C一个学院那么我们也可以知道小A和小C一个学院!那么
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值