0

別々の処理段階で(GoogleのCityHashを使用して)ulongにハッシュされる2つの文字列があり、ハッシュ衝突のリスクを大幅に増加させることなく、2つのハッシュを新しいハッシュに結合する必要があります。

XORにはいくつかの問題(Value ^ 0 = Valueなど)があることは知っていますが、2つの入力値がすでに十分に分散されているはずなので、次のようにハッシュを組み合わせることができると思います。

ulong hash = hash1 ^ hash2; // hash1 and hash2 are ulong hashes of strings

このアプローチに何か問題がありますか、それとも大幅な計算オーバーヘッドを追加しないより良いアプローチがありますか?

4

2 に答える 2

1

Boostライブラリは、これをかなり簡単な方法で実行します。

おそらく64ビットで黄金数を計算する必要があります。

計算は次のようになります。

ulong hash = hash1 ^ ( hash2 + 0x9e3779b9 + (hash1 << 6) + (hash1 >> 2);

数0x9e3779b9は2^32/phiだと思います。ファイは黄金比です。無理数による除算は、決定論的な方法で「ランダム性」を追加しようとします。

于 2012-12-11T00:11:47.293 に答える
1

@GregSのコメントと私自身のさらなる読書に基づいて、私は単純なXORを使用してハッシュ分布を深刻に劣化させていないと信じています.

それが最も賢明と思われるアプローチです。

于 2012-12-13T00:56:47.407 に答える