資料結構實驗之查詢七 線性之雜湊表

2021-09-26 04:53:18 字數 1397 閱讀 7384

資料結構實驗之查詢七:線性之雜湊表

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表中的同一位置。連續輸入多組資料,每組輸入...