- ベストアンサー
ハッシュ探索とは?
- ハッシュ探索はデータをハッシュ値に変換して比較に用いる方法です。
- ハッシュ値の長さによって処理時間が変化することもあります。
- ハッシュ探索は文字列の長さに応じて処理時間が変わることがあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ハッシュ化と言うのは、いろいろな文字列やバイト列を、固定長のできるだけ重複しない(他と同じにならない)データに変換することです。 元のデータの長さによってハッシュ化の時間が変わるかというと、それは全く同じというわけには行きません。長さに比例して10ナノ秒だったり1ミリ秒だったりするかと思います。 ハッシュ探索はハッシュ値を使った探索(配列から目的のデータを探す)なので、すでにハッシュ化されたデータを使いますから、もとのデータの長さとは関係ありません。
その他の回答 (1)
- asciiz
- ベストアンサー率70% (6849/9743)
まず、ハッシュ化・ハッシュ関数の話から。 ハッシュ化とは、変換前の任意長のデータを、短い別データに変換することを指します。 例えば、元が100文字であっても、3万文字であっても、ハッシュ関数を通すと、16バイトのハッシュ値が計算される、と言った風にです。 大きいデータに演算を施して、小さなデータにしてしまいますから、中には、「元が違う文字列なのにハッシュ値が同じ」というパターンも存在し得ます。 しかしそこは計算方法の工夫により、そのようなことが起こる確率は非常に低くなっており、大概の場合には「ハッシュ値が一致したならば、元の文字列同士も一致している」と言えるんです。 ではここで例えば、100KBのデータをダウンロードしたとしましょう。 ダウンロードしたデータが正しいことをどうやって確認したら良いでしょうか? もう一度ダウンロードして、ファイル比較するという手段があります。 でもダウンロード元に、「MD5: 112233445566778899aabbccddeeff00」みたいなハッシュ値が書いてあれば、ダウンロードしたファイルをMD5方式でハッシュ値に変換し、同じ値に変換されれば、「正しくダウンロードできた」と信用できます。 なお、ハッシュ値による比較では、「一致しているかどうか」しか調べられません。 元の文字列が1文字違う、あるいは元の文字列が1文字長い、と言ったパターンから、かなり違うハッシュ値が算出されます。 ハッシュ値からは元の文字列を類推できないので、どちらが長かったか、すら分からないんです。 ---- 「ハッシュ探索」という言葉はどういう文脈で出てきたんでしょうね? 例えばウイルス対策ソフトとかでしょうか。 この場合、「既知のウイルスファイルであるか」を調べるのに、このハッシュ値を使います。 もし、ウイルスプログラムそのもののデータを持っていたら、チェック用データはどんどん大きくなりますし、そのデータからうまく切り出したらウイルスファイルを復元できることになってしまって危険極まりありません。 そこで、たくさんあるウイルスプログラムのハッシュ値を計算し、そのハッシュ値のみをデータベース化しておきます。 そして新しいプログラムがインストールされたとき、各ファイルのハッシュ値を計算してみます。 もし、その中に既存のハッシュ値と一致するものがあれば、「このプログラムはウイルスファイルを含んでいる!」と検出できたりするわけです。