C で記述されたハッシュ テーブルの個別にチェーンされた実装では、重複したキーを LIFO の順序で挿入および削除できます。
テーブルのサイズを変更する (サイズを 2 倍にする) 条件は、各リストに平均 10 項目が含まれている場合です。コードは次のようになります。
void maybeExpand(Hashtable* table)
{
if (table->items < table->lists * 10)
return;
/* resize */
}
ハッシュ テーブルの全容量ではなく、項目数とリスト数の比率を比較していることに注意してください。
問題は、テーブルが重複キーのみで構成され、リストあたりのアイテムの平均数が 10 を超える場合です。サイズを変更してもリストの数とアイテムの数は変わらないため、ハッシュ テーブルのサイズは変更され続けます。
ハッシュ テーブルで重複キーを許可することが適切な決定であるかどうか疑問に思います。もしそうなら、上記の場合はどうすればよいでしょうか?