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

2021-09-06 17:25:28 字數 597 閱讀 8851

遊戲中會用到。

乙個n×n的矩陣,推斷頂部和底部是否連通就是滲透問題。

下圖中左側的矩陣能滲透,右側矩陣不能滲透。

滲透問題在電學、流體力學、社會交際中都有應用。

在遊戲中可能須要生成一張地圖,可是作為地圖肯定是須要連通的。那麼怎樣保證生成的地圖一定是連通的呢?下圖展示了地圖生成的過程,白點表示可以到達的地方,黑點表示障礙物,藍點表示可以連通的地方。生成地圖的時候就是不斷新增白點,直到上下可以連通為止。

為了推斷是否能滲透,計算的過程中會新增乙個虛擬的節點,這樣就把滲透問題簡化成推斷兩個節點是否能連通。下圖展示了虛擬節點示意圖。

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

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

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

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

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

本節講的是並查集的第一種實現方法,這種方法查詢操作開銷很小而合併操作開銷比較大。假設有n個節點,那麼該演算法的資料結構就是乙個包含n個整數的陣列id。判斷節點p和節點q是否相連就是判斷id p 和id q 的值是否一致。合併節點p和節點q就是將id陣列中所有的id p 都修改為id q 這樣的話,每...