Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!

简介: 在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。

在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。

场景一:社交网络的朋友圈划分
想象一下,你正在开发一个社交网络平台,需要快速判断任意两个用户是否处于同一朋友圈中。这里,“朋友圈”的定义是基于用户之间的朋友关系形成的集合。并查集正是解决这类问题的绝佳选择。

python
class UnionFind:
def init(self, size):
self.parent = [i for i in range(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):  
    rootX = self.find(x)  
    rootY = self.find(y)  
    if rootX != rootY:  
        self.parent[rootX] = rootY  # 将一个集合的根节点指向另一个  

示例

uf = UnionFind(1000) # 假设有1000个用户
uf.union(1, 2) # 用户1和用户2成为朋友
uf.union(2, 3) # 用户2和用户3也成为朋友,现在1, 2, 3在同一朋友圈
print(uf.find(1) == uf.find(3)) # 输出True,表示用户1和用户3在同一朋友圈
场景二:岛屿数量的计算
在图像处理或游戏开发中,经常需要计算由相连像素(或格子)组成的岛屿数量。这同样可以利用并查集来解决,将每个独立的岛屿视为一个集合,通过合并相邻的像素来减少岛屿的数量。

python
class UnionFind:

# ...(与上述相同的UnionFind实现)  

def numIslands(grid):
if not grid or not grid[0]:
return 0

rows, cols = len(grid), len(grid[0])  
uf = UnionFind(rows * cols)  

# 定义四个方向的偏移量  
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  

for i in range(rows):  
    for j in range(cols):  
        if grid[i][j] == '1':  
            # 将当前位置与相邻的陆地合并  
            for dx, dy in directions:  
                ni, nj = i + dx, j + dy  
                if 0 <= ni < rows and 0 <= nj < cols and grid[ni][nj] == '1':  
                    uf.union(i * cols + j, ni * cols + nj)  

# 统计根节点的数量,即岛屿的数量  
count = 0  
for i in range(rows * cols):  
    if uf.find(i) == i:  
        count += 1  

return count  

示例使用

grid = [
["1","1","0","0","0"],
["1","1","0","0","0"],
["0","0","1","0","0"],
["0","0","0","1","1"]
]
print(numIslands(grid)) # 输出岛屿数量
结语
通过上述两个案例,我们可以看到并查集在解决实际问题时的强大能力。无论是社交网络中的朋友圈划分,还是图像处理中的岛屿数量计算,并查集都能以简洁高效的方式给出答案。掌握并查集,不仅能让你的编程技能更上一层楼,更能让你在算法界游刃有余,秒杀一切复杂场景。现在,就让我们一起,用并查集开启算法的新篇章吧!

目录
相关文章
|
12天前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
144 0
|
9天前
|
运维 算法 搜索推荐
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
|
12天前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
|
12天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
|
12天前
|
机器学习/深度学习 数据采集 算法
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)
|
12天前
|
机器学习/深度学习 算法 安全
小场景大市场:猫狗识别算法在宠物智能设备中的应用
将猫狗识别算法应用于宠物智能设备,是AIoT领域的重要垂直场景。本文从核心技术、应用场景、挑战与趋势四个方面,全面解析这一融合算法、硬件与用户体验的系统工程。
|
12天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
|
12天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
|
Python
针对不同场景的Python合并多个Excel方法
在辰哥看来,技术能够减少繁琐工作带来的枯燥,技术+实际=方便。最近辰哥也是在弄excel文件的时候发现手动去整理有点繁琐枯燥,想着技术可以代替我去处理这部分繁琐的工作那何乐而不为呢~~~
294 0
针对不同场景的Python合并多个Excel方法
|
12天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
184 102

热门文章

最新文章

推荐镜像

更多