宿題とか手伝えます
■ このスレッドは過去ログ倉庫に格納されています
0475デフォルトの名無しさん
NGNGhashつーもんは、
・あるデータに対して数字を割り当てる。この数字をhash値という
・その数字のあるところにデータを格納する
とデータを溜め込んでおいて、あるデータを検索したい時には
・そのデータに対するhash値を計算する
・格納場所のhash番めのところからデータを引っ張ってくる
という風に高速にデータを引き出せるようにしたものだ。もちろん、
hash値は高速に(あと、入力データのばらつきに対して十分にばらけるように)
生成できる関数でなければならない。
で、>>463の例でいうと、
・hash値はhash()関数で計算している。
hash値は0からDATA_NUM未満の数値を返すようになってる(値を必ず % DATA_NUMしてる)
・格納場所はmという配列で、DATA_NUM個格納できる。
・格納するデータは文字列で、たかだか JAP_LEN-1 バイトと仮定している
・(多分)英単語のhash値を求めデータベースに格納してるのは(たぶん)日本語
・だから検索するときには英単語を指定し、出力は日本語になる
まあたったこれだけのデータ数でhashを使うのはどうかなとも思うが、例題なのでいいだろう。
ただし、なんにしろこのコードには致命的な欠点がある。例題の癖にひどい問題だ。
それは、全然違うデータでhash値が重なった場合のことを考慮してないことだ。
たとえば
stupid ヴァカ
goddamn 氏ね
なんて入力があってたまたまstupidとgoddamnのhash値が等しかったら、
あとから格納したほうで上書きされてしまう。
■ このスレッドは過去ログ倉庫に格納されています