ダブルハッシュによるオープンアドレス指定を使用してC++でHashTableを実装しています。私は正しくこの部分を実装していると思いますハッシュテーブル:2番目のハッシュ関数がテーブルサイズの倍数を返すときのダブルハッシュ
indexInProbingSequence = (originalIndex + i * hashFunction2(key)) % tableSize
:
は、私は二重のハッシュの背後にある基本的な原理はということであることを理解しています。これは宿題のためのもので、特定のコードについてはアドバイスを求めることができないので、その部分について私を信頼する必要があります。
問題を引き起こしていると思われるものは、第2のハッシュ関数の対象となるときに、(プライム)テーブルサイズの倍数の値を返すことがあります。これらの場合、プロービングシーケンスのすべてのインデックスは同じです。例えば:
originalIndex = 32
hashFunction2(key) = 3035446
tableSize = 211
プロービング配列は:
(32 + 1 * 3035446) % 211 == 32
(32 + 2 * 3035446) % 211 == 32
など。
私には何が欠けていますか?