(hashing)」を取り上げます。管理に使われている方法です。連想配列(辞書)をサポートしているスクリプト言語では、その実装にハッシュ法が使われています。回の比較でデータを見つけることができます。実際、コンパイラの予約語のように探索するデータが固定されている場合は、そのように設計することが可能です。回の比較で見つけることはできませんが、数回程度の比較で見つけるように設計することは可能です。ありますが、今回はアルゴリズムの勉強としてハッシュ法のプログラムを作ってみましょう。function)」を用意します。value)」と呼びます。ハッシュ値はハッシュ表の添字に対応し、この位置にデータを格納します。ハッシュ関数によってデータを格納する位置を決める探索方法がハッシュ法なのです。ハッシュ法で不特定多数のデータを扱う場合、異なるデータでも同じハッシュ値が生成される可能性があります。(collision)」といいます。データをハッシュ表に登録しようとしても、すでに先客が居座っているわけです。種類の解決方法があります。方法はハッシュ表に複数のデータを格納することです。配列には一つのデータしか格納できないので、複数個のデータをまとめて格納する工夫が必要になります。ハッシュ表からデータを探索する場合、まずハッシュ値を求め、そこに格納されている連結リストの中からデータを探索します。(chaining)」といいます。連結リストのほかに二分木を使う方法もあります。方法は空いている場所を探して、そこにデータを入れる方法です。この場合、最初とは違うハッシュ関数を用意して、新しくハッシュ値を計算させて場所を決めます。この処理を空いている場所が見つかるまで繰り返します。空き場所が見つからない場合、つまりハッシュ表が満杯の場合はデータを挿入することはできません。addressing)」といいます。●チェイン法それでは、チェイン法から説明します。チェイン法の場合、ハッシュ表にはデータをそのまま格納しないで、連結リストへの参照を格納します。ハッシュ表からデータを探索する場合、まずハッシュ値を求め、そこに格納されている連結リストの中からデータを探索します。簡単な例を示しましょう。次の図を見てください。チェイン法たとえば、上図のようにハッシュ関数とハッシュ表が構成されているとします。位置に格納されている連結リストを探索します。連結リストの中に登録されているので探索は成功です。ハッシュ表に連結リストがないので探索は失敗です。登録されていないので探索は失敗です。ところで、チェイン法はハッシュ値の衝突が頻繁に発生すると、データを格納する連結リストが長くなるので、探索に時間がかかることになります。効率良く探索するには、うまくハッシュ値を分散させることが必要になります。●チェイン法のプログラムそれでは、チェイン法のプログラムを作りましょう。今回はオーソドックスに連結リストを使います。使った方が簡単にプログラムできると思いますが、連結リストでも難しくはありません。最初にクラスを定義します。次のリストを見てください。次のセルへの参照を格納します。ハッシュ値を計算します。