《資料結構與演算法分析》學習筆記 第八章 不相交集

2022-01-09 20:31:52 字數 1967 閱讀 7388

目錄對於每一對元素(a,b), a, b屬於s,arb或者為true或者為false,則稱在集合s上定義關係r,如果arb是true。那麼我們說a與b有關係。

等價關係是滿足下列三個性質的關係r:

(自反性)對於所有的a屬於s,ara

(對稱性)arb當且僅當bra

(傳遞性)若arb且brc,則arc

關係≤不是等價關係,因為他不是對稱的,因為從a≤b,不能得出b≤a;電氣連通性是乙個等價關係。如果兩個城市位於同乙個國家,那麼定義他們是有關係的,容易驗證這是乙個等價關係。

為了執行兩個集合的union運算,我們使乙個結點的根指標指向另一棵樹的根節點。這種操作花費常數時間。對元素x的一次find(x)操作通過返回包含x的樹的根而完成。執行這次操作花費時間與表示x的節點的深度成正比。這要假設我們以常數時間找到表示x的節點。用這種方法能夠建立一棵深度為n-1的樹,使得一次find的最壞情形執行時間是o(n),一般情況,執行時間是對連續混合使用m個指令來計算的。這種情況下,m次連續操作在最壞情形下可能話費o(mn)時間

型別宣告

#ifndef _disjset-h

typedef int disjset[numsets + 1];

typedef int settype;

typedef int elementtype;

void initialize(disjset s);

void setunion(disjset s, settype root1, settype root2);

settype find(elementtype x, disjset s);

#endif

initialize

void

initialize(disjset s)

}

setunion

void

setunion(disjset s, settype root1, settype root2)

find

settype

find(elementtype x, disjset s)

void

setunion(disjset s, settype root1, settype root2)

else

s[root2] = root1;

}}

路徑壓縮在一次find操作期間執行,而與用來執行union的方法無關。設操作為find(x),此時路徑壓縮的效果是,從x到根的路徑上的每乙個節點都使它的父節點變成根。

settype

find(elementtype x, disjset s)

else

}

當執行一些union操作的時候,路徑壓縮是個好的想法,因為存在許多的深層節點並通過路徑壓縮將他們移近根節點。在這種情況下進行路徑壓縮時,連續m次操作最多需要o(mlogn)的時間。路徑壓縮與按大小求並完全相容,與按高度求並不完全相容

我們有乙個計算機網路和乙個雙向連線表。每乙個連線可將檔案從一台計算機傳送到另一台計算機。如何將任意乙個檔案傳送給任意乙個計算機。解決該問題的乙個演算法時開始時把每一台計算機放到它自己的集合中。我們要求兩台計算機可以傳輸檔案當且僅當他們在同乙個集合中。可以看出,傳輸檔案的能力形成乙個等價關係。我們一次乙個的讀入連線,當讀入某個鏈結(u, v),則測試是否u和v在乙個集合中。如果在乙個集合中則什麼都不做,如果在不同的集合中,那我們將他們所在的兩個集合合併。在演算法的最後,所得到的圖聯通當且僅當恰好存在乙個集合。如果存在m個連線和n臺計算機,那麼空間的需求則是o(n)。使用按大小求並和路徑壓縮的方法,我們得到最壞情形執行時間為o(m a(m, n)),因為存在2m次find和至多n-1次union.這個執行時間在實用中是線性的

mark allen weiss.資料結構與演算法分析[m].america, 2007

資料結構與演算法分析(八) BFS演算法

圖的組成 頂點 vertices 邊 edges 圖的一些概念 1.鄰接 adjacent v1和v2相連線 2.路徑 path 乙個頂點序列 3.圈 cycle 乙個頂點出現了兩次 圖的表示 1.鄰接矩陣 空間大,但是速度快 2.鄰接表 空間小,但速度慢 實現 實現的是無權圖 1.根據邊的數目確定...

《資料結構與演算法分析python版》第八周程式設計作業

題目內容 給定乙個字串s與待查詢字串p,請給出使得s i i len 是p的乙個字母重排的所有下標i 輸入格式 兩行字串,第一行為s,第二行為p 輸出格式 所有滿足條件的下標從小到大排列,以空格分隔輸出 若無對應下標,則輸出 none 輸入樣例 cbaebabacd abc輸出樣例 0 6指令碼 c...

資料結構與演算法分析 學習筆記 6

排序 插入排序 1 void insertionsort elementtype a,intn 2 12 由於巢狀迴圈每一次花費n次迭代,因此插入排序時間為o n2 逆序 指數組中具有性質ia j 的序偶 a i a j 逆序的個數正好是插入排序執行的交換次數。因為交換兩個不安原序排列的相鄰元素恰好...