首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Union-Find 算法怎么应用?

预计阅读时间:10 分钟 上篇文章 Union-Find 并查集算法详解 很多读者对于 Union-Find 算法的应用表示很感兴趣,这篇文章就拿几道 LeetCode 题目来讲讲这个算法的巧妙用法。...一、DFS 的替代方案 很多使用 DFS 深度优先算法解决的问题,也可以用 Union-Find 算法解决。...这个问题也可以用 Union-Find 算法解决,虽然实现复杂一些,甚至效率也略低,但这是使用 Union-Find 算法的通用思想,值得一学。...这就是 Union-Find 的核心思路,明白这个图,就很容易看懂代码了: 首先要解决的是,根据我们的实现,Union-Find 底层用的是一维数组,构造函数需要传入这个数组的大小,而题目给的是一个二维棋盘...很多更复杂的 DFS 算法问题,都可以利用 Union-Find 算法更漂亮的解决。LeetCode 上 Union-Find 相关的问题也就二十多道,有兴趣的读者可以去做一做。

46310

Union-Find 并查集算法详解

预计阅读时间: 10 分钟 今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。...说起这个 Union-Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!...比如下面这幅图,总共有 10 个节点,他们互不相连,分别用 0~9 标记: 现在我们的 Union-Find 算法主要需要实现这两个 API: class UF { /* 将 p 和 q 连接...这样,你应该大概明白什么是动态连通性了,Union-Find 算法的关键就在于union和connected函数的效率。那么用什么模型来表示这幅图的连通状态呢?用什么数据结构来实现代码呢?...int p, int q) { int rootP = find(p); int rootQ = find(q); return rootP == rootQ; } 至此,Union-Find

88230

Union-Find 并查集算法详解

来源:labuladong 作者:labuladong 今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。...说起这个 Union-Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!...现在我们的 Union-Find 算法主要需要实现这两个 API: class UF { /* 将 p 和 q 连接 */ public void union(int p, int q...这样,你应该大概明白什么是动态连通性了,Union-Find 算法的关键就在于union和connected函数的效率。那么用什么模型来表示这幅图的连通状态呢?用什么数据结构来实现代码呢?...至此,Union-Find 算法就基本完成了。是不是很神奇?竟然可以这样使用数组来模拟出一个森林,如此巧妙的解决这个比较复杂的问题! 那么这个算法的复杂度是多少呢?

1.1K20

【小码匠自习室】一道题3种解法:广搜+深搜+并查集,本宝宝困了,明天继续研究

题目 C - Connect Cities https://atcoder.jp/contests/abl/tasks/abl_c 标签 AtCoder、BFS、Union-Find、DFS 問題描述...Union-Find 说到组,Union-FindUnion-Find 允许对连接的组件进行有效分组。...具体来说,对于每条边 (u,v), 代码 uf.merge(u, v); 最后,在计算组数时,请执行以下操作: Union-Find 中的每个组都是一棵有根树 因此,在Union-Find的元素中找到...“根”的数量就足够了 Union-Find中的元素v是否为根可以通过uf.root(v) == v是否为真来判断 基于以上,可以如下实现。...并查集(Union-FindUnion-Find是将每一组视为一棵树的数据结构,通过两个顶点所属的树的根是否相同来判断两个顶点是否在同一个组中。

51820

Union Find 并查集算法原理及应用

但这个问题也可以用 Union-Find 算法解决,虽然实现复杂一些,甚至效率也略低,但这是使用 Union-Find 算法的通用思想,值得一学。...这就是 Union-Find 的核心思路,明白这个图,就很容易看懂代码了。...首先要解决的是,根据我们的实现,Union-Find 底层用的是一维数组,构造函数需要传入这个数组的大小,而题目给的是一个二维棋盘。...力扣第 990 题「等式方程的可满足性」用 Union-Find 算法就显得十分优美了,题目是这样: 给你一个数组equations,装着若干字符串表示的算式。...最后,Union-Find 算法也会在一些其他经典图论算法中用到,比如判断「图」和「树」,以及最小生成树的计算,详情见 Kruskal 最小生成树算法。

60030

图解:什么是并查集?

由于支持查询和合并这两种操作,并查集在英文中也被称为联合-查找数据结构(Union-find data structure)或者合并-查找集合(Merge-find set)。...隐藏与 Union-find 不相关的细节;可以使用整数快速获取与对象相关的信息(数组的下标);可以使用符号表对对象进行转化。 简化有助于我们理解连通性的本质。...上面的问题看似很复杂,但也很容易抽象为 Union-Find 模型: 对象。 对象的不相交集(Disjoint Set)。 Find 查询:两个对象是否在同一集合中?...Find 操作: Union 操作: Union-Find Union-Find 算法是在 Weighted Quick-Union 的基础之上进一步优化,即路径压缩的 Weighted Quick-Union...而 Union-Find 算法是通过路径压缩进一步将 Weighted Quick-Union 算法的树高降低。

2.2K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券