「查詢--比較淡然的一章。」
主要知識點
查詢表的檢索機制
平均查詢長度
折半查詢表
二叉排序樹
雜湊表1 查詢表的檢索機制
本章給出了三種型別的查詢表,
第一類是線性索引,記錄關鍵字一般按序排列,以提高檢索速度。對應檢索採用基於比較檢索方法。
第二類是樹形檢索,樹形的典型結構是二叉排序樹,其檢索的時間複雜度與樹的深度同級為對數函式,其對應的檢索方法是基於樹表式的檢索,即將帶查詢的表組織成樹,在樹形結構上實現查詢。
第三類是雜湊結構,根據資料的」關鍵值」計算資料的儲存位址,雜湊表既是建立表,也是查詢表的方法,其對應的檢索方式是」計算式」的檢索。
2 平均查詢長度
為決定資料元素在列表中的位置,需和給定值進行比較的關鍵字個數的期望值,稱為查詢演算法在查詢成功時的平均查詢長度。
計算平均查詢長度的基本公式
對於長度為n的列表,查詢成功時的平均查詢長度為:
asl=p1c1 + p2c2 +……+pncn =∑ pici
其中pi為查詢列表中第i個資料元素的概率。ci找到列表中第i二個資料元素時,已經進行過的關鍵字比較次數。
計算方法:
採用公式法計算(通用),也可採用手工計算方法(具體)。針對實際的具體問題計算相應的查詢成功時的平均差查詢長度。
3 折半查詢表
折半查詢法要求查詢表按照順序儲存結構且按關鍵字有序排列。
折半查詢過程中借助於折半判定樹加以描述。判定樹中每一結點對應表中乙個記錄在表中的位置序號。
折半查詢演算法的效能:在等概率時查詢成功的平均查詢長度與折半判定樹的深度相關:
折半查詢演算法查詢速度快,平均效能好,插入刪除比較困難。
4 二叉排序樹
二叉排序樹的定義。
二叉排序樹的性質:中序遍歷乙個二叉排序樹,可以得到乙個遞增有序序列。
含有n個節點的二叉排序樹形態不唯一,其構造與數列的的輸入順序有關。
查詢過程與折半查詢過程類似,在二叉排序樹中查詢乙個記錄時,其比較次數不超過樹的深度。就平均效能而言,二叉排序樹上的查詢和折半查詢相差不大。平均查詢長度依然是
二叉排序樹的插入,刪除操作無需移動大量結點,經常變化的動態表也採用二叉排序樹結構。
5 雜湊表
基本思想:以元素的關鍵字k為自變數,通過雜湊函式h,計算其儲存位置p=h(k),從而實現按照關鍵字計算的方式建立表與查詢表。雜湊表的查詢過程與還是表的建立過程對應一致。
雜湊法主要包括1)雜湊函式的構造,2)處理衝突的方法,
構造雜湊函式,常用的方法有除留餘數法。
處理衝突的基本方法包括性探測再雜湊,二次探測再雜湊,鏈位址法等。
雜湊表中影響關鍵字比較次數的因素有三個:雜湊函式,處理衝突的方法以及雜湊表的裝填因子。
雜湊表的平均查詢長度是裝填因子的函式。
【例題1】1000個記錄設計雜湊表.假設雜湊函式是均勻的,解決衝突用線性探測再雜湊法,並要求在等概率的情況下查詢成功時的平均查詢長度不超過3,查詢不成功時的平均查詢長度不超過13,則雜湊表長度應取多大?
解:本題要求應用公式計算平均查詢長度。
已知雜湊函式是均勻的,且解決衝突用線性探測再雜湊法時,在等概率的情況下查詢成功和查詢不成功時的平均查詢長度為
依題意有:
解的a<=0.8.取a=0.8,由於0.8=1000/m,所以m=1250
【例題2】對以下關鍵字序列建立雜湊表:(sun,mon,tue,wed,thu,fri,sat),雜湊函式為h(k)=(k中第乙個字母在字母表中的序號)mod 7。用線性探測法處理衝突,要求構造乙個裝填因子為0.7的雜湊表,並計算出在等概率情況下,查詢成功的平均查詢長度和不成功的平均查詢長。
解:此題主要要求掌握手工計算平均查詢長度的方法,
裝填因子為0.7,根據公式,裝填因子 = 元素個數/表長,知雜湊表長度為=7/0.7=10.
各關鍵字第乙個字母的序號分別為19(s),13(m),20(t),23(w),6(f)。
建立雜湊表, 成功的平均查詢長度, 不成功的平均查詢長度
計算各關鍵字的雜湊位址
h(sun)=19mod7=5;
h(mon)=13mod7=6;h(tue)=19mod7=6;
h1(tue)=(6+1)mod10=7;
h(wed)=23mod7=2;
h(thu)=20mod7=6 (與mon衝突)
h1(thu)=(6+1)mod10=7; (與tue衝突)
h2(thu)=(6+2)mod10=8;
h(fri)=6mod7=6; (與mon衝突)
h1(fri)=(6+1)mod10=7; (與tue衝突)
h2(fri)=(6+2)mod10=8; (與tue衝突)
h3(fri)=(6+3)mod10=9;
h(sat)=19mod7=5; (與sun衝突)
h1(sat)=(5+1)mod10=6; (與mon衝突)
h2(sat)=(5+2)mod10=7; (與tue衝突)
h3(sat)=(5+3)mod10=8; (與thu衝突)
h4(sat)=(5+4)mod10=9; (與fri衝突)
h5(sat)=(5+15)mod10=0;
由上可得構造雜湊表:01
2345
6789
satwed
sunmon
tuethu
fri611
1234
按查詢成功的平均查詢長度:
對於sun,查詢時所需的比較次數為1
對於mon,查詢時所需的比較次數為1
對於tue,查詢時所需的比較次數為2
對於wed,查詢時所需的比較次數為1
對於thu,查詢時所需的比較次數為3
對於fri,查詢時所需的比較次數為4
對於sat,查詢時所需的比較次數為6
根據等概率下查詢成功的平均查詢長度計算公式可得
計算查詢不成功的平均查詢長度:
雜湊函式值為0時,查詢不成功時的比較次數為2
雜湊函式值為1時,查詢不成功時的比較次數為1
雜湊函式值為2時,查詢不成功時的比較次數為2
雜湊函式值為3時,查詢不成功時的比較次數為1
雜湊函式值為4時,查詢不成功時的比較次數為1
雜湊函式值為5時,查詢不成功時的比較次數為7
雜湊函式值為6時,查詢不成功時的比較次數為6
由等概率下查詢不成功的平均查詢長度計算公式得:
【例題3】已知某雜湊表的裝填因子小於1,雜湊函式h(key)為關鍵字(識別符號)的第乙個字母在字母表當中的序號,處理衝突的方法為線性探測開放定址法。
一, 編寫按第乙個字母的順序輸出雜湊表中所有關鍵字的演算法。
二,編寫模擬手工計算等的概率情況下查詢不成功的平均查詢長度演算法。
實現步驟:
5 字母序號從1到26,持續上述步驟,則可得 個按字母序號輸出的所有關鍵字序列。
void printword(hsahtable ht) }}
雜湊表查詢 的 平均長度
將關鍵字序列 7 8 30 11 18 9 14 雜湊儲存到雜湊表中。雜湊表的儲存空間是乙個下標從0開始的一維陣列。雜湊函式為 h key key 3 mod 7,處理衝突採用線性探測再雜湊法,要求裝填 載 因子為0.7。1 請畫出所構造的雜湊表 2 分別計算等概率情況下查詢成功和查詢不成功的平均查...
資料結構 雜湊表查詢(雜湊表)
對於查詢,有順序表直接遍歷,有折半查詢直到查詢成功。但是這都需要不斷的比較,每一次查詢都需要重新遍歷,所以當資料龐大時是非常耗時的。雜湊表是一種可以避免多次比較,直接通過關鍵字就可以得到要查詢的記錄記憶體儲存位置。例如就像是乙個函式,每乙個自變數都對應著乙個函式值,即 這屬於雜湊技術,不需要比較就可...
資料結構 雜湊表(雜湊表)查詢
0 前言 順序表 乙個乙個挨個查詢 有序查詢 二分查詢方法 雜湊表查詢 記錄的儲存位置 f 關鍵字 雜湊技術是在記錄的儲存位置和他的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到固定值key的對映f key 若查詢集合中存在這個...