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;
}
私がこれに興味を持っているのは、同様のハッシュに関する以前の研究から恩恵を受けるアルゴリズムに関する論文を書いているからです。特に、このようなハッシュ アルゴリズムの衝突特性について何か知られていることがあれば、それは素晴らしいことです。
私が興味を持っているアルゴリズムは整数ベクトルをハッシュしますが、浮動小数点ベクトルの何かもクールです。
明確化
ハッシュは、高速なキー/値検索用のハッシュ テーブルで使用することを目的としています。ここにはセキュリティ上の懸念はありません。
望ましい答えは、このようなハッシュに対して特にうまく機能することが証明されている一連の定数のようなものです。疑似乱数ジェネレーターとして他のものよりもうまく機能する乗数とモジュロに似ています。
たとえば、線形合同疑似乱数発生器の定数のいくつかの選択は、最適なサイクル長を与え、計算しやすいモジュロを持つことが知られています。おそらく誰かが研究を行って、ベクトルハッシュ内の特定の乗法定数のセットとモジュロ定数が、近くの整数ベクトル間の衝突の可能性を減らすことができることを示しています。