2013-04-17 122 views
0

大家好我有一個大問題,我的散列函數。我試圖解釋我的問題:碰撞散列函數

我有一組字符,我想做一個哈希函數,因爲我想用哈希集更改集,對於每個字符我有一個​​索引,所以我現在做什麼:

對 - >索引p = 1個索引= 2索引i = 3指數R = 4 --->所以我的散列返回1234

但如果例如我有

so - > index s = 12 index o = 34 - > hash 123 4

COLLISION !!!!

P.S.我不能爲了我的字母數字字符....

那麼,有沒有任何人能幫助我嗎?非常感謝:)

+0

這就是爲什麼你不應該設計自己的散列。使用現有的廣泛使用的,如md5/sha1有什麼問題? –

+0

通常情況下,字符會與一些很好的選定數字相乘,這些數字通常會被異或,但是您不會這麼做......典型的多位數學專家需要一個月來開發哈希算法。 – rekire

+0

還因爲我有一個整數數字在我的設置,如果我必須做to_string然後傳遞價值MD5/SHA1太多昂貴:( –

回答

0

你可以嘗試的Java的字符串散列函數。這是我的C#端口,應該簡單地移植到C++:

int javaHash(String txt) { 
    uint h = 0; 
    if(txt.Length > 0) { 
     for(int i = 0; i < txt.Length; i++) { 
      h = 31 * h + txt[i]; 
     } 
    } 
    return (int)h; 
} 
+0

什麼是包[i] ?? –

+0

錯誤的命名變量。固定。 – rekire