これはよく聞かれますが、ベクトルのサイズが既にわかっていて、文字や整数に繰り返しがない場合はどうなるでしょうか?
仮定する:
vector<unsigned int> v = { 1,2,3,4,5,6,7,8,9,10};
最大 10 個の整数があり、重複がないことは既にわかっています。計算するベクトルがたくさんありますが、これは 10 が最大サイズである最悪のケースです。
フォーラム:
hash = (hash * PRIME_BASE+ v[i]) % PRIME_MOD;
明らかに PRIME_BASE は = vector size - 1 である必要があり、この場合は 9 (9 が素数ベースではないことはわかっています) ですが、競合は発生しません。
しかし、PRIME_MOD を選択して、ベクトルの最大サイズと、その中に数値の繰り返しがないことを知って、生成された大きな数値を減らすにはどうすればよいでしょうか?
線形合同ハッシュを生成しようとしています。
ありがとう
更新
また、すべてのベクトルの最大数も既知であることをすでに知っていることも言及するのを忘れていました。これは、このサンプルケースでは 10 です。