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のハッシュが一致する指し手を
探せば、欲しい定跡手が手に入る仕組みである(と思う)