Union Find

Description

Union Find是一個演算法, 用來找出node間是否有相連的關係。

包含: 直接相連(a<->b), a,b直接相連, 間接相連(a<->b<->c), a, c間接相連

graph中的node是否相連的關係可使用array or map 表示.

Map<element, parent element>

Array[element] = Parent element

當某兩個node的parent為同一個即為相連

Questions

  • Find island count

  • 著色問題

Functions

Union: 建立graph間 兩node connect的關係

TimeComplexity: O(N)

public void union(int[] parents, int a, int b) // means a and b is connected
{
    int aRoot = find(parents, a);
    int bRoot = find(parents, b);
    if(aRoot != bRoot){
        parents[bRoot] = aRoot;
    }
}

Find: 找出 root of the node

TimeComplexity: O(N)

root的parent會是root自己。



private int find(int[] parents, int node){
    if(node == parents[node])
        return node;
    else
        return find(parents, parents[node]);
}

Last updated

Was this helpful?