這是一個前綴散列函數。我想計算這種方法中的碰撞次數,但我不知道如何去做。看起來這可能很簡單,但我只是想不出一個偉大的方式做到這一點....如何計算這個散列函數中的衝突?
int HashTable_qp::preHash(string & key, int tableSize)
{
string pad = "AA";
//some words in the input are less than 3 letters
//I choose to pad the string with A because all padded characters
//have same ascii val, which is low, and will hopefully alter the results less
if (key.length() < 3)
{
key.append(pad);
}
return (key[0] + 27 * key[1] + 729 * key[2]) % tableSize;
}
創建一個直方圖unsigned [tablesize],生成一些(所有)可能的字符串並計算它們的hashval,並相應地更新直方圖histogram [hashval] + = 1; – wildplasser
@wildplasser,這將是最簡單的方法。我的答案會更快。如果這不是性能問題,我會選擇** wild的**想法。 (您應該將其作爲答案發布,以幫助其他人在找到該頁面時找到它。) – FakeRainBrigand