第一是鍊錶表示的並查集的加權合併的啟發式策略,說白了就是維護乙個表長資訊,在合併兩個集合時將表長短的鍊錶鏈結到表長長的鍊錶上面。以此來減少修改指向代表的指標的次數,從而提高時間複雜度。
第二就是森林表示的三種優化策略。優化的思想就是儘量減少找根的時間,盡量降低樹的高度。
第乙個策略就是:按秩合併
維護乙個秩高,秩就是樹的高度,將較小秩的樹的根指向較大秩的樹的根
第二個策略就是:路徑壓縮
在查詢某個元素的同時,使查詢路徑上的 每個結點都指向根結點
第三個策略就是:帶路徑壓縮的按秩合併
在合併兩個集合的同時,首先對兩個集合進行路徑壓縮,再將壓縮後的兩個集合用按秩合併的策略進行合併
經過優化後的時間複雜度對比如下
並查集學習(2)
實現這個資料結構主要有三個函式 如下 void ufset 初始化 return i void union int r1,int r2 將兩個不同集合的元素進行合併,使兩個集合中任兩個元素都連通 else 在 函式中如果僅僅靠乙個迴圈來直接得到節點的所屬集合根結點的話。通過多次的 操作就會有很多節點...
並查集學習筆記
並查集是一種用來管理資料分組狀況的資料結構,可以進行合併操作,但無法進行分割。並查集的結構 並查集也是用樹形結構來實現的,但不是二叉樹。每個資料,元素對應乙個節點,每個組對應一棵樹。並查集的實現 並查集有幾個基本操作初始化 查詢樹的根 合併x,y所屬集合 判斷x,y是否屬於同一集合。查詢是查詢樹的根...
並查集 學習筆記
並查集是由一組互不相交的集合組成的乙個集合結構,並在此集合上定義了運算union和find。即並查集中的元素本身是集合,他們是某個集合的子集,並查集是由這些集合組成的集合結構。並查集上有兩個最基本的運算,find和union。函式find搜尋給定元素i所在的子集合,並返回該自己喝 union運算將兩...