1
我想爲字符串實現兩個不同的散列函數。 但我有問題,有時散列值爲0. 有了這個我不能使用散列函數,因爲我想實現雙散列並且必須實現這個函數:hash_func1(string s)+ i * hash_func2(string s)通過散列表。 但是如果一個散列函數是0,沒有任何變化,我得到一個無限循環。 這是用於散列表中的碰撞檢測。 我需要兩個不同的通用哈希函數來做到這一點。字符串的通用散列函數
我已經嘗試了不同的哈希函數,但無法找到任何有效的工具。
任何人都可以幫我解決這個問題嗎?
這是我嘗試過的一些功能。
int h = 0 , r1 = 31415 , r2 = 27183;
for (int i =0; i < key.length(); i ++) {
h = (r1 * h + key.charAt (i)) % capacity ;
r1 = r1 * r2 % (capacity -1);
}
return h ;
或者這一個
int seed = 131;
long hash = 0;
for(int i = 0; i < key.length(); i++)
{
hash = (hash * seed) + key.charAt(i);
}
return (int) (hash % capacity);
這不適合我。你能給我看一個正確的字符串通用散列函數嗎? – user1058712 2013-05-14 08:43:00
這不適合你嗎?你能擴展嗎?準確應用的邏輯保持次要值不爲零。如果你需要兩個值不爲零,只需再次應用相同的邏輯。 – ChrisCM 2013-05-14 15:11:25