摘要:
(1)不相交資料結構是一種非常有用的資料結構,它類似於一種集合,高效的支援某兩個元素是否在同乙個元素中的查詢操作,也支援合併兩個集合,在集合中刪除某個元素等操作.
基本資料結構:不相交資料結構常用的一種形式是由樹的構成的.樹被儲存在乙個陣列中(非顯式的儲存).集合的名字由樹的根給出.假如該陣列元素的值大於0,那麼它不是根,否則它就是根(大小的負值由該陣列元素的值)是否進行路徑壓縮是一件很重要的事,所謂路徑壓縮就是指在查詢某個元素時,將它路徑上的所有點的值都記錄為所在集合的根.
#include "stdafx.h"
#include "malloc.h"
#define numelements 9
typedef int disjset[numelements+1];
typedef struct record *stack;
struct record
;
基本操作結構,查詢與合併
int find(disjset s,int x)//查詢元素x所在的集合
void union_size(disjset s,int root1,int root2)
else
}
【3】按高度合併:
void union_height(disjset s,stack record,int root1,int root2)
else
}
廢除最後一次的union操作;
使用乙個棧記錄最近傳送的union操作與相應的集合.方便進行刪除.
void
inistack(stack
s,int size)
void
pop(stack
s ,int & oldheight1, int&oldheight2, int &root1, int &root2 )
void
push(stack
s,int height1,int height2,int root1,int root2)
void
deunion(disjset
s, stack record)
資料結構 不相交集ADT
若對於每一對元素 a,b a b屬於s,arb或者為true或者為false,則稱在集合s上定義關係r。如果arb是true,那麼我們說a與b有關係。等價關係是滿足下列三個性質的關係r 自反性 對於所有的a屬於s,ara 對稱性 arb當且僅當bra 傳遞性 若arb且brc,則arc 乙個元素a屬...
不相交集資料結構
用乙個1x3的陣列來儲存每個數的數 其父親 秩。首先尋找合併的兩個樹的根的根,然後按照秩的大小將兩個樹進行合併。尋找兩個數的根時,順便壓縮其與根的距離 include define max 100 int find int a 3 int n void rootunion int a 3 int m...
《資料結構與演算法分析》不相交集
前言 回來到學校,今天又要開始苦逼的工作了,後悔回家玩去了,現在想學習時間又不夠了。就是這麼傻 我的github 不相交集 思想 不相交集是解決等價問題的一種有效的資料結構,之所以稱之為有效是因為,這個資料結構簡單 幾行 乙個簡單陣列就可以搞定 快速 每個操作基本上可以在常數平均時間內搞定 首先我們...