是否有已知的哈希算法可将整数向量作为输入并输出单个整数,类似于内积的工作方式?
换句话说,我在考虑一种哈希算法,在C++中可能看起来像这样:
// For simplicity, I'm not worrying about overflow, and assuming |v| < 7.
int HashVector(const vector<int>& v) {
const int N = kSomethingBig;
const int w[] = {234, 739, 934, 23, 828, 194}; // Carefully chosen constants.
int result = 0;
for (int i = 0; i < v.size(); ++i) result = (result + w[i] * v[i]) % N;
return result;
}
我对此很感兴趣,因为我正在撰写一篇关于算法的论文,需要借鉴类似哈希的先前工作。特别是,如果已知这样一个哈希算法的碰撞属性,那就太棒了。
我感兴趣的算法将对整数向量进行哈希,但是对浮点向量进行哈希也很酷。
澄清
该哈希旨在用于哈希表以进行快速键/值查找。 这里没有安全问题。
期望的答案类似于一组常数,可以证明在这样的哈希中特别有效 - 类比于乘法器和模数,它们作为伪随机数生成器比其他选择更好。
例如,某些线性同余伪随机数生成器的常数选择已知可提供最佳周期长度并具有易于计算的模数。 也许有人已经研究表明,在向量哈希中使用某个乘法常数集合以及一个模数常数,可以减少相邻整数向量之间发生碰撞的机会。