前言
今天开始学习算法,首先学习最基础的入门级算法——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