dポイントプレゼントキャンペーン実施中!

ハッシュ検索がどういうものか理解したばかりです。
概略がわかっただけで、それ以上のことはわかっていません。

VBAでは、Dictionaryを使うと、ハッシュ検索らしきことがやれるそうですが、Dictionaryを使わずにやろうとすると、ハッシュ関数が必要になってくると思います。
VBAにはハッシュ関数というものは用意されていないのですよね?
また、他の言語にはハッシュ関数が用意されているのですよね?

ハッシュ関数がなければ、ハッシュ検索はできないということですよね?
それともVBAの中で、ハッシュ関数と同じ機能を果たす式を作れば良いのでしょうか?
可能ならその式はどんな式になるのでしょうか?

A 回答 (1件)

少々誤解があります。



何かのデータを使い、そのデータ固有の値を求めるような関数は、全て「ハッシュ関数」と言えます。
ハッシュを効率よく使うために、いくつかの性質が求められる、というだけです。

検索用に使うハッシュ関数は、決まったものはありません。
扱うデータによって「最適」な計算が違うからです。
既存のものを使うのでなければ、自作すればいいのです。


また、検索だけがハッシュの使い方ではありません。
例えば、データが正しいかどうかの検証にも使われます。

100MBのデータをダウンロードして、失敗してないか確認する場合
ダウンロードした100MBとサーバーにある100MBを1バイトずつ比較する、なんてことは非現実的です。比較のために100MB通信しなおすことになるのですから。
そこで、ハッシュを計算して、比較すれば、少ないデータ量で確認できます(ハッシュが同じ場合は、確実に同じ、とは言えないが、ハッシュが違えば失敗していることが100%判明する)

このような使い方をするとき、その計算方法がバラバラでは意味がありません。
そこで、同じ計算をするために、MD5とかSHAとか言った決まった方法を使います。
これらも「ハッシュ関数」です。プログラミング言語によっては、用意されているので、自作の必要はありません。


では、後者のハッシュ関数を、検索用に使えばいいか、というと、そう単純ではありません。
例えば、MD5は128ビットの値を返します。単純計算で、2の128乗 通りです。
それだけのハッシュテーブル作るのは無駄だし、普通のPCでは無理です。

参考URL:http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83% …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
これでまた少し理解が深まりました。

ということで、VBAでお遊びでハッシュ関数を作成し、ハッシュ検索をするコード書くとどうなるのでしょうか?

お礼日時:2012/09/27 05:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!