第七章——查詢
一、查詢的基本概念有:
(1)查詢表
(2)關鍵字
(3)查詢
(4)動態查詢表和靜態查詢表
(5)平均查詢長度
二、線性表的查詢
1、順序查詢
(1)資料型別定義
typedef keytype int;//view code這個根據具體情況去定義;在這裡定義為int;
typedef
struct
elemtype;
typedef
struct
sstable;
(2)順序查詢
intview codesearch_seq(sstable st,keytype key)
}
2、折半查詢(順序儲存切表中關鍵字有序)
其**為
int search_bin(sstable st,keytype key) //view code在順序表st中順序查詢關鍵字等於key的資料
元素。若找到,則函式值為該元素在表中的位
置,若找不到則為0
return0;
}
三、樹表的查詢
1、二叉排序樹的查詢:
bstnode* search(bstree t ,keytype x) //view code定義函式
2、平衡二叉樹:左子樹和右子樹的深度之差的絕對值不超過1; 左子樹和右子樹也是平衡二叉樹。
3、b-樹和b+樹: b-樹解決了資料量大時的查詢,而b+樹則在b-樹的基礎上解決了區間查詢問題。
四、雜湊表的查詢
1、主要研究問題
(1)如何構造雜湊函式
(2)如何處理衝突
2、好的雜湊函式的規則
(1)函式計算要簡單,每一關鍵字只能由乙個雜湊位址與之對應
(2)函式的值域須在表長的範圍內,計算出的雜湊位址的分布應均勻,盡可能減少衝突
3、方法:
①數字分析法——必須明確知道所有關鍵字每一位上的各種數字的分布情況。實際應用:同意出版社的圖書,isbn前幾位相同,用數字分析法時,排除isbn的前幾位
②平方取中法——適用於 不了解關鍵字的所有情況,或難於直接從關鍵字中找到取值比較分散的幾位 的情況
③摺疊法——雜湊位址位數較少,關鍵字位數較多,且難於直接從關鍵字中找到取值比較分散的幾位
④除留取餘法——h(key) = key%p p一般取小於表長的最大質數
實際應用過程中,衝突很難完全避免處理衝突的方法:
① 開放位址法 hi=(h(key)+di)%m
ⅰ 線性探測法 di=1,2,3,……,m-1
ⅱ 二次探測法 di=1²,-1²,2²,-2²,3²,……,+k²,-k² (k<=m/2)
ⅲ 偽隨機探測法 注意將造表時的隨機序列記錄,用於查表
② 鏈位址法
把具有相同雜湊位址的記錄放在同乙個單鏈表中,m個雜湊位址就有m個單鏈表,同時用ht[0…m-1]存放鍊錶的頭指標,凡是雜湊位址為i的記錄都以結點方式插入到以ht[i]為頭節點的單鏈表中
五、總結:
這個章節的難度並不大,更注重於邏輯上的分析,只要能將各種問題分好類,然後用恰當的方法去解決,就不會有什麼大的問題。在學習中遇到最大的問題就是概念越來越多了,可能會因此混淆,然後對自己的記憶產生影響。對於之前的目標,我感覺現在自己打**的能力有所提公升,希望以後的能力能更進一步。
第七章 查詢
1 在雜湊表中,所謂同義詞就是具有相同雜湊位址的兩個元素。2分 f 我覺得本題應該是錯的 首先應該兩個不同元素,然後是得到同一雜湊位址 2 即使把2個元素雜湊到有100個單元的表中,仍然有可能發生衝突。2分 t 本題主要是考察雜湊 hash 函式是可以改變的,衝突的選擇是根據函式的選取 3 將m個元...
第七章 查詢技術
第7章 查詢技術 學習重點 折半查詢的過程及效能分析 二叉排序樹的插入 刪除和查詢操作 平衡二叉樹的調整方法 雜湊表的構造和查詢方法 各種查詢技術的時間效能及對比。學習難點 二叉排序樹的刪除操作 平衡二叉樹的調整方法 閉雜湊表的刪除演算法。7.1 概述 7.11 查詢的基本概念 在查詢問題中,通常將...
python第七章 python教程(第七章)
字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...