ハッシュ関数
関数だよ
入力に対応する適当な値(ハッシュ値)が返ってくるよ
入力する内容が同じであれば、同じ値が返ってくるよ
簡単に書くよ
ハッシュ関数(読:ハッシュカンスウ 英:hash function)とは
入力されたデータに対して、適当な値を返してくれる関数(処理のまとまり)。
もう少し正確に書くと
入力されたデータをもとにして、適当に見える値(特定のルールに沿って、ぐちゃぐちゃにした値)を返してくれる関数
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「関数」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理を行い、その結果として出力があります。
ついでなので書いておくと、関数に入れる値は「引数(ヒキスウ)」と言います。
関数から出てくる値は「戻り値」です。
ちょっと汚い話で恐縮ですが、人間は、ご飯を食べて、ウンチを出します。
人間が関数だと考えてください。
ご飯に相当するものが引数です。
ウンチに相当するものが戻り値になります。
以上を踏まえて
適当な値を中に放り込むと、それに対応する適当な値を返してくれる関数
が「ハッシュ関数」です。
例えば「愛媛みかん」を入れると「3」が返ってきます。
「青森りんご」を入れると「4」が返ってきます。
「栃木苺」を入れると「とちおとめ」が返ってきたりします。
何を入れると何が返ってくるか、入れたものからは分かりません。
返ってくるのは適当な値です。
ただし、同じ物を入れれば、必ず同じ値が返ってきます。
「愛媛みかん」を入れると、必ず「3」が返ってきます。
何回入れても「3」が返ってきます。
1.適当な値が返ってくる
2.同じ入力に対しては同じ値が返ってくる
というのがハッシュ関数の特徴です。
※話を単純化するために「適当な値」という表現を使っていますが、実際には適当ではありません。入力されたデータを「特定のルールに沿って」ぐちゃぐちゃにした値が返ってきます。
ハッシュ関数さんの一番有名な活躍どころはハッシュテーブルでしょうか。
ハッシュテーブルでは名札(キー)をもとにして適当な数字を生成し、その数字が付いている箱(配列の要素)に値を突っ込みます。
このときの「名札(キー)をもとにして適当な数字を生成」するのがハッシュ関数さんのお仕事です。
ハッシュテーブルの詳細については用語「ハッシュテーブル」の説明をご覧ください。
ハッシュ関数さんは、データが途中でおかしくなっていないかのチェックでも使われます。
ハッシュ関数さんは同じ入力に対しては必ず同じ値を返してくれる関数です。
例えば「愛媛みかん」をハッシュ関数に放り込んだら「3」が返ってくるとしましょう。
いつ、どんなときに放り込んでも返ってくる数字は「3」です。
4とか5になることは、ありえません。
そこでデータを送る人は「愛媛みかん、3になるから」のような形で送ります。
受け取った人は「愛媛みかん」をハッシュ関数に放り込んで、本当に「3」が返ってくるかを確認します。
「3」が返ってくれば「取りあえず大丈夫そうだな」と判断できます。
「3」以外が返ってくれば「あれ?なんかおかしくね?」と判断できます。
そんな理屈です。
他にも、いろいろな使い道があるでしょうけどね。
私がパッと思いつく用途は、そんな感じです。
あっ、そうそう。
ハッシュ関数から戻ってくる値は「ハッシュ値」と呼ばれます。
余裕があれば、ついでに覚えてあげてください。
一言でまとめるよ
まぁ「ハッシュ関数」って単語が出てきたら「入力に対応する適当な値(適当に見える値)を返してくれる関数(処理のまとまり)なんだな~」と、お考えください。
おまけ
■訳してみるよ
「hash(ハッシュ)」は「ハッシュドポテト」の「ハッシュ」です。
意味は「切り刻む」とか「細切れにする」とか「薄切りにする」とか「寄せ集め」とか「ごちゃまぜ」とかです。
「関数」は日本語ですね。
何となくくっつけると
(値を)細切れにする関数
となります。
■検索してみる?