自分のhash算法に対する理解は正しいかどうか、皆さんにお伺いしたいのです。X11V777のようなキーセットが予め指定された場合、hash算法はこのキーのセットに対して総合処理してそれぞれのキーを順番値0,1,2,3へのmaping規則を決めます。保存アドレスのindexになります。これで非常に高速検索できるようになります。上記考え方は正しいかどうかご指摘頂ければ幸いです。Wikipedia(ja)>それぞれのキーを順番値0,1,2,3へのmaping規則を決めます。http://ameblo.jp/mratassyu/手提鞄屋魚有店(てさげかばんやうおありてん)レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。「キーのセットに対して総合処理してmaping規則を決める」なんてことはしないと思います。自分の理解では、ハッシュ関数はキーを配列の要素数などの定義域の値の中の(被りにくい)適当な値に(高速に)変換します。ハッシュ関数自体がmaping規則です。この値を用いることで、保存用の配列全体を見ず、指定された値を添字としてそこだけ見に行けばいいので、高速に検索できます。100個あったとします。登録順に並んでいたら、検索のとき先頭から順番に見ていかないといけないので時間がかかります。登録時にソートしておけば、二分探索により少ない回数の比較で検索ができます。3回の比較で済みます。実際のコードで見たほうが分かりやすいでしょう。3回の比較で済みます。いい加減なことは言わないでほしい。衝突の可能性はキーの数・性質/ハッシュテーブルの大きさ/ハッシュ関数の質に依存するので一概にはいえないはず。衝突時の処理もハッシュアルゴリズム自体とは無関係。3回の比較で済むかどうかはその方式による。さんのコメントは素晴らしく、非常に勉強になりました。そのコメントの内容をしっかり覚えたいのです。さんがおっしゃったのは「理想な場合」かなと思います。コメント頂きまして本当に有難うございます。どっちも啓発的です!特にかずま様がわざわざサンプルコードを組んでくださって、hashに関する理解を深めました。それに、かずま様から頂いたサンプルコードは実に完璧なものです----ほんとうに吟味に値します。概念的に解決法は一応知っているようなものの、具体的なソリューションが知りませんでした。かずま様のサンプルコードを見て、hashに対して、概念的にも、実現法に関しても、随分分かるような気がします。忘れないために、自分がサンプルコードの一部に対する理解を加えておきたいのです。不適切な処があれば、是非ご指摘頂きたいと思います。★検索目的か登録目的を問わずこのループを実行する:登録の場合、キーが重複に現れたら、これで終わり---再度登録しない。生成・利用されている可能性を考え、それに対応するデータpointerの保管場所をnextに移転。//hがこれまで利用されていない場合、table[h]==NULLであり、nextないという意味。検索失敗の時、pの値=NULL}またどうぞ宜しくお願い致します。いい加減なことは言わないでほしい。衝突の可能性はキーの数・性質/ハッシュテーブルの大きさ/ハッシュ関数の質に依存するので一概にはいえないはず。衝突時の処理もハッシュアルゴリズム自体とは無関係。3回の比較で済むかどうかはその方式による。いい加減なことを書いたつもりはありません。100個あったとします。「実際のコードで見たほうが分かりやすいでしょう。」と書いて、そのコードを提示しました。999、ハッシュ関数も通常の文字列について、ハッシュ値がばらけるように適切なものにしています。実際にどの程度衝突が起こるか見てみましょう。3~8文字になるものをキーとしています。(以下略)御覧のような結果になりました。