String 字符串的哈希函数
我需要一个哈希函数来表示String 字符串的哈希函数,string,algorithm,hash,String,Algorithm,Hash,我需要一个哈希函数来表示 具有低碰撞率(即使对于短字符串) 可以快速计算(O(n)时间是必须的,但我希望它尽可能快) 给定hash(string1)和hash(string2),计算hash(append(string1,string2)) 可以在O(1)中完成 到目前为止,我能想到的最好的方法是:(在Java伪代码中) public static int[]HASH_ENTROPY=new int[]{…}//255个大素数 公共整数散列() int hash=0; for(int i=0;i
O(n)
时间是必须的,但我希望它尽可能快)hash(string1)
和hash(string2)
,计算hash(append(string1,string2))
可以在O(1)
中完成public static int[]HASH_ENTROPY=new int[]{…}//255个大素数
公共整数散列()
int hash=0;
for(int i=0;i
有更好的算法吗?这一个在#1和#3中表现很好,但我想知道
如果访问数组中的随机元素太慢。我建议您使用:
public uint32_t hash()
uint32_t hash = 0x1f351f35; // 2x Barker code
for (int i=0; i < this.array.length; i++) {
char c = this.array[i];
hash = ((hash << 1) | (hash >> 31)) + (HASH_ENTROPY[(uint8_t)(hash + c)] ^ c);
}
return hash;
public uint32\u t hash()
uint32\u t hash=0x1f351f35;//2x巴克码
for(int i=0;i31))+(hash_熵[(uint8_t)(hash+c)]^c);
}
返回散列;
我建议您使用:
public uint32_t hash()
uint32_t hash = 0x1f351f35; // 2x Barker code
for (int i=0; i < this.array.length; i++) {
char c = this.array[i];
hash = ((hash << 1) | (hash >> 31)) + (HASH_ENTROPY[(uint8_t)(hash + c)] ^ c);
}
return hash;
public uint32\u t hash()
uint32\u t hash=0x1f351f35;//2x巴克码
for(int i=0;i31))+(hash_熵[(uint8_t)(hash+c)]^c);
}
返回散列;
< /代码> ,如果需要快速计算时间,可以考虑另一个散列函数:
public uint32_t hash()
uint32_t hash = 0x1f351f35; // 2x Barker code
for (int i=0; i < this.array.length; i++) {
hash += (hash << 4) + this.array[i];
}
return hash;
public uint32\u t hash()
uint32\u t hash=0x1f351f35;//2x巴克码
for(int i=0;i hash=(hash ),如果需要快速计算时间,可以考虑另一个散列函数:
public uint32_t hash()
uint32_t hash = 0x1f351f35; // 2x Barker code
for (int i=0; i < this.array.length; i++) {
hash += (hash << 4) + this.array[i];
}
return hash;
public uint32\u t hash()
uint32\u t hash=0x1f351f35;//2x巴克码
for(int i=0;i hash+=(hash这与RSA和其他类似的方法没有什么不同,而不仅仅是“大”素数,你可以使用对很多事情都相对素数的素数(如3、17等)。我知道Ramanujan也提出了一个非常好的散列数(我想都想不到)该算法是顺序无关的,这意味着字谜将发生冲突;这似乎与欲望1相矛盾,尽管使用顺序相关的散列算法使欲望3变得如此之快很难。我真的不认为查找熵值的速度很重要,但另一方面,它们对你也没有多大帮助。@nikdepen For您使用哈希(安全或查找)的目的是什么?所需的哈希键长度是多少?@VikramBhat不是安全性,只是哈希映射lookup@rici字谜在应用程序中很少出现,所以我不担心它们。这与RSA和其他类似的方法没有什么不同,而不仅仅是“大”素数,您可以使用对很多事物都相对素数的素数(即3、17等)我知道Ramanujan也提出了一个非常好的散列数字(我想不起来了)该算法是顺序无关的,这意味着字谜将发生冲突;这似乎与欲望1相矛盾,尽管使用顺序相关的散列算法使欲望3变得如此之快很难。我真的不认为查找熵值的速度很重要,但另一方面,它们对你也没有多大帮助。@nikdepen For您使用哈希(安全或查找)的目的是什么?所需的哈希键长度是多少?@VikramBhat不是安全性,只是哈希映射lookup@rici字谜在应用程序中很少出现,所以我不担心它们。这很好,但比我给出的要慢4-5倍。使用此函数有什么实质性的好处吗?好处-可抵抗字谜哈希(“ab”)!=哈希(“ba”);雪崩效应,当输入数据中的更改1位会更改输出数据中约50%的位时。您将如何操作:给定hash(string1)
和hash(string2)
,计算hash(append(string1,string2))
可以在O(1)中完成。这很好,但速度比我给出的慢4-5倍。使用此函数有什么实质性的好处吗?好处-可抵抗字谜散列(“ab”)!=散列(“ba”);当输入数据中的更改1位会改变输出数据中约50%的位时,会产生雪崩效应。您将如何做:给定散列(string1)
和散列(string2)
,计算散列(append(string1,string2))
可以在O(1)中完成?