我有一个长度为 1 到 5 的字符串,需要以良好的性能和最小的冲突对其进行散列。有什么建议么?(我不需要安全)
问问题
519 次
2 回答
0
你有linux吗?试试/bin/gperf
它从一个键集中生成一个完美的散列函数。
于 2013-11-05T17:05:49.827 回答
0
根据您的情况,您可能对所需的哈希类型有某些需求。但是,如果您需要的只是将它们分开的东西,那么std::hash()
确实会浮现在脑海中……
另一种选择是:
long long hash(const std::string &val) {
long long hash = 0;
memcpy(reinterpret_cast<char*>(&hash), val.c_str(), std::min(sizeof(hash), val.length());
return hash;
}
对上述代码中的任何错误类型表示歉意,它尚未被编译或测试。这具有最小的碰撞(无),我猜性能相当不错,而且质量不太好。我所说的质量是指彼此接近的值的分离以及整个键空间的使用。
当然,还有一系列常规加密哈希函数可供选择,但我从您的问题中得出结论,这些不是您的目标。
于 2013-11-05T17:27:47.590 回答