本節講的是並查集的另外一種實現方法。這種方法的合併操作開銷很小,但是查詢操作開銷很大。
這種演算法的資料結構和快速查詢方法的資料結構是一樣的,也是n個整數組成的陣列。
陣列中每個元素id[i]的含義是指i的上級是id[i]。
乙個節點的根節點就是id[id[id[...id[i]....]]],一直迴圈直到數值不再變化為止。由於演算法的特性,這種迴圈永遠不會造成死迴圈。
查詢操作就是判斷兩個節點的根節點是否相同。
合併節點p和節點q就是將p節點的根節點的父節點設定為q節點的根節點。這樣只需要改變乙個值,因此開銷少了很多。
這種方法雖然效能方面提公升了很多,但是仍然不夠,因為最壞的情況下,查詢操作的複雜度將達到n。
快速查詢方法中合併的開銷太大,但是建立的樹結構是平坦的,所以查詢操作的開銷極小,但是合併操作中建立平坦的樹開銷非常大。
快速合併方法中樹形結構可能會非常高。這種情況下查詢操作的開銷非常大,複雜度可以達到n。
普林斯頓公開課 演算法1 11 並查集的應用
遊戲中會用到。乙個n n的矩陣,推斷頂部和底部是否連通就是滲透問題。下圖中左側的矩陣能滲透,右側矩陣不能滲透。滲透問題在電學 流體力學 社會交際中都有應用。在遊戲中可能須要生成一張地圖,可是作為地圖肯定是須要連通的。那麼怎樣保證生成的地圖一定是連通的呢?下圖展示了地圖生成的過程,白點表示可以到達的地...
普林斯頓公開課 演算法1 7 並查集基本概念
本節講的是並查集的基本概念。對問題進行數學建模 尋找乙個能夠解決問題的演算法 執行演算法檢測速度和記憶體是否符合要求 如果達不到要求,找出原因 尋找一種方法來解決問題 迴圈步驟,直到滿意為止 以上就是演算法開發比較科學的方法。演算法開發完成之後需要進行數學分析。給定n個物體,可以提供兩種操作,一種是...
普林斯頓公開課 演算法1 8 並查集 快速查詢
本節講的是並查集的第一種實現方法,這種方法查詢操作開銷很小而合併操作開銷比較大。假設有n個節點,那麼該演算法的資料結構就是乙個包含n個整數的陣列id。判斷節點p和節點q是否相連就是判斷id p 和id q 的值是否一致。合併節點p和節點q就是將id陣列中所有的id p 都修改為id q 這樣的話,每...