質問: `基本情報技術者` 10進法で5桁の数字a1,a2,a3,a4,a5をハッシュ法を用いて配列を格納したい。 ハッシュ関数をmod(a1+a2+a3+a4+a5,13)とし、求めたハッシュ値に対応する位置の配列要素に格納する場合、54321は配列のどの位置に入るか? ここで、mod(x,13)の値は、xを13で割った余りとする。 【答え 2】 mod(a1+a2+a3+a4+a5,13)でいう13とはa1というのはどういった意味を持つ 数字ですか? また、5+4+3+2+1を13で割ればなんで、この問題の 答えが出るのかいまいちわからないです。 お手数ですが、ご教授お願いします。
回答: そもそもハッシュ関数がどんなものなのか理解できていない、のがあるのでしょうね...... 例えば...そうですね、高校あたりの全校生徒の名簿を考えましょうか。 これを分類するために、姓が「あ」行、「か」行、「さ」行......とで分類するようにしましょう。 鈴木さん、を捜したければ、全部を捜すのではなく、「さ」行の中からだけ探せばよいですね。 これもハッシュの考え方が入っています。この場合のハッシュ値は「姓の先頭1文字の子音」です。 ※ですから鈴木さんも佐藤さんも島田さんも瀬名さんも曽我さんも、同じ「さ」のハッシュ値です この方法でいけば、どんな姓の人でも、10種類(あかさたなはまやらわ)に分類できます。(海外には「ん」で始まる姓をもつ方もいらっしゃいますが...) こうすることで探索や一致判定を素早く行えるのです。 ※ハッシュの性格上、同じハッシュ値=同一 は必ずしも正しくありませんが、違うハッシュ値=同一ではない、は正しいので、判定が楽になる 問題だと、5桁の数値を、13個ある配列のどこかに格納したいから、0~12 のいずれかの値が返るようなハッシュ関数を作っているわけですね。(13で割った余り(mod) は、0~12 のいずれか)