並查集知識總結

2021-07-16 00:25:24 字數 574 閱讀 2123

1.非路徑壓縮:

遞迴版:

__int64 findroot(__int64 x)

非遞迴版:

__int64 findroot(__int64 x)//查詢x的根節點

2.帶路徑壓縮:

遞迴版:

__int64 findroot(__int64 x)//找x的根節點 

非遞迴版:

__int64 findroot(__int64 x)

return r;

}

還可根據題意對此函式進行修改使其實現其他的功能 如:記錄x的父節點有多少個.

3.合併函式:

void union(__int64 x,__int64 y)

}

注意:區分是合併乙個節點到乙個樹上還是合併兩棵樹;

查詢根節點時用不用路徑壓縮:一般來說有向圖不用壓縮,具體判斷還應結合時間複雜度.

詳細講解:

並查集知識

其實並查集顧名思義就是有 合併集合 和 查詢集合 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如果x是根...

並查集 總結

自己學完後總結一下吧,並查集,我的理解就是乙個查詢與合併,用乙個find函式來查詢自己的祖先也就是根節點,在這過程中還可以進行路徑壓縮,就是讓這個點直接變到根節點之下,還有就是合併,找出這兩個點的根節點,如果根節點不相同的話,就將乙個根節點放到另乙個根節點下面。這道題的就是用並查集做,找出總共有幾個...

並查集總結

用自己的理解來寫好了 有些地方可能不對 不定時更新理解 操作主要為三步 一 初始化 void init 二 查詢 這個為路徑壓縮 就是每次查詢時更新 查詢節點 x 上面所有節點直接使他們連向根節點 每次查詢更新 int find int x 另一種路徑壓縮 不過麻煩了些 作為理解 int find ...