問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
データのハッシュ値を添字として用い、データを表に格納するデータ構造をハッシュテーブルと呼びます。このデータ構造には、データの挿入や検索が O(1) でおこなえるという利点があります。
ハッシュテーブルの最もシンプルな実装は、以下のようなものです。
・ 前準備
ハッシュ関数と、配列を用意する (ハッシュ関数の出力の範囲が、配列の添字の範囲に収まるように)・ データの挿入
データのハッシュ値を計算し、その値を添字として配列にデータを格納する・ データの検索
データのハッシュ値を計算し、その添字の位置にデータがあるかどうかを調べる
・ オープンアドレス法
衝突が解消されるまで、ハッシュ値を再計算して更新・ チェイン法
配列の要素をデータそのものではなくデータのリストとする。衝突した複数のデータを同じ場所に格納する
チェイン法
を採用したハッシュテーブルを実装して、各クエリを処理してください。H(p) = (d の 1 文字目の文字コード * B1 + d の 2 文字目の文字コード * B2 + ... + d の m 文字目の文字コード * Bm) % mod
1 d
ハッシュテーブルにデータ d を格納してください。
2 x
ハッシュテーブルの先頭から x 番目 (1 ≦ x ≦ 100) に格納されているデータを左から格納された順番に全て出力してください。
格納されているデータが 1 つもない場合は-1
を出力してください。
ハッシュテーブルの添え字と x に 1 の差があることに注意してください。
3 d
ハッシュテーブルのデータ d を削除してください。
Q
q_1
q_2
...
q_Q
1 d_i
2 x_i
3 d_i
クエリに従って出力を行ってください。
1 d_i
によってハッシュテーブルに d_i が格納されるとき、既に d_i がハッシュテーブルに存在していることはありません。3 d_i
によってハッシュテーブルから d_i が削除されるとき、必ず d_i はハッシュテーブルに格納されています。6
1 apple
2 99
1 r
2 99
3 apple
2 99
apple
apple r
r
10
1 rV
1 6ETlA
1 c
1 h
2 37
1 2WW
1 mJg
2 14
1 1sxu
3 h
-1
-1