演算法導論 第二十一章 不相交集合森林

2021-07-03 21:57:24 字數 1548 閱讀 2931

在不相交集合中的另一種更快的實現中,用有根樹來表示集合。樹中的每個成員指向其父節點,每棵樹的根包含了代表(representative),並且是他自己的父節點。不相交森林即由多棵這樣的樹組成,如下圖所示:

[注:(b)是(a)union(e,g)的結果]

採用上述表示方法直觀上並不比採用鍊錶表示演算法更快,但是可以通過「按秩合併」和「路徑壓縮」來提公升效率。

按秩合併(union by rank)

對於每個節點,用秩表示節點高度的乙個上界。在按秩合併中,具有較小秩的跟在union操作中要指向具有較大秩的根。

路徑壓縮(path compression):

在find-set操作中,利用這種啟發式策略來使查詢路徑上的每個節點都直接指向根節點。(路徑壓縮不改變節點的秩)

需要說明的是,上述find-set過程採用一種兩趟方法(two-pass method):一趟是沿查詢路徑上公升,直到根;第二趟是沿查詢路徑下降,以便更新每個節點,使之直接指向根。

不相交森林實現連通子圖的完整**如下:

【注:若有錯誤,請指正~~~】

JAVA第二十一章(小結)

1 遞迴 理解 1 方法定義中呼叫方法本身的現象 舉例 老和尚給小和尚講故事,我們學程式設計 2 遞迴的注意事項 a 要有出口,否則就是死遞迴 b 次數不能過多,否則記憶體溢位 c 構造方法不能遞迴使用 3 遞迴的案例 a 遞迴求階乘 b 兔子問題 c 遞迴輸出指定目錄下所有指定字尾名的檔案絕對路徑...

第二十一章 變換(七)

錨定規模 以下是一些螢幕截圖,顯示 從左到右 相對於左下角相對於右下角和相對於中心底部的縮放 如果您熟悉ios程式設計,則可以了解類似的anchorpoint屬性。在ios中,此屬性會影響定位和轉換中心。在xamarin.forms中,anchorx和anchory屬性僅指定轉換中心。這意味著xam...

第二十一章 變換(八)

旋轉 屬性旋轉螢幕表面上的可視元素。將 旋轉 屬性設定為以度為單位的角度 不是弧度 正角度順時針旋轉元素。您可以將 旋轉 設定為小於0或大於360的角度。實際旋轉角度是旋轉屬性模數360的值。元素圍繞相對於使用anchorx和anchory屬性指定的自身的點旋轉。planerotationdemo程...