我做了一个简单的散列函数(如果它可以被称为一个),它将一个字符串转换为一个双精度。
它的工作原理是取第一个字符的值并将其转换为双倍,然后将其与下一个字符的余弦相乘,然后与下一个字符的余弦相乘,依此类推......
这是功能:
double hash (string str) {
double hash = (double)str[0];
for (int i = 1; i < str.length(); i++) {
hash *= cos((double)str[i]);
}
return hash;
}
那么如何计算这个函数中的碰撞概率呢?
我找到了一个公式,它是 1 - e^(k(k-1)/(2k)),但从我读到的内容,它只有在哈希函数是一个好的函数时才有效(它均匀地分布哈希值,就像一个好的 RNG , 或类似的东西)。