問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
データのハッシュ値を添字として用い、データを表に格納するデータ構造をハッシュテーブルと呼びます。このデータ構造には、データの挿入や検索が O(1) でおこなえるという利点があります。
ハッシュテーブルの最もシンプルな実装は、以下のようなものです。
・ 前準備
ハッシュ関数と、配列を用意する (ハッシュ関数の出力の範囲が、配列の添字の範囲に収まるように)・ データの挿入
データのハッシュ値を計算し、その値を添字として配列にデータを格納する・ データの検索
データのハッシュ値を計算し、その添字の位置を調べる
・ オープンアドレス法
衝突が解消されるまで、ハッシュ値を再計算する・ チェイン法
配列の要素をデータそのものではなくデータのリストとする。衝突した複数のデータを同じ場所に格納する
チェイン法
を採用し、ハッシュテーブルを実装してみましょう。H(x) = x % 10
を用いて、この n 個の整数をハッシュテーブルに格納してください。ハッシュテーブルは要素数 10 の配列とし、配列の各要素にはデータのリストを格納することとします。なお、各要素の初期値は空リストとします。各リストには複数のデータが含まれる可能性がありますが、格納した順番にデータが並ぶように実装してください。最後に、ハッシュテーブルの状態を出力してください。[17]
となります。[188]
となります。[188, 38]
となります。[17, 77777]
となります。[]
[]
[]
[]
[]
[]
[]
[17, 77777]
[188, 38]
[]
n
x_1
x_2
...
x_n
全 n データを格納したあとのハッシュテーブルの状態を、10行で出力してください。i 行目には、ハッシュテーブルの添字 i の位置に格納されているリストに含まれているデータを、格納された順に半角スペース区切りで出力してください。リストが空の場合は空行を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力はすべて整数
・ 1 ≦ n ≦ 1,000
・ 0 ≦ x_i ≦ 1,000,000 (1 ≦ i ≦ n)
4
17
188
38
77777
17 77777
188 38