【问题标题】:Collision Hash Function碰撞哈希函数
【发布时间】:2013-04-17 15:18:18
【问题描述】:

大家好,我的哈希函数有一个大问题。我试着解释我的问题:

我有一组字符,我想做一个散列函数,因为我想用散列集更改集合,对于每个字符我都有一个索引,所以我现在做什么:

pair --> index p = 1 index a = 2 index i = 3 index r= 4---> 所以我的哈希返回1234

但如果我有

so --> 索引 s = 12 索引 o = 34 ---> 哈希 1234

碰撞!!!!

附: : 我不能按字母数字排序我的字符....

那么,有没有人可以帮助我?非常感谢:)

【问题讨论】:

  • 这就是为什么你不应该设计自己的哈希。使用现有的广泛使用的方法有什么问题,例如 md5/sha1?
  • 通常这些字符与一些经常被异或的好选择的数字相乘,但你什么也不做……典型的多个数学专家需要一个月的时间来开发一个哈希算法。
  • 因为我的集合中还有整数,如果我必须做 to_string 然后将值传递给 md5/sha1 太贵了:(
  • 构建哈希比转换更昂贵。根据您的数据结构,您可以简单地散列结构的内存。所以你不需要转换任何东西。
  • 不,不相信我...构建哈希仅对大脑来说更昂贵:) 我尝试使用 md5/sha1/superFast...

标签: hash integer collision hashset hash-function


【解决方案1】:

你可以试试 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;
}

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 2010-11-16
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多