【算法导论】21:并查集Disjoint sets

1.两个基本操作:划分以及合并。

2.每个set都有一个representative,算是一个族长。执行的操作:

make-set(x):每个元素组成一个集合;

Union(x,y):将包含x、y的集合进行合并,代表元素会变化;

Find-set(x):返回包含x的指向某个代表元素指针;

3.数据结构:

(1)Linked-list:head,tail,每个object包含指向下个元素以及代表元素的指针;

(2)并查集森林(根树):union by rank以及path compression

伪代码:

MAKE-SET(X): p[x]=x rank[x]=0 UNION(x,y): LINK(FIND-SET(x),FIND-SET(y)); LINK(x,y): if(rank[x]>rank[y]) then p[y]=x; else p[x]=y; if(rank[x]==rank[y]) then rank[y]+=1 FIND-SET(x): if(x!=p[x]) then p[x]=FIND-SET(p[x]); return p[x];

你可能感兴趣的:(数据结构,算法,object,Path,compression)