本文介绍了C#中字符串的快速散列函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想对长度不超过 30 的字符串进行哈希处理.如果我关心时间,那么最好的做法是什么.该函数将被调用超过 1 亿次.目前我正在使用以下代码,
I want to hash a string of length up-to 30. What will be the best idea to do that if time is my concern. The function will be called over 100 million times. currently I am using the following code,
static UInt64 CalculateHash(string read, bool lowTolerance)
{
UInt64 hashedValue = 0;
int i = 0;
while (i < read.Length)
{
hashedValue += read.ElementAt(i) * (UInt64)Math.Pow(31, i);
if (lowTolerance) i += 2;
else i++;
}
return hashedValue;
}
推荐答案
static UInt64 CalculateHash(string read)
{
UInt64 hashedValue = 3074457345618258791ul;
for(int i=0; i<read.Length; i++)
{
hashedValue += read[i];
hashedValue *= 3074457345618258799ul;
}
return hashedValue;
}
这是一个 Knuth 哈希.您也可以使用 Jenkins.
This is a Knuth hash. You can also use Jenkins.
这篇关于C#中字符串的快速散列函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!