并查集
这是第一个我认为非常优美的数据结构,最近项目中遇到一个问题(Two-pass 求解连通域)恰巧用到了并查集。虽然第一次接触已经快十年了,但这个数据结构我一直觉得非常优美,小巧但高效。
原理我不记录,这种经典的结构网上资料太多了,只是单纯记录我个人对这个结构的看法。
只看其中的 find
方法就能感觉出这种小巧但是高效的魅力:
int find(int x) {
while (x != parent[x])
x = parent[x] = parent[parent[x]];
return x;
}