2013-04-17 171 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