![數(shù)據(jù)結(jié)構(gòu)-基于C++語言(微課版) 課件 1-1 散列表_第1頁](http://file4.renrendoc.com/view5/M00/07/2B/wKhkGGZegMOAe3n4AAB3CC93Wik018.jpg)
![數(shù)據(jù)結(jié)構(gòu)-基于C++語言(微課版) 課件 1-1 散列表_第2頁](http://file4.renrendoc.com/view5/M00/07/2B/wKhkGGZegMOAe3n4AAB3CC93Wik0182.jpg)
![數(shù)據(jù)結(jié)構(gòu)-基于C++語言(微課版) 課件 1-1 散列表_第3頁](http://file4.renrendoc.com/view5/M00/07/2B/wKhkGGZegMOAe3n4AAB3CC93Wik0183.jpg)
![數(shù)據(jù)結(jié)構(gòu)-基于C++語言(微課版) 課件 1-1 散列表_第4頁](http://file4.renrendoc.com/view5/M00/07/2B/wKhkGGZegMOAe3n4AAB3CC93Wik0184.jpg)
![數(shù)據(jù)結(jié)構(gòu)-基于C++語言(微課版) 課件 1-1 散列表_第5頁](http://file4.renrendoc.com/view5/M00/07/2B/wKhkGGZegMOAe3n4AAB3CC93Wik0185.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
散列表的基本概念;散列函數(shù)的設(shè)計方法;處理沖突的方法。本節(jié)目錄:本節(jié)內(nèi)容:散列表散列表
散列表
什么是查找?
確定待查找值k在存儲結(jié)構(gòu)中的位置。有哪些查找技術(shù)?
順序查找、折半查找、二叉排序樹查找等技術(shù)都是通過一系列的給定值與關(guān)鍵碼的比較,查找效率依賴于查找過程中進(jìn)行的給定值與關(guān)鍵碼的比較次數(shù)。關(guān)鍵碼可以直接確定存儲位置?
在記錄的存儲地址和它的關(guān)鍵碼之間建立一個確定的對應(yīng)關(guān)系散列表
散列的基本思想:在記錄的存儲地址和它的關(guān)鍵碼之間建立一個確定的對應(yīng)關(guān)系。這樣,不經(jīng)過比較,一次讀取就能得到所查元素的查找方法。3關(guān)鍵碼集合kiriH(ki)…………H散列表
散列表:采用散列技術(shù)將記錄存儲在一塊連續(xù)的存儲空間中,這塊連續(xù)的存儲空間稱為散列表,可以用一維數(shù)組來描述。關(guān)鍵碼集合kiriH(ki)…………H散列表散列表
散列函數(shù):將關(guān)鍵碼映射為散列表中適當(dāng)存儲位置的函數(shù)。關(guān)鍵碼集合kiriH(ki)…………H散列表散列函數(shù)散列表
散列地址:由散列函數(shù)所得的存儲地址。關(guān)鍵碼集合kiriH(ki)…………H散列表散列函數(shù)散列地址下標(biāo)散列表
由于在散列表中記錄的存儲位置是根據(jù)關(guān)鍵碼和散列函數(shù)計算所得,因此散列表并不支持范圍查找,例如,散列表不支持查找關(guān)鍵碼最大、最小、大于等于某值、小于等于某值等范圍查找。散列表最適合的問題是,散列表中哪個記錄的關(guān)鍵碼等于待查找的關(guān)鍵碼值。散列技術(shù)在計算機(jī)領(lǐng)域具有廣泛的應(yīng)用,例如信息加密、數(shù)據(jù)校驗、負(fù)載均衡等。對于兩個不同的關(guān)鍵碼ki≠kj,有H(ki)=H(kj),即兩個不同的記錄需要存儲到同一個散列地址中,這種現(xiàn)象稱為沖突。ki和kj相對于H稱做同義詞。沖突太多會降低查找效率,因此要設(shè)計一個均勻、存儲利用率高的散列函數(shù),即散列函數(shù)計算出來的地址應(yīng)能均勻分布在整個地址空間中。但是沖突難以避免。散列查找中最關(guān)鍵的兩個問題為散列函數(shù)的設(shè)計和沖突的處理。散列函數(shù)
散列函數(shù)設(shè)計原則:散列函數(shù)的定義域必須包括需要存儲的全部數(shù)據(jù)元素的關(guān)鍵字,而如果散列表允許有m個地址時,其值域必須在0到m-1之間;散列函數(shù)計算出來的地址應(yīng)能均勻分布在整個地址空間中,若key是從關(guān)鍵字集合中隨機(jī)抽取的一個關(guān)鍵字,散列函數(shù)應(yīng)能以同等概率取0到m-1中的每一個值;散列函數(shù)應(yīng)是簡單的,能在較短的時間內(nèi)計算出結(jié)果。散列函數(shù)
散列函數(shù)——直接定址法
0123456789103050708090散列函數(shù)
散列函數(shù)——數(shù)字分析法分析關(guān)鍵碼,例如前幾位數(shù)字大體相同的一組學(xué)號,如果選用前幾位數(shù)字構(gòu)造散列地址,則出現(xiàn)沖突的概率較大。如選擇差別較大的幾位數(shù)字構(gòu)造散列地址,則沖突的概率會明顯降低。找出數(shù)字的規(guī)律,利用這些數(shù)據(jù)來構(gòu)造沖突較少的散列地址。例:關(guān)鍵碼為8位十進(jìn)制數(shù),散列地址為2位十進(jìn)制數(shù)81346
5
3
281372
2
4281387
4
2281301
3
6781322
8
1781338
9
67①②③④⑤⑥⑦⑧散列函數(shù)
散列函數(shù)——除留余數(shù)法
1470147014散列地址56494235282114關(guān)鍵碼例:若取p=21,產(chǎn)生了大量沖突散列表
在構(gòu)造散列表的過程中,在存儲關(guān)鍵碼對應(yīng)的記錄時,如果H(key)已經(jīng)被占用,則必須另外再尋找一個空閑的位置來存儲記錄。采用不同的處理沖突的方法,就會得到不同的散列表。常用的處理沖突的方法有開地址方法和鏈地址方法。散列表
處理沖突的方法——開放定址法由關(guān)鍵碼得到的散列地址一旦產(chǎn)生了沖突,就去尋找下一個空的散列地址,并將記錄存入。使用開放定址法構(gòu)造的散列表稱為閉散列表。如何尋找下一個空的散列地址?線性探測法二次探測法隨機(jī)探測法散列表
線性探測法當(dāng)發(fā)生沖突時,從沖突位置的下一個位置起,依次尋找空的散列地址。假設(shè)對于關(guān)鍵碼key,H(key)=d,閉散列表的長度為m,則線性探測法尋找下一個空閑位置的公式為:Hi=(H(key)+di)
%
m
(di=1,2,?,m?1)例:關(guān)鍵碼集合為{47,7,29,11,16,92,22,8,3},散列表表長為11,散列函數(shù)為H(key)=keymod11,用線性探測法處理沖突,則散列表為:47729111692292222883333堆積:在處理沖突的過程中出現(xiàn)的非同義詞之間對同一個散列地址爭奪的現(xiàn)象。012345678910線性探測法散列表
二次探測法當(dāng)發(fā)生沖突時,尋找下一個散列地址的公式為:
Hi=(H(key)+di)%m,di=12,-12,22,-22,…,q2,-q2
且q≤m/2例:關(guān)鍵碼集合為{47,7,29,11,16,92,22,8,3},散列表表長為11,散列函數(shù)為H(key)=keymod11,用線性探測法處理沖突,則散列表為:4772911169229222288333012345678910散列表
雙散列法使用雙散列方法處理沖突時,需要兩個散列函數(shù)。第一個散列函數(shù)Hash()按數(shù)據(jù)元素的關(guān)鍵字key計算出數(shù)據(jù)元素存放地址。一旦發(fā)生沖突,利用第二個散列函數(shù)ReHash()計算出數(shù)據(jù)元素下一地址,它的取值與key的值有關(guān),應(yīng)小于地址空間的大小。散列表
散列表
處理沖突的方法——鏈地址法解決沖突的另一種方法稱為開散列法,也稱為鏈地址法、拉鏈法?;舅枷霝椋簩⑺械耐x詞的記錄存儲為一個單鏈表,稱為同義詞子表,散列表存儲的是同義詞子表的頭指針。使用鏈地址方法處理沖突構(gòu)造的散列表稱為開散列表。開散列表不會出現(xiàn)堆積現(xiàn)象。散列表
例:關(guān)鍵碼集合{47,7,29,11,16,92,22,8,3},散列函數(shù)為H(key)=keymod11,用拉鏈法處理沖突,構(gòu)造的開散列表為:012345678910
11∧∧∧∧∧∧
22
47∧
3
92∧
16∧
7∧
29
8∧散列表
處理沖突的方法——鏈地址法解決沖突的另一種方法稱為開散列法,也稱為鏈地址法、拉鏈法?;舅枷霝椋簩⑺械耐x詞的記錄存儲為一個單鏈表,稱為同義詞子表,散列表存儲的是同義詞子表的頭指針。使用鏈地址方法處理沖突構(gòu)造的散列表稱為開散列表。開散列表不會出現(xiàn)堆積現(xiàn)象。散列表
散列表的裝載因子是散列表中的記錄數(shù)n和散列表表長m的比值,可表示為:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年成都房產(chǎn)預(yù)約買賣居間服務(wù)合同
- 2025年公司租賃共享協(xié)議模板
- 2025年報廢汽車收購與再利用諒解協(xié)議
- 2025年建筑工人雇傭合同樣本
- 2025年建設(shè)銀行二手住房貸款合同
- 2025年全球研發(fā)合作與專利授權(quán)合同范本
- 2025年工程退款協(xié)議書模板下載
- 2025年專業(yè)清潔服務(wù)勞動合同范本
- 2025年分公司之間業(yè)務(wù)合作與分工的策劃協(xié)議
- 2025年交通工具抵債協(xié)議
- 2024年總經(jīng)理助理年終工作總結(jié)(3篇)
- 2024年考研英語(二)真題及參考答案
- 山西省太原市2023-2024學(xué)年高二上學(xué)期期末物理試題(含答案)
- 幼兒園園安全培訓(xùn)
- 沖突礦產(chǎn)課件教學(xué)課件
- 三甲醫(yī)院臨床試驗機(jī)構(gòu)-44 V00專業(yè)組SOP目錄
- 酒店工作安全培訓(xùn)(共60張課件)
- 2024年委托招商代理合同經(jīng)典版(三篇)
- 03S702鋼筋混凝土化糞池-標(biāo)準(zhǔn)圖集
- 自我保護(hù)-保護(hù)自己勇敢說不
- 安全設(shè)施檢查維護(hù)保養(yǎng)記錄表
評論
0/150
提交評論