樹的分類
1.樹是N個(gè)頂點(diǎn)的有限集合。N=0時(shí),稱為空樹,滿足有且僅有一個(gè)特定的稱為根的結(jié)點(diǎn)。 當(dāng)N>1時(shí),其余節(jié)點(diǎn)可分為m(M>0)個(gè)的互不相交的有限集合,其中每個(gè)集合本身又是一棵樹。
樹的廣度優(yōu)先和深度優(yōu)先
兩種算法都需要設(shè)置訪問標(biāo)記數(shù)組。
廣度優(yōu)先類似于二叉樹的層次遍歷算法,算法借助一個(gè)輔助隊(duì)列來記憶正在訪問的頂點(diǎn)的下一層頂點(diǎn)。
深度優(yōu)先就是一個(gè)遞歸算法,先訪問樹中起始頂點(diǎn),然后訪問與它鄰接的未被訪問過的頂點(diǎn),不斷重復(fù)。
樹主要有三種存儲(chǔ)結(jié)構(gòu):
1.雙親表示法 2.孩子表示法 3孩子兄弟表示法
2.二叉樹
每個(gè)節(jié)點(diǎn)至多有兩個(gè)子樹(二叉樹中不存在度大于2的結(jié)點(diǎn)),二叉樹有左右之分,不能相互顛倒。
1)滿二叉樹:一個(gè)高度為h,并且有2h-1個(gè)結(jié)點(diǎn)的二叉樹稱為滿二叉樹,即樹中的每一層都含有最多的結(jié)點(diǎn)
2)完全二叉樹 :設(shè)一個(gè)高度是H,有N個(gè)結(jié)點(diǎn)的二叉樹,當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與高度為H的滿二叉樹中編號(hào)為1~N的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí),稱為滿二叉樹
3)二叉排序樹:一棵二叉樹或者空二叉樹,或者具有如下性質(zhì)的二叉樹:左子樹上所有結(jié)點(diǎn)的關(guān)鍵字均小于根節(jié)點(diǎn)上的關(guān)鍵字,右子樹上所有結(jié)點(diǎn)的關(guān)鍵字均大于根節(jié)點(diǎn)的關(guān)鍵字,左子樹和右子樹又各是一棵二叉排序樹 。
4)平衡二叉樹:樹上任一結(jié)點(diǎn)的左子樹和右子樹的深度之差不超過1。
樹,森林與二叉樹的轉(zhuǎn)化:
左孩子右兄弟
哈夫曼樹:在含有N個(gè)帶權(quán)葉子節(jié)點(diǎn)的二叉樹中,其中帶權(quán)路徑長度(WPL)最小的二叉樹稱為哈夫曼樹。
哈夫曼編碼:如果沒有一個(gè)碼是其他編碼的前綴。稱為前綴編碼。
排序
快排的實(shí)現(xiàn)過程:
基本思想基于分治法:找一個(gè)基準(zhǔn)元素,通過一趟排序使得比基準(zhǔn)元素小的都在左邊,比基準(zhǔn)元素大的都在右邊。而后分別遞歸地對(duì)子表重復(fù)上述過程。直到每部分內(nèi)都只有一個(gè)元素為止。
當(dāng)初始表基本有序或逆序時(shí)最壞情況,O(N的平方)。 最好的是log2(n).
B-樹(多路平衡查找樹)
1.所有結(jié)點(diǎn)的孩子結(jié)點(diǎn)數(shù)最大值成為B樹的階。
1)樹中每個(gè)節(jié)點(diǎn)至多有M棵子樹(即至多含有M-1個(gè)關(guān)鍵字)
2)若根節(jié)點(diǎn)不是終端節(jié)點(diǎn),則至少有兩棵子樹
3)除根節(jié)點(diǎn)以外的所有非葉節(jié)點(diǎn)至少有【M/2】(向上取整)棵子樹
4)所有葉節(jié)點(diǎn)都出現(xiàn)在同一層
B+樹
和B-樹相比,
1.它的葉結(jié)點(diǎn)包含信息,所有非葉節(jié)點(diǎn)都只起了一個(gè)索引的租用。
2.葉節(jié)點(diǎn)中包含了所有關(guān)鍵字,而且鏈接成一個(gè)鏈表,可以從最小開始查找到最大。
3.具有N個(gè)關(guān)鍵字的結(jié)點(diǎn)含有N個(gè)子樹。
4.所有分支節(jié)點(diǎn)(可以看成索引的索引)中僅包含它的各個(gè)子節(jié)點(diǎn)中的最大值及指向子節(jié)點(diǎn)的指針。
散列表
把關(guān)鍵字映射成關(guān)鍵字對(duì)應(yīng)的地址的函數(shù)。 當(dāng)把不同的關(guān)鍵字映射都同一個(gè)地址的時(shí)候,就稱為沖突。
解決沖突的方法
1.開放定址法: H = (H(key)+d)%m
1)線性探測法 d為1,2,3…
2)平方探測法 d 為1的平方 負(fù)的(1的平方),2的平方,-(2的平方)
3)再散列法:又稱雙散列法 需要使用兩個(gè)散列函數(shù)。當(dāng)?shù)谝粋€(gè)沖突的時(shí)候,就使用第二個(gè)散列函數(shù)。4)偽隨機(jī)數(shù)法。d是隨機(jī)數(shù)。
2.拉鏈法:把所有同義詞存儲(chǔ)在一個(gè)線性鏈表中。