是否有任何已知的哈希算法可以输入一个 int 向量并输出一个与内积类似的单个 int?
换句话说,我正在考虑在 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;
}
我对此感兴趣,因为我正在写一篇关于算法的论文,该算法将受益于以前关于类似哈希的任何工作。特别是,如果对这样的哈希算法的冲突属性有任何了解,那就太好了。
我感兴趣的算法将散列整数向量,但浮点向量的一些东西也很酷。
澄清
哈希旨在用于哈希表中以进行快速键/值查找。这里没有安全问题。
所需的答案类似于一组常数,可证明对于这样的哈希特别有效 - 类似于乘数和模数,它比其他作为伪随机数生成器的效果更好。
例如,已知线性同余伪随机发生器的一些常数选择可提供最佳周期长度并具有易于计算的模数。也许有人做过研究,表明向量散列中的一组乘法常数以及一个模常数可以减少附近整数向量之间发生冲突的机会。