普林斯頓公開課 演算法1 8 並查集 快速查詢

2021-06-22 07:30:36 字數 303 閱讀 5733

本節講的是並查集的第一種實現方法,這種方法查詢操作開銷很小而合併操作開銷比較大。

假設有n個節點,那麼該演算法的資料結構就是乙個包含n個整數的陣列id。

判斷節點p和節點q是否相連就是判斷id[p]和id[q]的值是否一致。

合併節點p和節點q就是將id陣列中所有的id[p]都修改為id[q]。

這樣的話,每次合併都要遍歷整個陣列,修改多個值,因此開銷比較大。

合併一次的複雜度是n,如果需要合併n次,那麼整個程式的複雜度就是n^2。這樣的複雜度不適合應用於規模較大的地方。

查詢操作的複雜度是1,開銷很小。

普林斯頓公開課 演算法1 9 並查集 快速合併

本節講的是並查集的另外一種實現方法。這種方法的合併操作開銷很小,但是查詢操作開銷很大。這種演算法的資料結構和快速查詢方法的資料結構是一樣的,也是n個整數組成的陣列。陣列中每個元素id i 的含義是指i的上級是id i 乙個節點的根節點就是id id id id i 一直迴圈直到數值不再變化為止。由於...

普林斯頓公開課 演算法1 11 並查集的應用

遊戲中會用到。乙個n n的矩陣,推斷頂部和底部是否連通就是滲透問題。下圖中左側的矩陣能滲透,右側矩陣不能滲透。滲透問題在電學 流體力學 社會交際中都有應用。在遊戲中可能須要生成一張地圖,可是作為地圖肯定是須要連通的。那麼怎樣保證生成的地圖一定是連通的呢?下圖展示了地圖生成的過程,白點表示可以到達的地...

普林斯頓公開課 演算法1 7 並查集基本概念

本節講的是並查集的基本概念。對問題進行數學建模 尋找乙個能夠解決問題的演算法 執行演算法檢測速度和記憶體是否符合要求 如果達不到要求,找出原因 尋找一種方法來解決問題 迴圈步驟,直到滿意為止 以上就是演算法開發比較科學的方法。演算法開發完成之後需要進行數學分析。給定n個物體,可以提供兩種操作,一種是...