1、設隨機Hash表的長度為n=8。設Hash碼為i=mod(k*0.618,n)。將關鍵字元素序列(19,31,20,45,01,11,25,26)填入隨機Hash表,並註明沖突次數。
①計算關鍵字k的Hash碼i0=i(k)。且令i=i0。
②偽隨機數序列初始化,令j=1(即將取隨機數指針指向偽隨機數序列中的第1個隨機數)。
③檢查表中第i項的內容:若第i項為空,則將關鍵字k及有關信息填入該項;若第i項不空,則令i=mod(i0+ RN(j),n),並令j=j+1(即將取隨機數指針指向下壹個隨機數),轉③繼續檢查。其中RN(j)表示偽隨機數序列RN中的第j個隨機數。
如圖為取隨機數的方法。
則過程為:
用取隨機數的方法取得隨機數。
可以用c++自動計算:
代碼如下:
#include<iostream>using?namespace?std;
main()
{int?n?=?8,R?=?1;
int?RN[8],j;
for(j=1;j<=n;j++)
{
R=(5*R)%(4*n);
RN[j]=int(R/4);
cout<<RN[j]<<endl;?
}
}
結果為:1,6,7,4,5,2,3,0
看不清的點擊下載excel
2.設線性Hash表的長度n=12,分別用下列Hash碼將關鍵字元素序列(09,12,04,16,19,31,20,45,01,11,25,26)填入線性Hash表,並指出各關鍵字元素在填入過程中的沖突次數。
(1)i=mod(k,n)
(2)i=mod(k*0.618,n)
答:(1)i=mod(k,n)
(2)i=mod(k*0.618,n)