Quick-Find算法

本文介绍了Quick-Find算法的基础知识,这是一个用于查找连通关系的算法。通过C++代码示例展示了如何进行Find和Union操作,并分析了其时间复杂度。在总结中提到,虽然Find操作的时间复杂度为O(1),但Union操作的时间复杂度为O(N),导致总的时间复杂度为O(M*N)。最后推荐了普林斯顿大学在Coursera上的算法课程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

    今天开始学习算法,首先学习最基础的入门级算法——Quick-Find, 它主要是一个用来找连通关系的一个算法。比如说这里有五个人,A认识B, B认识C, C认识D, D认识E, 这样的话A就认识了E。A,B,C,D,E组成了一个关系链, 那么想想中国13亿人中有多少关系链呢?Who knows?还是先看看算法究竟是怎样的吧。

Quick-Find算法

我们先不谈13亿人的关系链,先来看看最简单的,拿8个数来举例:0,1,2,3,4,5,6,7,因为数字比较简单,我们就用一个整型数组ID来定义它,对ID进行初始化。

ID_array:

0

1 2 3 4 5 6 7
0 1 2 3 4 5 6 7

ID[x]代表这个数的ID。

Find操作:查看x,y的ID就可知道这两个是否连接

Union操作: 连接x,y,将y的ID值改的与x的ID相同,同时还要改所有与y连接的(ID值与y相同的都要改)

结果分析,之后来看看代码,这里用的是C++:

class quick_find{
    
private:
    int cnt;//The count of connected component
    
public:
    //p_ID is a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值