Hash 冲突哈希函数

Hash 冲突哈希函数,hash,integer,collision,hashset,hash-function,Hash,Integer,Collision,Hashset,Hash Function,大家好,我的哈希函数有一个大问题。我试图解释我的问题: 我有一组字符,我想做一个散列函数,因为我想用散列集更改集合,对于每个字符我都有一个索引,所以我现在要做的是: 成对-->索引p=1索引a=2索引i=3索引r=4-->因此我的哈希返回1234 但如果我有 所以-->索引s=12索引o=34-->散列1234 碰撞 我不能按字母顺序排列我的字符 那么,有人能帮我吗??非常感谢:)您可以尝试Java的字符串哈希功能。这是我的C#端口,应该简单地移植到C++: int-javaHash(字符串tx

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

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

成对-->索引p=1索引a=2索引i=3索引r=4-->因此我的哈希返回1234

但如果我有

所以-->索引s=12索引o=34-->散列1234

碰撞

我不能按字母顺序排列我的字符


那么,有人能帮我吗??非常感谢:)

您可以尝试Java的字符串哈希功能。这是我的C#端口,应该简单地移植到C++:

int-javaHash(字符串txt){
uint h=0;
如果(txt.Length>0){
for(int i=0;i
这就是为什么您不应该设计自己的散列。使用现有的广泛使用的字符(如md5/sha1)有什么不对?通常,字符会与一些选择良好的数字相乘,这些数字通常会被XOR,但您不会这样做。。。典型的多位数学专家需要一个月的时间来开发哈希算法。因为我的集合中也有整数,如果我必须对字符串执行操作,然后将值传递给md5/sha1,那么代价太高:(构建哈希比转换更昂贵。根据您的数据结构,您可以简单地对结构的内存进行哈希。因此您不需要转换任何内容。不,不,相信我……构建哈希只对大脑更昂贵:)我尝试使用md5/sha1/superFast。。。