8.2 ハッシュ法 |
リバーシプログラムの置換表には、ハッシュ法がよく使われます。
ハッシュ法とは、「データを直接比較するのではなく、ある手続きによって小さいデータに変換してから比較する」手法を指します。
変換手続きをハッシュ関数、変換後のデータをハッシュ値と呼びます。
本プログラムではハッシュ法を利用して以下のような処理を行います。
ハッシュ法では元のデータが異なっていても、ハッシュ値が同じという場合が発生します。
これを衝突と呼びます。
本プログラムでは以下の衝突が発生します。
本プログラムではハッシュ値自体の衝突については考慮しません。
ハッシュ値が異なる場合には常に元の局面も異なるとして扱います。
後述するハッシュ関数ではハッシュ値自体が衝突する可能性は極めて低いためです。
レコードが衝突した場合には、古いデータを新しいデータで上書きするようにします。
本プログラムではハッシュ法を高速化のためだけに使用するので、古いデータを上書きしても思考結果が変わるということはありません。
本プログラムでは以下のハッシュ関数を使用します。
ハッシュ関数はBoardクラスに追加しました。
関数定義は以下のようになっています。
またHashValue構造体を使用するため、"board.h"の最初の方に以下の一文を追加しておきます。
#include "hash.h"
次節ではハッシュ関数の実装を行います。
<目次> <前へ> <次へ>