next up previous
Next: 8.4 隣接行列の表現例 Up: 8 グラフの記述 Previous: 8.2 隣接点リストを頂点シンボルの属性リストで表す

8.3 ハッシュ表を用いて隣接点リストを表す

データベースを表現する別の方法としてハッシュ表(hash table)というものが あります.ハッシュとはかきまぜるとか細切れにするという意味を持ちます. あるキーが与えられた場合にそのキーに関係するデータのおかれている場所を 見つけるためにその場所のアドレスをキーから直接計算する関数を用意し, そのアドレスから直接データをとり出してこようというのがハッシュ法の 考え方です.格納場所を計算するための関数はハッシュ関数と呼ばれます. 連想リストや属性リストでは,リストの最初から順にデータを比較して調べて ゆくということを行ないますから,求めているデータがリストの終りの方に あると非常に時間がかかってしまうことにもなります. ハッシュ法の場合には,データベース中に蓄積されているデータの順番に関係 なく,アドレスを求める方法なのでどのデータでもほとんど同じような時間で 検索がなされます.(もっともハッシュ関数をどのように作るかで時間は変わ ります.) 通常は,キーの名前からその格納場所を計算するハッシュ関数を作ります.完 全なハッシュ関数はすべてのキーに対して異なる格納場所を計算できる関数で すが,データの数が多くなれば非常に困難となります.そのため,同じアドレ スを返すハッシュ関数であっても,そのアドレスの場所に連想リストなどを用 意しておくことで対応することもよく行なわれます. commonlispでは,ハッシュ法のインプリメンテーションは処理系によって変わっ てきます.ハッシュ関数をユーザが指定することもできます. グラフ*graph4*に対してgethashを行なうだけで隣接点リストが 得られます.
<cl> (gethash 'a *graph4*)
(s b d) 
<cl> (gethash 'd *graph4*)
(s a e)


generated through LaTeX2HTML. M.Inaba 平成18年5月6日