并查集及优化(按个数合并+路径压缩)

本文介绍了并查集的优化方法,包括按树的大小进行合并和路径压缩。通过递归法实现路径压缩以提高效率。作者提供了VS2019环境下实现的完整工程代码,并分享了github链接和其他相关学习资源。
摘要由CSDN通过智能技术生成

2020年9月30日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】



1. 并查集的优化

实现了并查集,同时进行了两点优化:

  1. 按树的大小进行合并(也可按照树的秩(高度)进行合并,两种方法效率接近)
  2. 路径压缩(迭代法不够极致,递归法压缩的比较极致)

代码是用VS2019实现的,完整工程放在了我的github上,有需要的也可以自取。
github地址:https://github.com/March225/High-frequency-algorithm

2. 并查集代码

2.1 主函数 main.cpp

/**
 *  @Copyright (C) 2020 March. All rights reserved.
 *  @license   GNU General Public License (GPL)
 *  @author	   March
 *  @email	   345916208@qq.com
 *  @file	   main.cpp
 *  @brief	   实现并查集(优化:1.按树的大小进行合并;2.路径压缩)
 *  @version   1.0
 *  @date	   2020-08-25
 */

#include "stdafx.h"

class UnionFind {
   
private:
	int count_; // 连通分量个数
	vector<int> parent; // 存储一棵树
	vector<int> size; // 记录树的大小(包含此根结点在内的整棵树的结点数)

public:
	UnionFind(int n) : count_(n), parent(vector<int>(n))<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值