1. 程式人生 > >真----並查集學習筆記

真----並查集學習筆記

一點 一輪 基礎 是否 關系 查詢 如何解決 問題 顯示

2019-04-09更新

關於並查集

本子上說,並查集“處理的是‘集合’之間的關系,即動態地維護和處理集合元素之間復雜的關系”。

邊上圖邊說

技術分享圖片

現給出這張圖中節點的兩兩關系,並在給出關系的指令中間插入一些“詢問某兩個節點是否連通”的指令,要求

隨時響應,這樣的問題如何解決?

並查集是解決這個問題的一種方法。

上圖

技術分享圖片

假設某一時刻根據給出的關系,節點的連通狀態如上圖所示,

此時若詢問節點9和節點4是否連通,得到的回答應是“是的”。

如果用並查集做這個題,可以將每個已聲明關系的節點

接入到一顆樹中,

都知道一棵樹只有一個根節點,那麽如果兩個節點經聲明關系後是連通的,

那麽在並查集中,這兩個節點的根節點是一個節點,並查集的查詢操作,就是

建立在根節點查詢的基礎上的。

————————————————————————

個人覺得,並查集的路徑壓縮使得 並查集 更像 並查集,

上圖

這是普通並查集的一個集合

技術分享圖片

這是加入優化代碼且優化過一輪後的一個並查集集合

技術分享圖片

速度上看,例如從五號節點找到零號節點,顯然是第二張圖顯示的這顆樹更快一點吧?

根節點是集合的“身份證”,身份證自然還是隨身最好,總不能讓他人保管,他人又讓他人

保管,他人又讓他人保管,這樣要獲得自己的身份證明就會很麻煩,時間上行不通,

聯想到並查集,這也許就是路徑壓縮的意義——去除昂余信息,加快查詢速度。

————————————————

1347:【例4-8】格子遊戲 (好練習題)

http://ybt.ssoier.cn:8088/problem_show.php?pid=1347

這題解析以後再寫,先鴿著

1387:搭配購買(buy)

這題等學了背包再做

真----並查集學習筆記