一、考試內容:
1,查找方法的分類;
查找表(Search Table):由同一類型的數據元素(或記錄)構成的集合。
主要分爲以下幾種類型:
- 靜態查找表(Static Search Table) 查詢、檢索;
- 動態查找表(Dynamic Search Table) 插入刪除;
- 散列查找:利用哈希函數,通過計算求取待查元素的存儲地址。散列查找在散列表中進行。
2,各類查找表常用的查找方法;
1,順序查找(Sequential Search) 當靜態查找表採用順序表或線性鏈表表示時,使用順序查找。
2,折半查找(Binary Search) 折半查找方法使用時有一個前提條件,即:靜態查找表必須是有序表(按由小到大,或者由大到小的順序)。也叫二分查找,是一種效率很高的查找方法。
int Search_bin(SSTable ST,KeyType key) {
low=1; high=ST.length;//置區間初值
while(low<=high)
{ mid=(low+high)/2;
if EQ(key,ST.elem[mid].key) return mid;
//找到待查元素
else if LT(key,ST.elem[mid].key) high=mid-1;
//繼續在前半區間進行查找
else low=mid+1; //繼續在後半區間進行查找
}
return 0; //順序表中不存在待查元素
}//Search_bin
查找過程可以用二叉樹來描述。樹中每個結點表示表中一個記錄,結點中的值爲該記錄在表中的位置,通常稱這個二叉樹爲判定樹。
找到有序表中任何一個記錄的過程就是走了一條從根結點到該記錄相應的結點的路徑,和給定值進行比較的關鍵字個數恰爲該結點在判定樹上的層次數。 折半查找在查找成功時和給定值進行比較的關鍵字個數至多爲 。樹深
折半查找的優點是比較的次數少,查找比順序查找快。但這種速度是以預先對記錄按關鍵字大小排序爲代價的。另外,由於存儲結構必須是數組,因此對經常要進行插入和刪除操作的表,不宜採用這種方法。
3,分塊查找 分塊查找時要求靜態查找表以索引順序表存儲,因此又稱爲索引順序查找,是對順序查找的一種改進方法,性能介於順序查找和折半查找之間。
找過程分兩步進行:1)、首先確定待查的結點屬於哪一塊,即查找所在的塊。2)、然後在塊內查找欲查找的結點。
4,動態查找: 二叉排序樹和二叉平衡樹
二叉排序樹的插入
插入的原則爲:若二叉排序樹爲空,則插入結點作爲新的根結點,否則繼續在其左子樹或右子樹中進行查找,直到某個葉子結點,則插入結點應爲該葉子結點的左子樹或右子樹。
一個無序序列可以通過構造一棵二叉排序樹而變成一個有序序列,構造樹的過程就是進行排序的過程。
含有n個結點的二叉排序樹的平均查找長度和樹的形態有關。
平衡二叉樹:它或者是一棵空樹,或者是具有下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的深度之差的絕對值不超過1,又稱爲AVL樹。
則調整該子樹的規律可歸納爲下列四種情況:
- 1)LL型平衡旋轉(單向右旋平衡處理)
- 2)RR型平衡旋轉(單向左旋平衡處理)
- 3)LR型平衡旋轉(雙向旋轉,先左後右)
- 4)RL型平衡旋轉(雙向旋轉,先右後左)
5,哈希表及其查找
哈希函數又叫散列函數,它是一種能把關鍵字映射成記錄存儲地址的函數。
哈希表:通過哈希函數構造而成的表稱爲哈希表。
記錄按地址存放到文件空間中相應的位置上,就形成了哈希表,也稱散列表。構成哈希表的過程稱爲地址散列。
解決衝突即爲對應到同一地址的多個同義詞安排存儲位置。因此在選定散列函數時應該考慮儘量避免發生衝突。衝突是很難避免的,問題在於一旦發生了衝突應如何處理。
構造哈希函數的常用方法:直接定址法;數字分析法;平方取中法;摺疊法;除留餘數法;隨機數法
選取哈希函數時需要考慮的因素:①計算哈希地址所需要的時間 ②關鍵字的長度 ③哈希表的大小
④關鍵字的分佈情況 ⑤記錄的查找頻率
解決衝突的方法:
1,開放地址法 ——線性探測法;二次探測再散列 ;隨機探測再散列
2,再哈希法 Hi=RHi(key) i=1,2,……,k
3,鏈地址法 把具有相同散列地址的關鍵字存放在同一個鏈表中,稱爲同義詞表。同時用數組T存放各個鏈表的頭指針。凡是散列地址爲i的記錄都以結點方式插入到以T[i]爲頭指針的單鏈表中。第一次出現衝突的關鍵字稱爲同義詞,但是解決完衝突後,又出現衝突時不是同義詞。
4,建立一個公共的溢出區(分離的同義詞子表)
平均查找長度依賴於哈希表的裝填因子。 裝填因子: 其中n爲表中填入的記錄數;m爲哈希表的長度。
散列線性地址法:
散列鏈式地址法:查找成功————橫着看;查找失敗————豎着看;
裝填因子和P值確定。
折半查找判定樹:
折半查找判定樹實際上是一棵二叉排序樹,它的中序序列是一個有序序列。可以在樹結點上依次填上相應的元素,符合折半查找規則的樹即是所求。
折半查找既可以向上取整,也可以向下取整,但是一個折半查找判定樹中只能用一種取整方式。
情況一:當剩餘查找個數爲偶數的時候,在樹中表現爲對應節點左邊的子節點總數比右邊子節點總數多一個。
情況二:當需要判斷的節點還剩兩個的時候,剩下的一個節點必須是用於比較的節點的左孩子。
二、考試要求:
瞭解動態查找表和靜態查找表的邏輯結構定義,
掌握靜態查找表的三類查找方法的思想,對數據元素的要求、數據元素的存儲結構,平均查找長度。
掌握二叉排序樹的定義及構造方法,二叉樹的平衡化處理。
掌握散列表的定義及創建散列表的方法,以及查找散列表的方法。