版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)計算機領(lǐng)域本科教育教學改革試點工作計劃(“101計劃”)研究成果10111.4散列查找第11章
查找11.4.1散列函數(shù)11.4.2散列沖突解決方法11.4.3散列查找算法11.4.4查找性能分析11.4.5分布式散列表11.4.6作業(yè)11.4.1散列函數(shù)11.4散列查找順序查找:O(n),平均約比較500次索引查找:由索引表決定4有沒有效率更高的算法?取給定學號的后三位,不需要經(jīng)過比較,便可直接從查找表中找到給定學生的記錄。關(guān)鍵字存儲地址映射關(guān)系11.4散列查找一般情況下,需在關(guān)鍵字與記錄在表中的存儲位置之間建立一個函數(shù)關(guān)系,以H(key)作為關(guān)鍵字為key的記錄在表中的位置,通常稱這個函數(shù)h(key)為散列函數(shù)。散列函數(shù)定義11.4散列查找11.4散列查找71)散列函數(shù)是一個映象,即:將關(guān)鍵字的集合映射到某個地址集合上,它的設(shè)置很靈活,只要這個地址集合的大小不超出允許范圍即可;11.4散列查找81)散列函數(shù)是一個映象,即:將關(guān)鍵字的集合映射到某個地址集合上,它的設(shè)置很靈活,只要這個地址集合的大小不超出允許范圍即可;2)由于散列函數(shù)是一個壓縮映象,因此,在一般情況下,很容易產(chǎn)生“沖突”現(xiàn)象,即:key1
key2,而h(key1)=h(key2)。H(key)=key%103)很難找到一個不產(chǎn)生沖突的散列函數(shù)。一般情況下,只能選擇恰當?shù)纳⒘泻瘮?shù),使沖突盡可能少地產(chǎn)生。因此,散列查找需要做兩方面事情:選擇一個“好”的散列函數(shù);提供一種“處理沖突”的方法。1)散列函數(shù)是一個映象,即:將關(guān)鍵字的集合映射到某個地址集合上,它的設(shè)置很靈活,只要這個地址集合的大小不超出允許范圍即可;2)由于散列函數(shù)是一個壓縮映象,因此,在一般情況下,很容易產(chǎn)生“沖突”現(xiàn)象,即:key1
key2,而h(key1)=h(key2)。11.4散列查找11.4散列查找散列表10根據(jù)設(shè)定的散列函數(shù)H(key)
和提供的處理沖突的方法,將一組關(guān)鍵字映象到一個地址連續(xù)的地址空間上,并以關(guān)鍵字在地址空間中的“象”作為相應(yīng)記錄在表中的存儲位置,如此構(gòu)造所得的查找表稱之為散列表。沖突處理C(key)地址空間存儲的數(shù)據(jù)集合稱為散列表11.4散列查找好的散列函數(shù)?11.4.1常見的散列函數(shù)散列函數(shù)11.4散列查找一般來說,一個好的散列函數(shù)應(yīng)滿足下列兩個條件:(1)計算簡單(2)沖突少12散列函數(shù)11.4散列查找常見的散列函數(shù)構(gòu)造方法有:直接散列函數(shù)數(shù)字分析法平方取中法折疊法除留余數(shù)法隨機數(shù)法1311.4散列查找散列地址010203……22……出生年份194919501951……1970……出生人數(shù)××××××××××××……××××……14H(key)=key+(-1948)解放后每年出生人數(shù)的統(tǒng)計:11.4散列查找散列地址010203……22……出生年份194919501951……1970……出生人數(shù)××××××××××××……××××……1)直接散列函數(shù):H(key)=key+(-1948)解放后每年出生人數(shù)的統(tǒng)計:取關(guān)鍵字本身或關(guān)鍵字的某個線性函數(shù)值作為散列地址,即:H(key)=key或H(key)=a*key+b(a,b為常數(shù))。11.4散列查找n=80,d=8,r=10,s=21,2,3,8位分布不均勻,不能取??扇〉?、6兩位組成的2位十進制數(shù)作為每個數(shù)據(jù)的散列地址,則圖中列出的關(guān)鍵字的散列地址分別為:45,72,84,03,28,39,51,65,1311.4散列查找設(shè)n個d位數(shù)的關(guān)鍵字,由r個不同的符號組成,此r個符號在關(guān)鍵字各位出現(xiàn)的頻率不一定相同,可能在某些位上均勻分布,即每個符號出現(xiàn)的次數(shù)都接近于n/r次,而在另一些位上分布不均勻。則選擇其中分布均勻的s位作為散列地址,即H(key)=“key中數(shù)字均勻分布的s位”172)
數(shù)字分析法n=80,d=8,r=10,s=21,2,3,8位分布不均勻,不能取??扇〉?、6兩位組成的2位十進制數(shù)作為每個數(shù)據(jù)的散列地址,則圖中列出的關(guān)鍵字的散列地址分別為:45,72,84,03,28,39,51,65,1311.4散列查找數(shù)據(jù)關(guān)鍵字(關(guān)鍵字)2散列地址(217~29)A01000010000010I11001210000210J12001440000440I011601370400370P120614310541310P220624314704314Q121614734741734Q221624741304741Q321634745651745183)平方取中法其中,所取的位數(shù)由散列表的大小確定取關(guān)鍵字平方后的中間幾位作為散列地址,即散列函數(shù)為:H(key)=“key2的中間幾位”11.4散列查找19以關(guān)鍵字的平方值的中間幾位作為存儲地址。求“關(guān)鍵字的平方值”的目的是“擴大差別”和“貢獻均衡”。即:關(guān)鍵字的各位都在平方值的中間幾位有所貢獻,Hash值中應(yīng)該有各位影子。平方取中法思想11.4散列查找關(guān)鍵字位數(shù)特別多,怎么辦?11.4散列查找關(guān)鍵字位數(shù)較長時,可將關(guān)鍵字分割成位數(shù)相等的幾部分(最后一部分位數(shù)可以不同),取這幾部分的疊加和(舍去高位的進位)作為散列地址。位數(shù)由存儲地址的位數(shù)確定。疊加時有兩種方法:移位疊加法,即將每部分的最后一位對齊,然后相加;邊界疊加法,即把關(guān)鍵字看作一紙條,從一端向另一端沿邊界逐次折疊,然后對齊相加。4)折疊法此方法適合于:關(guān)鍵字的數(shù)字位數(shù)特別多。11.4散列查找取關(guān)鍵字被某個不大于散列表長度m的數(shù)p除后的余數(shù)作為散列地址,即:H(key)=keyMODp(p≤m)22其中p的選擇很重要,如果選得不好會產(chǎn)生很多沖突。比如關(guān)鍵字都是10的倍數(shù),而p=10一般取小于表長的最大質(zhì)數(shù)5)除留余數(shù)法例p=2111.4散列查找選擇一個隨機函數(shù),取關(guān)鍵字的隨機函數(shù)值作為散列地址,即:H(key)=random(key)其中random為隨機函數(shù)。236)
隨機數(shù)法實際工作中需根據(jù)不同的情況采用不同的散列函數(shù)。通常需要考慮的因素有:計算散列函數(shù)所需時間;關(guān)鍵字的長度;散列表的大小;關(guān)鍵字的分布情況;記錄的查找頻率。11.4散列查找建立散列表如果遇到兩個相同關(guān)鍵字的情況怎么辦?有可能有兩個相同關(guān)鍵字嗎?11.4.2沖突處理11.4散列查找沖突:是指由關(guān)鍵字得到的Hash地址上已有其他記錄。好的散列函數(shù)可以減少沖突,但很難避免沖突。沖突處理:為出現(xiàn)散列地址沖突的關(guān)鍵字尋找下一個散列地址。11.4散列函數(shù)常見的沖突處理方法有:開放地址法再散列法鏈地址法公共溢出區(qū)法11.4散列函數(shù)為產(chǎn)生沖突的地址H(key)求得一個地址序列:H0,H1,H2,…,Hs
1≤s≤m-1其中:H0=H(key)Hi=(H(key)+di)MODm
i=1,2,…,s其中:Hi為第i次沖突的地址,i=1,2,…,s
H(key)為Hash函數(shù)值
m為Hash表表長
di
為增量序列1)開放地址法對增量di
有三種取法:1)線性探測再散列
di=c
i
最簡單的情況c=12)平方探測再散列
di=12,-12,22,-22,…,或者di=12,22,32,…3)隨機探測再散列
di
是一組偽隨機數(shù)列1)開放地址法11.4散列查找11.4散列查找29例表長為11的散列表中已填有關(guān)鍵字為17,60,29的記錄,
H(key)=keyMOD11,現(xiàn)有第4個記錄,其關(guān)鍵字為38,按三種處理沖突的方法,將它填入表中012345678910601729(1)H(38)=38MOD11=5沖突
H1=(5+1)MOD11=6沖突
H2=(5+2)MOD11=7沖突
H3=(5+3)MOD11=8不沖突38(2)H(38)=38MOD11=5沖突
H1=(5+12)MOD11=6沖突
H2=(5-12)MOD11=4不沖突38(3)H(38)=38MOD11=5沖突設(shè)偽隨機數(shù)序列為9,則:
H1=(5+9)MOD11=3不沖突382)再散列法將n個不同散列函數(shù)排成一個序列,當發(fā)生沖突時,由RHi確定第i次沖突的地址Hi。即:Hi=RHi(key)i=1,2,…,n其中:RHi為不同散列函數(shù)這種方法不會產(chǎn)生“聚類”,但會增加計算時間。11.4散列查找11.4散列查找31將所有散列地址相同的記錄都鏈接在同一鏈表中。01234560119822311685514
36
關(guān)鍵字集合為{19,01,23,14,55,68,11,82,36},散列函數(shù)為H(key)=keyMOD73)鏈地址法:假設(shè)某散列函數(shù)的值域[0,m-1],向量HashTable[0,m-1]為基本表,每個分量存放一個記錄,另設(shè)一個向量OverTable[0,v]為溢出表。將與基本表中的關(guān)鍵字發(fā)生沖突的所有記錄都填入溢出表中。如一組關(guān)鍵字序列為{19,14,23,01,68,20,84,27,55,11,10,79},散列函數(shù)為H(key)=keymod13,采用公共溢出區(qū)法得到的結(jié)果為:4)公共溢出區(qū)法11.4散列查找11.4.3散列表查找算法11.4散列查找在散列表上查找的過程和散列造表的構(gòu)造過程基本一致。1)給定K值,根據(jù)構(gòu)造表時所用的散列函數(shù)求散列地址j,2)若此位置無記錄,則查找不成功;否則比較關(guān)鍵字,若和給定的關(guān)鍵字相等則成功;否則根據(jù)構(gòu)造表時設(shè)定的沖突處理的方法計算“下一地址”,重復2)3311.4散列查找存在沖突檢測與處理的散列查找流程圖InputkPos=H(k)Pos==NULL?key==kfailsuccesscollisionYNYN沖突處理11.4散列查找關(guān)鍵字序列為:{19,14,23,01,68,20,84,27,55,11,10,79}散列函數(shù)為H(key)=keymod13采用線性探測處理沖突35Key=84散列地址H(84)=6,因為e.data[6]不空,且e.data[6].key=19≠84,沖突沖突處理H1=(6+1)MOD13=7,e.data[7]不空,且e.data[7].key=20≠84,沖突沖突處理H2=(6+2)MOD13=8,e.data[8]不空,且e.elem[8].key=84,查找成功,返回數(shù)據(jù)在散列表中的序號8。建立散列查找表如下:請查找關(guān)鍵字為84的記錄散列表查找與插入算法舉例11.4散列查找關(guān)鍵字序列為:{19,14,23,01,68,20,84,27,55,11,10,79}散列函數(shù)為H(key)=keymod13采用線性探測處理沖突36Key=38散列地址H(38)=12,因為e.data[12]不空,且e.data[12].key=10≠38,沖突沖突處理H1=(12+1)MOD13=0,由于e.data[0]沒有存放數(shù)據(jù),表明散列表中不存在關(guān)鍵字為38的記錄,查找失敗。建立散列查找表如下:請查找關(guān)鍵字為38的記錄散列表查找與插入算法舉例例題:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)190123145568若采用線性探測再散列處理沖突118236112136251請求出解決沖突的查找成功的ASL和查找失敗的ASL11.4散列查找例題:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)190123145568若采用線性探測再散列處理沖突118236112136251ASL(成功)=(1+1+2+1+3+6+2+5+1)/9=22/911.4散列查找例題:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)190123145568若采用線性探測再散列處理沖突118236112136251ASL(失敗)=?ASL(失?。?(9+8+7+6+5+4+3+2+1)/11=45/1111.4散列查找1901231468若采用二次探測再散列處理沖突55118236112131441例題:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)11.4散列查找1901231468若采用二次探測再散列處理沖突55118236112131441課堂練習:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)ASL(成功)=?ASL(成功)=(1+1+2+1+3+1+4+4+1)/9=211.4散列查找ASL(失敗)=?437654321001901231468若采用二次探測再散列處理沖突55118236112131441課堂練習:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)11.4散列查找190123145568若采用隨機數(shù)處理沖突,隨機數(shù)假設(shè)為9118236111115122課堂練習:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)11.4散列查找190123145568若采用隨機數(shù)處理沖突,隨機數(shù)假設(shè)為9118236111115122課堂練習:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)ASL(成功)=?ASL(成功)=(1+1+1+1+1+5+1+2+2)/9=5/311.4散列查找190123145568若采用隨機數(shù)處理沖突,隨機數(shù)假設(shè)為9118236111115122課堂練習:關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設(shè)定散列函數(shù)H(key)=keyMOD11(表長=11)35461521324ASL(失敗)=?ASL(失?。?(3+5+4+6+1+5+2+1+3+2+4)/11=36/1111.4散列查找將所有散列地址相同的記錄都鏈接在同一鏈表中。01234560119822311685514
36
鏈地址法:ASL(成功)=(6×1+2×2+3)/9=13/9ASL(失敗)=(4×1+2+3)/7=9/7關(guān)鍵字集合為{19,01,23,14,55,68,11,82,36},散列函數(shù)為H(key)=keyMOD711.4散列查找11.4散列查找查找性能分析一般情況下,可以認為選用的散列函數(shù)是“均勻”的,則在討論ASL時,可以不考慮散列函數(shù)的因素。例如:關(guān)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保山2025年保山市市直部分事業(yè)單位校園招聘44人筆試歷年參考題庫附帶答案詳解
- 2026江西贛州有色冶金研究所有限公司招聘11人備考題庫及1套參考答案詳解
- 2025云南省水利水電工程有限公司招聘2人備考題庫及一套答案詳解
- 2025山東勞動職業(yè)技術(shù)學院(山東勞動技師學院)招聘8人備考題庫及答案詳解一套
- 2026浙江臺州椒江工業(yè)投資集團有限公司招聘工作人員1人的備考題庫附答案詳解
- 2026廣東佛山市南海區(qū)獅山鎮(zhèn)英才學校物理、英語、語文、體育教師招聘4人備考題庫完整參考答案詳解
- 2026安徽六安市裕安區(qū)衛(wèi)健系統(tǒng)引進急需緊缺人才32人備考題庫附答案詳解
- 2025年漯河市農(nóng)業(yè)農(nóng)村局所屬事業(yè)單位人才引進3人備考題庫有答案詳解
- 2026江西南昌市昌南學校招聘派遣制教師1人備考題庫及答案詳解(新)
- 2026江蘇常州人才科創(chuàng)集團有限公司招收就業(yè)見習人員備考題庫及一套答案詳解
- 企業(yè)競爭圖譜:2024年運動戶外
- 肺癌中西醫(yī)結(jié)合診療指南
- 高壓氣瓶固定支耳加工工藝設(shè)計
- 寵物服裝采購合同
- 攜程推廣模式方案
- THHPA 001-2024 盆底康復管理質(zhì)量評價指標體系
- JGT138-2010 建筑玻璃點支承裝置
- 垃圾清運服務(wù)投標方案(技術(shù)方案)
- 光速測量實驗講義
- 斷橋鋁合金門窗施工組織設(shè)計
- 新蘇教版六年級科學上冊第一單元《物質(zhì)的變化》全部教案
評論
0/150
提交評論