Bonanzaの定跡処理

BonanzaV2.1のhack/book/フォルダーにbook.txtという解説があり

book.bin は主に序盤の局面を記憶したファイルであり,インデックスとデー
タベースの 2つの部分により構成される.

    位置(バイト)
  0x00000 - 0x17fff  インデックス
  0x18000 - 終端     データベース

とある。
インデックス部分が、ハッシュに該当し、ハッシュの位置にはデータベースセクションへの位置情報が記述してある。


インデックス部分は、一つの要素が6バイトなので、インデックス自体は0x4000=16383個しかない。
実際のハッシュは64bitなので、0x3fffとANDを取ることで、インデックスが求まるが、
わずか0x3fffでは、違う局面を同じとみなしてしまうだろう。

前半 4バイトはデータベースの位置をファイルの先頭からバイト単位で数えた
値,後半 2バイトはデータベースのサイズをバイト単位で数えた値を指す.

実際は、データーべース部分は、複数の要素が並んでいて、

  要素:サイズ (1byte), ハッシュキー (8byte),指手 (2byte),頻度 (2byte)

となっている。
ここに64bitの本物のハッシュと、指し手、頻度が記述してあるらしい。
インデックス部で、粗く、ハッシュからDBを絞り込み、データーベース部にある64bitのハッシュが一致する指し手を
探せば、欲しい定跡手が手に入る仕組みである(と思う)