設(shè)計(jì)構(gòu)造哈希表的完整算法,求出平均查找長(zhǎng)度_第1頁(yè)
設(shè)計(jì)構(gòu)造哈希表的完整算法,求出平均查找長(zhǎng)度_第2頁(yè)
設(shè)計(jì)構(gòu)造哈希表的完整算法,求出平均查找長(zhǎng)度_第3頁(yè)
設(shè)計(jì)構(gòu)造哈希表的完整算法,求出平均查找長(zhǎng)度_第4頁(yè)
設(shè)計(jì)構(gòu)造哈希表的完整算法,求出平均查找長(zhǎng)度_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、程序設(shè)計(jì)與算法分析實(shí)驗(yàn)報(bào)告一 設(shè)計(jì)的目的與內(nèi)容1.設(shè)計(jì)目的通過(guò)本實(shí)驗(yàn)需要掌握構(gòu)造哈希函數(shù)表,需要完成設(shè)計(jì)構(gòu)造哈希表的 完整算法,并求出平均查找長(zhǎng)度。2 實(shí)驗(yàn)內(nèi)容使用哈希函數(shù):H(K)=3*K MOD 11 并采用開(kāi)放地址法解決沖突,試在0到10的散列地址空間對(duì)關(guān)鍵字序列( 22, 41, 53, 46, 30,13, 01,67)構(gòu)造哈希函數(shù)表,并設(shè)計(jì)構(gòu)造哈希表的完整算法,并求出平均查找長(zhǎng)度。二 算法的基本思想1. 數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)哈希函數(shù) H ( key ) =3* key mod 11,哈希表的地址空間為 0 10,對(duì)關(guān)鍵字序列( 22, 41, 53, 46, 30,13, 01,67)按

2、線性探測(cè)再散列和二次探測(cè)再散列的方法分別構(gòu)造哈希表。 ( 1 )線性探測(cè)再散列: 3*22 11 = 0; 3*41 11=2 ; 3*53 11 = 5 ;3* 46%11=6;3*30%11=2發(fā)生沖突,下一個(gè)存儲(chǔ)地址( 2 1 ) 11 3 ;3*13%11=6發(fā)生沖突,下一個(gè)存儲(chǔ)地址( 6 1 ) 11 7 ;3*01%11=3發(fā)生沖突,下一個(gè)存儲(chǔ)地址( 3 1 ) 11 4 ;3*67%11=3發(fā)生沖突,下一個(gè)存儲(chǔ)地址是:( 3 1 ) 11 4 發(fā)生沖突; 下一個(gè)存儲(chǔ)地址( 4 + 1 )%11=5發(fā)生沖突; 下一個(gè)存儲(chǔ)地址( 5 + 1 )%11=6發(fā)生沖突;下一個(gè)存儲(chǔ)地址( 6

3、+ 1 )%11=7發(fā)生沖突;下一個(gè)存儲(chǔ)地址( 7 + 1 )%11=8未發(fā)生沖突。2.算法的基本思想 開(kāi)放地址法 這個(gè)方法的基本思想是:當(dāng)發(fā)生地址沖突時(shí),按照某種方法繼續(xù)探測(cè)哈希表中的其他存儲(chǔ)單元,直到找到空位置為止。這個(gè)過(guò)程可用下式描述: H i ( key ) = ( H ( key )+ d i ) mod m ( i = 1,2, , k ( k m 1) 其中: H ( key ) 為關(guān)鍵字 key 的直接哈希地址, m 為哈希表的長(zhǎng)度, di 為每次再探測(cè)時(shí)的地址增量。 采用這種方法時(shí),首先計(jì)算出元素的直接哈希地址 H ( key ) ,如果該存儲(chǔ)單元已被其他元素占用,則繼續(xù)查看

4、地址為 H ( key ) + d 2 的存儲(chǔ)單元,如此重復(fù)直至找到某個(gè)存儲(chǔ)單元為空時(shí),將關(guān)鍵字為 key 的數(shù)據(jù)元素存放到該單元。 增量 d 可以有不同的取法,并根據(jù)其取法有不同的稱呼: ( 1 ) d i 1 , 2 , 3 , 線性探測(cè)再散列; ( 2 ) d i 12 , 12 , 22 , 22 , k2, -k2 二次探測(cè)再散列;( 3 ) d i 偽隨機(jī)序列 偽隨機(jī)再散列; 三 源程序代碼及測(cè)試結(jié)果1. 源程序代碼#include<iostream.h>#include<iomanip.h>#define M 11#define N 8struct hte

5、rmint key; /關(guān)鍵字值int si; /散列次數(shù);struct hterm hlistM;int i,adr,sum,d;int xN=22,41,53,46,30,13,1,67; /關(guān)鍵字賦值float average;void chash() /創(chuàng)建哈希表for (i=0;i<M;i+)hlisti.key=0;hlisti.si=0;for (i=0;i<N;i+) sum=0;adr=(3*xi)%M;d=adr;if (hlistadr.key=0)hlistadr.key=xi;hlistadr.si=1;elsedo /沖突處理d=(d+1)%M;sum=

6、sum+1;while (hlistd.key!=0);hlistd.key=xi;hlistd.si=sum+1;void dhash() /輸出哈希表cout <<" 哈希表地址:"for(i=0;i<M;i+)cout << setw(4) <<i;cout << endl;cout<<"哈希表關(guān)鍵字:"for (i=0;i<M;i+)cout<< setw(4) << hlisti.key;cout << endl;cout <<

7、; " 搜索長(zhǎng)度:"for (i=0;i<M;i+)cout << setw(4) << hlisti.si;cout << endl;average=0;for (i=0;i<M;i+)average=average+hlisti.si;average=average/N;cout << "平均搜索長(zhǎng)度: ASL("<< N <<")="<< average << endl;void main()chash();dhash()

8、; 2. 測(cè)試結(jié)果3. 存在的問(wèn)題及解決解決方法:struct htermint key; /關(guān)鍵字值int si; /散列次數(shù)“”后面少了一個(gè)“; ”。四 分析與討論( 1 )線性探測(cè)再散列: 22 11 = 0; 41 11=8 ; 53 11 = 9 ; 46%11=2;30%11=7;13%11=2發(fā)生沖突,下一個(gè)存儲(chǔ)地址( 2 1 ) 11 3 ;01%11=1;67%11=1發(fā)生沖突,下一個(gè)存儲(chǔ)地址是:( 1 1 ) 11 2 發(fā)生沖突; 下一個(gè)存儲(chǔ)地址( 2 + 1 )%11=3發(fā)生沖突; 下一個(gè)存儲(chǔ)地址( 3 + 1 )%11=4未發(fā)生沖突。五 心的體會(huì)在這次數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中遇到了很多實(shí)際性的問(wèn)題,在實(shí)際設(shè)計(jì)才發(fā)現(xiàn),書(shū)本上理論性的東西和在實(shí)際運(yùn)用中的還是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論