資料結構實驗之查詢七:線性之雜湊表
time limit: 1000 ms memory limit: 65536 kib
problem description
根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h(key)=key%p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。
input
連續輸入多組資料,每組輸入資料第一行為兩個正整數n(n <= 1500)和p(p >= n的最小素數),n是關鍵字總數,p是hash表長度,第2行給出n個正整數關鍵字,數字間以空格間隔。
output
輸出每個關鍵字在hash表中的位置,以空格間隔。注意最後乙個數字後面不要有空格。
sample input
5 521 21 21 21 21
4 524 15 61 88
4 524 39 61 15
5 524 39 61 15 39
sample output
1 1 1 1 1
4 0 1 3
4 0 1 2
4 0 1 2 0
線性探測解決雜湊表的衝突;
平方探測法沒有線性探測法 找的仔細,兩者相比:線性探測能找到的,平方探測不一定能找到;
線性探測每次d加1,平方探測是j++ d = j*j ; 仔細一看應該可以看出兩者探測精度,明顯線性探測的精度更高~,比平方探測更加仔細;
線性探測查詢的仔細,速度慢, 平方探測查詢的沒有線性探測的仔細,但是比線性探測查詢的速度快;
我們那最後乙個例子作為說明
n = 5 p = 5
24 39 61 15 39
t = 24 % 5 = 4;
所以hash[4] = 24;
t = 39 % 5 = 4,衝突,但是二者的數字是不同的,所以進入while(hash[t%p]!=-1)t++;
t = 4,由於4這個位置儲存了24這個數字,所以t++,t = 5;
t % 5 == 0,0沒有被儲存,所以0輸入,並且把39存進hash[0]中
其餘資料類似。
對於21 21 21;
hash[0]儲存了,之後21進來,還是1,但是x = hash[j];所以正好儲存位置和j一樣,直接輸出
#includeusing namespace std;
int main()
else
}if(flag == 0)///沒有在上述儲存的資料中找到重複的,進行下面的;
}if(i == n - 1)
cout
cout<<" ";}}
return 0;
}
資料結構實驗之查詢七 線性之雜湊表
time limit 1000ms memory limit 65536k 有疑問?點這裡 根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h key key p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。連續輸入多組資料,每組輸入...
資料結構實驗之查詢七 線性之雜湊表
根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h key key p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。連續輸入多組資料,每組輸入資料第一行為兩個正整數n n 1000 和p p n的最小素數 n是關鍵字總數,p是hash...
資料結構實驗之查詢七 線性之雜湊表
time limit 1000ms memory limit 65536k 有疑問?點這裡 根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式h key key p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。連續輸入多組資料,每組輸入...