并查集(Union-Find)

简介: 并查集(Union-Find)是一种用于解决动态连通性问题的数据结构,它主要用于处理不相交的集合(Disjoint Sets)之间的合并和查询操作。并查集的主要优点是,它不需要比较相邻的元素,而是通过分配和收集元素来进行操作,从而在处理大量数据时非常高效。

并查集(Union-Find)是一种用于解决动态连通性问题的数据结构,它主要用于处理不相交的集合(Disjoint Sets)之间的合并和查询操作。并查集的主要优点是,它不需要比较相邻的元素,而是通过分配和收集元素来进行操作,从而在处理大量数据时非常高效。
并查集的基本思想是将每个元素分配到一个集合中,并通过维护一个代表每个集合的根节点来表示集合之间的连通关系。当需要合并两个不相交的集合时,只需将它们的根节点进行合并;当需要查询某个元素所在的集合时,只需查询其根节点。
下面是一个使用 Python 实现的并查集示例代码:

class UnionFind:
def init(self):
self.parent = []
self.size = []
def find(self, x):
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
root = self.find(x)
root2 = self.find(y)
if root != root2:
self.parent[root] = root2
self.size[root2] += self.size[root]
return True
CopyCopy

使用示例:

uf = UnionFind(10)
print(uf.find(0))
uf.union(0, 1)
print(uf.find(0))
uf.union(1, 2)
print(uf.find(0))
CopyCopy

输出结果:

0
0
1
1
1
CopyCopy

何时使用并查集:

  1. 动态连通性:在游戏开发、机器人导航等场景中,需要处理物体之间的动态连通性
目录
相关文章
|
21天前
|
存储 机器学习/深度学习 算法
并查集(Union Find)
并查集(Union Find)
45 3
|
21天前
|
机器学习/深度学习 NoSQL 容器
并查集(Disjoint Set)
并查集(Disjoint Set)
|
21天前
|
存储
并查集Union-find Sets
并查集Union-find Sets
10 0
|
21天前
|
存储 算法 C++
带用查找算法-countc++讲解
带用查找算法-countc++讲解
23 2
|
算法 Python
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree
LeetCode 109. Convert Sorted List to BST
给定一个链表,其中元素按升序排序,将其转换为高度平衡的BST。 对于这个问题,高度平衡的二叉树被定义为:二叉树中每个节点的两个子树的深度从不相差超过1。
45 0
LeetCode 109. Convert Sorted List to BST
|
算法 容器
常用查找算法 find() find_if() adjacent_find() binary_search() count() count_if()
常用查找算法 find() find_if() adjacent_find() binary_search() count() count_if()
HDU-1598,find the most comfortable road(并查集+枚举)
HDU-1598,find the most comfortable road(并查集+枚举)
|
算法 JavaScript Java
并查集算法 - Algorithms, Part I, week 1 UNION-FIND
cousera 普林斯顿大学 算法公开课 第一周 并查集数据类型内容整理
1448 0