からだのブログ

五体満足に生まれてきたことに感謝してブログの名前を「からだ」にしました。

からだのブログ header image 2

給料日とハッシュテーブルアルゴリズム

11月 24th, 2008 · No Comments · life, tek

給料日とハッシュテーブルアルゴリズム、はてさて何の関係が?

給料日ってば、金曜日が多いよね。土日が休みのところであれば金曜日に給料を支払わないといけない。従って、給料日に定められた日にちが金土日なら金曜日に支払われることになり、単純に半分近くの確率で金曜日が給料の支払日になるわけだ。最近では月曜日も連休だったりするから、もう少し確率は高くなるだろう。

ハッシュテーブル。自分で実装したことがあればわかるだろうけど、すごく単純なものはハッシュ関数にキーを食わせてハッシュ値を得て、テーブルサイズで mod を取る。それをもとにテーブルに格納するわけだが、普通はハッシュ値の取りうる範囲分だけテーブルを用意するわけじゃあないから、必然的に衝突が起こる(ハッシュ関数の時点でも起こるけど)。

このとき、単純なアルゴリズムだと、本来格納すべき場所の次の番地に要素を格納する。それが重なっていくとテーブルのある特定の部分に要素が連続的に格納される傾向が出てくる。すると、すぐにそのハッシュテーブルは線形リストと同じになり、結果破綻することになる。(回避策はいくつかあるけど、本筋とは関係ないのでやめておく。)

いや、べつに給料日が破綻したりそんなことはないんだけど、なんか似てるなあ、とw

Tags: