資料結構記錄 雜湊法實驗

2021-07-09 06:54:49 字數 1496 閱讀 9795

home

web board

problemset

standing

status

statistics

time limit: 1 sec  

memory limit: 128 mb

submit: 1008  

solved: 310 [

submit][

status][

web board]

雜湊法中,雜湊函式構造方法多種多樣,同時對於同一雜湊函式解決衝突的方法也可以不同。兩者是影響查詢演算法效能的關鍵因素。

在此用以下雜湊函式來實現字串雜湊值的計算。

h(key) = (s[0] * 31^(n – 1) + s[1] * 31 ^ (n – 2) + ….. + s[n – 1] * 31 ^ 0) % mod;

此處 ^ 代表乘方,s[i] 代表字元的ascii值

用二次探測再雜湊的方法處理衝突hi = ( h(key) + di ) % mod

di=1,-1,4,-4,9, -9, 16, -16… 注:輸入必須保證衝突處理所取的步長小於(1 << 31)

input

樣例包含多組,到eof結束。

對於每組樣例,第一行輸入兩個數n和mod (其中1 <= n <= 1000,n < mod <= 2000且mod為素數,字串長度小於1000),n和mod分別表示字串個數和模。

接下來n行,每行乙個只含有小寫字母的字串。

樣例包含多組,到eof結束。

對於每組樣例,第一行輸入兩個數n和mod (其中1 <= n <= 1000,n < mod <= 2000且mod為素數,字串長度小於1000),n和mod分別表示字串個數和模。

接下來n行,每行乙個只含有小寫字母的字串。

依次輸出每個關鍵字在hash函式中的儲存下標序列(按照雜湊值從小到大輸出字串)。

5 11rgfslwdrzmiugiobmernjumq

5 4 6 2 3

雜湊值計算過程中要注意取模,防止溢位

可能用到的兩個取模公式:(a + b) % mod = (a % mod + b % mod) % mod

(a – b) % mod = (a % mod – b % mod + mod) % mod [

submit][

status][

web board]

#include#include#includeusing namespace std;

#define m 10005

typedef string keytype;

typedef struct

hashtable;

long long int pow(int a,int b,int mod)

return x;

}int h(string s,int mod)

for(int i=0; icout<}

}

資料結構實驗 雜湊表

time limit 1000ms memory limit 65536k 有疑問?點這裡 在n個數中,找出出現次數最多那個數字,並且輸出出現的次數。如果有多個結果,輸出數字最小的那乙個。單組資料,第一行數字n 1 n 100000 接下來有n個數字,每個數字不超過100000000 出現次數最多的...

資料結構實驗 雜湊表

time limit 1000ms memory limit 65536k 有疑問?點這裡 在n個數中,找出出現次數最多那個數字,並且輸出出現的次數。如果有多個結果,輸出數字最小的那乙個。單組資料,第一行數字n 1 n 100000 接下來有n個數字,每個數字不超過100000000 出現次數最多的...

資料結構實驗 雜湊表

j 資料結構實驗 雜湊表 description 在n個數中,找出出現次數最多那個數字,並且輸出出現的次數。如果有多個結果,輸出數字最小的那乙個。input 單組資料,第一行數字n 1 n 100000 接下來有n個數字,每個數字不超過100000000 output 出現次數最多的數字和次數。sa...