0

我有一个长度为 1 到 5 的字符串,需要以良好的性能和最小的冲突对其进行散列。有什么建议么?(我不需要安全)

4

2 回答 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 回答