B樹,hash查詢技術

2021-10-01 14:12:55 字數 2490 閱讀 5501

b 樹

m階b樹:是滿足下列特性的樹:

(1) 樹中每個結點至多有m棵子樹;

(2) 若根結點不是終端結點,則至少有兩棵子樹;

(3) 除根結點外,其他非終端結點至少有 m/2(向上取整) 棵子樹;

(4)所有非終端結點都包含以下資料:

(n,a0,k1,a1,k2,…,kn,an)

其中,n(m/2(向上取整)- 1≤n≤m 1)為關鍵碼的個數;

ki(1≤i≤n)為關鍵碼,且ki<ki+1(1≤i≤n-1);

ai(0≤i≤n)為指向子樹根結點的指標,且指標ai所指子樹中所有結點的關鍵碼均小於ki+1大於ki。

(5)所有葉子結點都在同一層上,b樹是高平衡的。

b+樹

b+樹是b樹的變體,也是一種多路搜尋樹:

m階b+樹的結構定義如下:

(1)每個結點至多有m個子結點;

(2)每個結點(除根外)至少有ceiling(m/2)個子結點;

(3)根結點至少有兩個子結點;

(4)有k個子結點的結點必有k個關鍵碼。

m階b+樹:是滿足下列特性的樹:

⑴ 含有m個關鍵碼,每乙個關鍵碼對應一棵子樹。

⑵ 關鍵碼ki是它所對應的子樹的根結點中的最大(或最小)關鍵碼。

⑶ 所有終端結點中包含了全部關鍵碼資訊,以及指向關鍵碼記錄的指標。

⑷ 所有終端結點按關鍵碼的大小鏈在一起,形成單鏈表,並設定頭指標。

雜湊表(hash)的查詢技術

有衝突,降低了查詢效率,體現不出計算式查詢的優點

雜湊方法也不適用於範圍查詢

不能查詢最大值、最小值

也不可能找到在某一範圍內的記錄。

雜湊技術的關鍵問題:

⑴ 雜湊函式的設計。如何設計乙個簡單、均勻、儲存利用率高的雜湊函式。

⑵ 衝突的處理。如何採取合適的處理衝突方法來解決衝突。

直接定址法

雜湊函式是關鍵碼的線性函式,即:

h(key) = a * key + b (a,b為常數)

除留餘數法

雜湊函式為:h(key)=key mod p

一般情況下,選p為小於或等於表長(最好接近表長)的最小素數。

適用情況:

除留餘數法是一種最簡單、也是最常用的構造雜湊函式的方法,並且不要求事先知道關鍵碼的分布。

數字分析法

根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。

適用情況:

(1)事先知道關鍵碼的分布

(2)關鍵碼的分布均勻

平方取中法

對關鍵碼平方後,按雜湊表大小,取中間的若干位作為雜湊位址(平方後擷取。

例:雜湊位址為2位,則關鍵碼1234的雜湊位址為:(1234)²=1522756

適用情況:

事先不知道關鍵碼的分布且關鍵碼的位數不是很大。

衝突的處理

開放定址法線性探測法

當發生衝突時,從衝突位置的下乙個位置起,依次尋找空的雜湊位址。

對於鍵值key,設h(key)=d,閉雜湊表的長度為m,則發生衝突時,尋找下乙個雜湊

位址的公式為:

hi=(h(key)+di) % m (di=1,2,…,m-1)

堆積:在處理衝突的過程**現的非同義詞之間對同乙個雜湊位址爭奪的現象。

int hashsearch1(int ht[ ], int m, int k) 

if (i==j) throw "溢位";

else ht[i]=k; //查詢不成功時插入

}

拉鍊法(鏈位址法)

基本思想:將所有雜湊位址相同的記錄,即所有同義詞的記錄儲存在乙個單鏈表中(稱為同義詞子表),在雜湊表中儲存的是所有同義詞子表的頭指標。

用拉鍊法處理衝突構造的雜湊表叫做開雜湊表。

設n個記錄儲存在長度為m的雜湊表中,則同義詞子表的平均長度為n / m。

在拉鍊法構造的雜湊表查詢演算法——偽**

計算雜湊位址j;

在第j個同義詞子表中順序查詢;

若查詢成功,則返回結點的位址;

否則,將待查記錄插在第j個同義詞子表的表頭。

node*hashsearch2(node*ht[ ], int m, int k)

}

雜湊查詢的效能分析

由於衝突的存在,產生衝突後的查詢仍然是給定值與關鍵碼進行比較的過程。

在查詢過程中,關鍵碼的比較次數取決於產生衝突的概率。而影響衝突產生的因素有:

(1)雜湊函式是否均勻

(2)處理衝突的方法

(3)雜湊表的裝載因子

α=表中填入的記錄數/表的長度

B樹索引 hash索引

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。對於乙個表中幾百萬行資料來說,如果不使用索引,每次查詢都需要遍歷一遍所有的行,從而找到所需要的資料,平均查詢效率o n 如果使用了索引,在查詢時會先找索引,快速定位到磁碟位置,然後再去讀出該行的資料,效率大大...

多路查詢樹 B數 B 樹 B 樹 原理

1 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 此如1億 就存在如下問題 2 問題1 在構建二叉樹時,需要多次進行 o操作海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 3 問題2 節點海量,也會造成二叉樹的高度很大,會降低操作速度 1 在二...

多路查詢樹 B樹

多路查詢樹 multi way search tree 其每乙個結點的孩子數可以多於兩個,且每乙個結點處可以儲存多個元素。在這裡,我們講解它的4種特殊形式 2 3樹 2 3 4樹 b樹和b 樹。2 3樹是這樣的一顆多路查詢樹 其中的每乙個結點都具有兩個孩子 我們稱它為2結點 或三個孩子 我們稱它為3...