版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
9.2靜態(tài)查找表9.3動態(tài)查找樹表9.4哈希表9.1基本概念第九章查找表無序——有序(順序查找表——有序表)線性——非線性(靜態(tài)查找樹表)靜態(tài)——動態(tài)(動態(tài)查找樹表)二叉——多叉(B樹)內(nèi)存——外存(B樹)關(guān)鍵字為單位——以組成關(guān)鍵字的字符為單位(鍵樹)利用關(guān)鍵字之間的關(guān)系——利用關(guān)鍵字本身特性(哈希表)
一、哈希(Hash)表是什么?二、哈希函數(shù)的構(gòu)造方法三、處理沖突的方法
四、哈希表的查找9.3哈希表以上兩節(jié)討論的各種查找表的共同特點:一、哈希(Hash)表是什么?數(shù)據(jù)元素在表中的位置與關(guān)鍵字有關(guān),但是這種關(guān)系是不確定的。準考證號姓名各科成績總分政治語文外語數(shù)學物理化學生物...179321179322179333..145321...陳紅陸華張平...張平...847685...76...768488..64....746573...75...938779...88...876962...66...765763...67...877178...81...635455..73準考證號姓名政治語文外語數(shù)學物理化學生物總分物理地址80108230824082508700關(guān)鍵字存放位置用這類方法表示的查找表,其平均查找長度都不為零。對不同的查找表,差別僅在于:關(guān)鍵字與給定值進行比較的次序不同。查找的過程為:將給定值依次與關(guān)鍵字集合中各個關(guān)鍵字進行比較,查找的效率取決于和給定值進行比較的關(guān)鍵字個數(shù)。只有一個辦法:預先知道所查關(guān)鍵字在表中的物理存儲位置,對于頻繁使用的查找表,希望ASL=0即,要求:數(shù)據(jù)元素在表中位置和其關(guān)鍵字之間存在一種確定的關(guān)系。
哈希查找的基本思想:以查找表中的每個元素的關(guān)鍵字key為自變量,通過一種函數(shù)H(key)計算出函數(shù)值,把這個值
解釋為一塊連續(xù)存儲空間的地址單元,并將該元素直接存儲到這個地址單元中。這種函數(shù)H(key)就稱為哈希(Hash)函數(shù)。在哈希表上進行查找時,首先根據(jù)給定的關(guān)鍵字key,用哈希函數(shù)H(key)計算出存儲地址,然后按此地址直接取出對應的元素。如果以學號的后三位000~999作為每個元素的存儲地址,建立順序查找表。
例1:為某校每年招收的1000名新生建立一張查找表,其關(guān)鍵字為學號,其值的范圍為xx000~xx999(前兩位為年份)。則查找過程可以簡單進行:取給定值(學號)的后三位,不需要經(jīng)過比較便可直接從順序表中找到待查關(guān)鍵字。此時的哈希函數(shù)H(key)=key{Zhao,Qian,
Sun,Li,Wu,Chen,Han,Ye,Deng}
例2:對于如下9個關(guān)鍵字設哈希函數(shù)f(key)=
(關(guān)鍵字的第一個字母的序號)/2ChenZhaoQianSunLiWuHanYeDeng問題:
若添加關(guān)鍵字Zhou,沖突,怎么辦?能否找到另一個哈希函數(shù)?1234567891011121314151617181920212223242526ABCDEFGHIJKLMNOPQRSTUVWXYZ1)哈希函數(shù)是一個映象,即:
將關(guān)鍵字的集合映射到某個地址集合上,
條件是這個映射的地址集合的大小不超出某個允許的范圍;從前面兩個例子可見,2)由于哈希函數(shù)是一個壓縮映象,因此,在一般情況下,很容易產(chǎn)生“沖突”現(xiàn)象,即:key1key2
但:f(key1)=f(key2)。3)很難找到一個不產(chǎn)生沖突的哈希函數(shù)。一般情況下,只能選擇恰當?shù)墓:瘮?shù),使沖突盡可能少地產(chǎn)生。因此,在構(gòu)造這種特殊的“查找表”時,除了需要選擇一個“好”(盡可能少產(chǎn)生沖突)的哈希函數(shù)之外;還需要找到一種“處理沖突”的方法。哈希表的定義:根據(jù)設定的哈希函數(shù)H(key)
和所選中的處理沖突的方法,將一組關(guān)鍵字映象到一個有限的、連續(xù)的地址空間
(區(qū)間)上,并以關(guān)鍵字在地址空間中的“象”作為相應數(shù)據(jù)元素在表中的存儲位置,如此構(gòu)造所得的查找表稱之為“哈希表”。
一、哈希表是什么?二、哈希函數(shù)的構(gòu)造方法三、處理沖突的方法
四、哈希表的查找9.3哈希表二、構(gòu)造哈希函數(shù)的方法
對類型為數(shù)字的關(guān)鍵字有下列構(gòu)造方法:1.
直接定址法3.平方取中法5.除留余數(shù)法4.折疊法2.數(shù)字分析法哈希函數(shù)為關(guān)鍵字的線性函數(shù)
H(key)=key
或者
H(key)=akey+b1.
直接定址法
此法僅適合于:關(guān)鍵字分布基本連續(xù)的情況,且此時
地址集合的大小=關(guān)鍵字集合的大小地址010203…22…年份194919501951…1972…人數(shù)……120000…750000…H(key)=key+(-1948)地址010203…22…年份194919501951…1972…人數(shù)……120000…750000…此方法僅適合于:
能預先估計出全體關(guān)鍵字的每一位上各種
數(shù)字出現(xiàn)的頻度。2.
數(shù)字分析法假設關(guān)鍵字集合中的每個關(guān)鍵字都是由s位數(shù)字組成(u1,u2,…,us),分析關(guān)鍵字,并從中提取分布均勻的若干位或它們的組合作為地址。例:哈希表長100,取關(guān)鍵字中的2位數(shù)字作為地址。81346542813726328138091781372487814465378131370781432875
①②③④⑤⑥⑦⑧
……54639148537087存儲地址以關(guān)鍵字的平方值的中間幾位作為存儲地址.求“關(guān)鍵字的平方值”的目的是“擴大差別”3.平方取中法此方法適合于:
關(guān)鍵字中的每一位都有某些數(shù)字重復出現(xiàn)頻度很高的現(xiàn)象。關(guān)鍵字(字母)
關(guān)鍵字(數(shù)字)
(關(guān)鍵字)2
哈希表地址
A01000010000
010
I11001210000
210
J12001440000
440
I111611347921347
P120614310542
314
Q121614734741734
Q221624745651
745將關(guān)鍵字分割成若干部分,然后取它們的疊加之和為哈希地址。有兩種疊加處理的方法:移位疊加和間界疊加。4.折疊法此方法適合于:
關(guān)鍵字的數(shù)字位數(shù)特別多,所需地址位數(shù)較少。國際圖書號編碼0-442-20586-458644220+)0410088H(key)=008858640224+)046092H(key)=60925.除留余數(shù)法
設定哈希函數(shù)為:H(key)=keyMODp其中,
p≤m(表長)
例如:表長m=11,取p=11,則關(guān)鍵字集合
{19,01,24,17,54,68,11,82,37}
被映射為:
8136102054
如何取p?m?例如:已知關(guān)鍵字集合
{12,39,18,24,33,21}
1672010
p
應為不大于m的素數(shù)或不含20以下的質(zhì)因子
(2,3,5,7,11,13,17,19)因為,p=9中含質(zhì)因子3,
故所有含質(zhì)因子3的關(guān)鍵字均映射到“3的倍數(shù)”的地址上,從而增加了“沖突”的可能。如果取p=9:330663如果取p=11:
實際構(gòu)造哈希表時,采用何種哈希函數(shù)取決于建表的關(guān)鍵字集合的情況(包括關(guān)鍵字的范圍和形態(tài)),總的原則是:使映射分布盡可能均勻,使產(chǎn)生沖突的可能性降到盡可能地小。
一、哈希表是什么?二、哈希函數(shù)的構(gòu)造方法三、處理沖突的方法
四、哈希表的查找9.3哈希表三、處理沖突的方法
“處理沖突”的實際含義是:為產(chǎn)生沖突的地址尋找下一個空的哈希地址1.開放定址法2.鏈地址法為產(chǎn)生沖突的地址H(key)求下一個哈希地址,如果該地址還沖突,則再給出下一個地址,由此得到一個地址序列:
H0,H1,H2,…,Hs
1≤s≤m-1其中:H0=H(key)Hi=(H(key)+
di
)MODm
i=1,2,…,s1.開放定址法對增量di
有三種取法:1)線性探測再散列
di=ci2)平方探測再散列
di=12,-12,22,-22,…,3)隨機探測再散列di
是一組偽隨機數(shù)列
或者di=i×Hh(key)(又稱雙散列函數(shù)探測)Hi=(H(key)+
di
)MODm,i=1,2,…,s1)線性探測再散列
di=ci
最簡單的情況c=1例如:
關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設定哈希函數(shù)H(key)=keyMOD11(表長=11)190123145568118236112136251二次聚集能否增加表長?怎樣查找?能否解決沖突?Hi=(H(key)+
di
)MODm,i=1,2,…,s設定哈希函數(shù)H(key)=keyMOD11(表長=11)190123145568118236112136251查找成功時的平均查找長度ASL成功=(1+1+2+1+3+6+2+5+1)/9=22/9查找不成功時的平均查找長度:ASL不成功=(1+2+3+4+5+6+7+8+9)/11=36/11
假定不成功時,產(chǎn)生每一個哈希地址的概率相等。2)平方探測再散列
di=12,-12,22,-22,…,190123146855118236例如:
關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設定哈希函數(shù)H(key)=keyMOD11(表長=11)112121413Hi=(H(key)+
di
)MODm,i=1,2,…,s190123146855118236設定哈希函數(shù)H(key)=keyMOD11(表長=11)112121413Hi=(H(key)+
di
)MODm,i=1,2,…,s查找成功時的平均查找長度:ASL成功=(1+1+2+1+2+1+4+1+3)/9=16/9能否解決沖突?2)平方探測再散列
di=12,-12,22,-22,…,01515例如:
關(guān)鍵字集合
{5,01,15,7,20}設定哈希函數(shù)H(key)=keyMOD
5(表長=5)Hi=(H(key)+
di
)MODm,i=1,2,…,s
012347表長應是一個值為4k+3
的質(zhì)數(shù),其中k是一個整數(shù)。如3,7,11,19,23,31,43,59,127,251,503,…能否增加表長?3)隨機探測再散列
di
是一組偽隨機數(shù)列
或者
di=i×Hh(key)(又稱雙散列函數(shù)探測)例如:
關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}設定哈希函數(shù)H(key)=keyMOD
11(表長=11)
設Hh(key)=(3key)MOD10+1190123145568118236211121213Hi=(H(key)+
di
)MODm,i=1,2,…,s三、處理沖突的方法
“處理沖突”的實際含義是:為產(chǎn)生沖突的地址尋找下一個空的哈希地址1.開放定址法2.鏈地址法將所有哈希地址相同的記錄都鏈接在同一鏈表中。
2.鏈地址法0123456111982685514360123ASL成功=(6×1+2×2+3)/9=13/9例如:關(guān)鍵字集合,{19,01,23,14,55,68,11,82,36}
哈希函數(shù)為H(key)=keyMOD7ASL不成功=(1×4+2+3)/7=9/7容量限制嗎?可以動態(tài)擴展嗎?查找成功時的平均查找長度:ASL成功=(1+1+2+1+2+1+4+1+3)/9=16/9ASL成功=(1+1+2+1+3+6+2+5+1)/9=22/9ASL成功=(2+1+1+1+2+1+2+1+3)/9=14/9線性探測:平方探測:隨機探測:二叉平衡樹:ASL成功=(4+4+3+3+3+3+2+2+1)/9=25/9關(guān)鍵字集合
{19,01,23,14,55,68,11,82,36}ASL成功=(1+1+1+1+1+1+2+2+3)/9=13/9鏈地址法:例:在地址空間為0-16的散列區(qū)中,對以下關(guān)鍵字序列構(gòu)造兩個哈希表:{Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec}
(1)用線性探測開放定址法處理沖突; (2)用鏈地址法處理沖突;并分別求這兩個哈希表在等概率情況下查找成功和查找不成功的平均查找長度。
設哈希函數(shù)為H(x)=i/2,其中i為關(guān)鍵字中第一個字母在字母表中的序號。121111245256Aug012345678910111213141516JanFebMarAprMayJuneJulySepOctNovDecASL成功=31/12ASL不成功=46/14Aug012345678910111213JanFebMarAprMayJuneJulySepOctNovDecASL成功=18/12ASL不成功=12/14
例題:
已知長度為12的表:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)ASL=(1×1+2×2+3×3+4×3+5×2+6×1)/12=42/121.二叉排序樹2.有序表,排序后采用折半查找ASL=(1×1+2×2+3×4+4×5
)/12=37/123.平衡二叉排序樹ASL=(1×1+2×2+3×4+4×4+5×1
)/12=38/12
一、哈希表是什么?二、哈希函數(shù)的構(gòu)造方法三、處理沖突的方法
四、哈希表的查找,插入和刪除9.3哈希表查找過程和造表過程一致。假設采用開放定址處理沖突,則查找過程為:
四、哈希表的查找
對于給定值K,計算哈希地址Hi=H(K)若r[Hi].key=NULL
則查找不成功若
r[Hi].key=K
則查找成功否則“求下一地址Hi”,直至
r[Hi].key=NULL(查找不成功)
或
r[Hi].key=K(查找成功)為止。inthashsize[]={251,503,997,...};
//一個素數(shù)序列typedefstruct{ElemType*elem;//數(shù)據(jù)元素存儲基址
intcount;//當前數(shù)據(jù)元素個數(shù)
intsizeindex;
//hashsize[sizeindex]為當前容量}HashTable;#defineSUCCESS1#defineUNSUCCESS0#defineDUPLICATE-1//---開放定址哈希表的存儲結(jié)構(gòu)---StatusHashSearch(HashTableH,KeyTypeK,int&p,int&c)
{//p指示待查數(shù)據(jù)元素K在表中的位置,c為沖突計數(shù)
}//SearchHashp=Hash(K);
//求得哈希地址while(H.elem[p].key!=NULL&&
//該位置有記錄
!EQ(K,H.elem[p].key))//且不等于K
collision(p,++c);
//處理沖突,求得下一探查地址pif(EQ(K,H.elem[p].key))returnSUCCESS;
//查找成功,返回待查數(shù)據(jù)元素位置pelsereturnUNSUCCESS;//查找不成功,
//返回插入位置p查找算法StatusInsertHash(HashTable&H,Elemtypee){c=0;if(HashSearch(H,e.key,p,c)==SUCCESS)returnDUPLICATE;
//表中已有與e有相同關(guān)鍵字的元素elseif(c<hashsize[H.sizeindex]/2){//沖突次數(shù)c未達到上限,(閥值c可調(diào))
H.elem[p]=e;++H.count;returnOK;
//查找不成功時,返回p為插入位置
}
elseRecreateHashTable(H);
//重建哈希表}//InsertHash插入算法//將待刪除位置用探測序列//的下一個關(guān)鍵字順序遞補.StatusDeleteHash(HashTable&H,Elemtypee){}//DeleteHash
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 2 Shopping Lesson2(說課稿)-2024-2025學年北師大版(三起)英語四年級上冊
- 2024年三年級品社下冊《馬路不是游戲場》說課稿 山東版
- 2024-2025學年高中地理 第4章 旅游與區(qū)域的發(fā)展 第1節(jié) 旅游業(yè)的發(fā)展及其對區(qū)域的影響說課稿 中圖版選修3
- Unit 1 Growing up 單元說課稿-2024-2025學年高中英語外研版(2019)選擇性必修第二冊
- 下城區(qū)汽車租賃合同范本
- 保安獎罰合同范例
- 醫(yī)用耗材寄售合同范例
- 加貿(mào)合同范本
- 專利注冊合同范本
- 人工智能購銷合同范例
- 河南2025年河南職業(yè)技術(shù)學院招聘30人筆試歷年參考題庫附帶答案詳解
- 2025年長沙穗城軌道交通有限公司招聘筆試參考題庫含答案解析
- 2024年湖南有色金屬職業(yè)技術(shù)學院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2025年山東華魯海運有限公司招聘筆試參考題庫含答案解析
- 《民營企業(yè)清廉建設評價規(guī)范》
- 銀川經(jīng)濟技術(shù)開發(fā)區(qū)2024年綜合考核評價指標表及評分細則
- 品管圈PDCA改善案例-降低住院患者跌倒發(fā)生率
- 讀書分享《給教師的建議》課件
- 《中小學校園食品安全和膳食經(jīng)費管理工作指引》專題講座
- 廣東省茂名市2023-2024學年高一上學期物理期末試卷(含答案)
- 沙發(fā)市場需求與消費特點分析
評論
0/150
提交評論