美文网首页
leetcode--并查集模板总结(python3)

leetcode--并查集模板总结(python3)

作者: FF_b0bf | 来源:发表于2020-10-23 11:38 被阅读0次

问题介绍:
并查集一般用来解决连通性方面的问题,最典型的比如图的连通性,与邻接表配合最佳
连通这个概念抽象出来的特点是:

1、自反性: a=a
2、对称性: a=b, b=a
3、传递性: a=b, b=c, a=c

可以看出来等于号则拥有连通性这样的性质,所以这题读完等式方程的可满足性,我立马就回忆起了并查集(虽然很久没用过了),借此机会总结一下。

模板:

class UF():
    def __init__(self, n):
        self.count = n
        self._parent = [0] * n
        self._weight = [0] * n

        for i in range(n):
            self._parent[i] = i
            self._weight[i] = 1

    def connect(self, p, q):
        rootP = self.find(p)
        rootQ = self.find(q)
        if rootP == rootQ:
            return
        # 轻根到重根,为了平衡
        if self._weight[rootP] > self._weight[rootQ]:
            self._parent[rootQ] = rootP
            self._weight[rootP] += self._weight[rootQ]
        else:
            self._parent[rootP] = rootQ
            self._weight[rootQ] += self._weight[rootP]
        self.count -= 1

    def is_connected(self, p, q):
        return self.find(p) == self.find(q)

    def find(self, x):
        while self._parent[x] != x:
            # 路径压缩
            self._parent[x] = self._parent[self._parent[x]]
            x = self._parent[x]
        return x

    def get_count(self):
        return self.count

思考:
1、self._weight 的作用是什么?
--find方法的复杂度为O(logn)但是,如果树的合并不合理会退化成O(n),所以往大树上挂小树能够使树相对平衡。
2、self._parent[x] = self._parent[self._parent[x]] 的意义?
这样在find的过程中就能够优化查找路径,由于自反性也不用考虑越界相关的问题。

文献参考:
感谢东哥的总结
https://labuladong.gitbook.io/algo/gao-pin-mian-shi-xi-lie/unionfind-suan-fa-xiang-jie

相关文章

  • leetcode--并查集模板总结(python3)

    问题介绍:并查集一般用来解决连通性方面的问题,最典型的比如图的连通性,与邻接表配合最佳连通这个概念抽象出来的特点是...

  • 并查集

    并查集在LeetCode周赛里面经常会用到,所以可以准备好模板以节省比赛做题时间。以下并查集类Python3实现修...

  • 模板

    并查集模板

  • LeetCode 分类刷题 —— Union Find

    Union Find 的 Tips: 灵活使用并查集的思想,熟练掌握并查集的模板,模板中有两种并查集的实现方式,一...

  • 并查集模板

    以PAT甲级1114为例,写了个并查集模板,记录下来。题目就不列了,感兴趣去官网找一下

  • 并查集模板

  • 并查集模板

  • 并查集模板

    并查集学习可查看网站[https://oi-wiki.org/ds/dsu/]

  • luogu P1551 亲戚(并查集入门)

    这是一个并查集模板。 说一下并查集,虽然我也是刚刚学会没几天。。。 并查集是个树形结构的数据结构,主要用于合并两个...

  • 并查集专题整理

    kuangbin专题 模板 关于并查集的一点心得 大家都说带权并查集的起点是食物链( POJ - 1182 ),但...

网友评论

      本文标题:leetcode--并查集模板总结(python3)

      本文链接:https://www.haomeiwen.com/subject/wtqvmktx.html