数字の順列に依存しない整数に対して、必ずしも固定長ではなく、一意のハッシュを生成するためのアルゴリズムが必要です。
同様に、123、321、312、213...のハッシュは同じである必要があります。(先行ゼロは無視してください)
私が試したのは、すべての桁をそれ自体に上げて合計することでした。好き、
Hash(321) = 3**3 + 2**2 + 1**1
さて、それが衝突を引き起こすかどうかはわかりませんし、確かに、多数のパフォーマンスの問題があります。代替案はありますか?
1つのオプション:数字を並べ替えます。123、321、312、および213はすべて123に移動します。
別のオプション:各桁のカウントのベクトルをハッシュとして使用します。123、321、312、および213はすべて[0,1,1,1,0,0,0,0,0,0]に移動します。
必要なのは、ハッシュ関数(md5を使用してみましょう)と、物事を相互に結合する方法だけです。各桁のハッシュを取得し、可換法でそれらを結合します。たとえば、md5と加算を選択した場合、各桁をmd5して、結果のハッシュを追加できます。代わりにsha1と乗算を使用することを選択した場合、異なる結果が得られますが、それでも必要なプロパティがあります。衝突の問題はもっと難しいです...
アルゴリズムとしてクロスサムを使用するだけです