视频字幕
並查集是一種樹狀的資料結構,專門用於處理不交集的合併及查詢問題。它的主要目的是將n個不同的元素分成若干個不相交的集合,並支援兩種核心操作:Find查詢操作用來確定某個元素屬於哪個集合,Union合併操作用來將兩個元素所在的集合合併成一個新的集合。
並查集有三個核心操作。Make-Set操作創建一個只包含元素x的新集合,x同時也是這個集合的代表。Find-Set操作返回包含元素x的集合的代表元素。Union操作將包含元素x的集合和包含元素y的集合合併成一個新的集合。這些操作讓我們能夠動態地管理不相交的集合。
不交集森林表示法是並查集的另一種實現方式。在這種表示法中,每個集合用一棵有根樹表示,樹中的每個節點代表集合中的一個成員。每個節點只儲存指向其父節點的指標,樹的根節點是該集合的代表元素。Make-Set操作創建只有根節點的樹,Union操作讓一個根指向另一個根,Find-Set操作沿父指標向上追溯到根節點。
為了提高並查集的效率,我們使用兩種重要的優化啟發式。按秩合併是指在Union操作時,總是將秩較小的樹合併到秩較大的樹上。路徑壓縮是指在Find操作時,將路徑上的每個節點都直接指向根節點,這樣可以顯著扁平化樹的結構。同時使用這兩種優化後,時間複雜度可以達到O(m α(n)),其中α(n)是反阿克曼函數,在實際應用中幾乎是常數。
並查集最經典的應用是判斷無向圖的連通分量。算法很簡單:首先對圖中每個頂點執行Make-Set操作,然後對每條邊檢查兩個端點是否在同一集合中,如果不在就執行Union操作合併它們。最終,同一集合中的所有頂點就屬於同一個連通分量。並查集還廣泛應用於Kruskal最小生成樹算法、動態連通性問題以及圖像處理中的連通區域檢測等領域。