おまいら最強の将棋プログラムしてみろよ part7at TECH
おまいら最強の将棋プログラムしてみろよ part7 - 暇つぶし2ch721:720
10/08/21 19:32:14
なお部分一致している局面集合の検索ならRDBだけですみやかに実現できる。
将棋の局面は81マス+持駒の数(8種類分x2)で特定できるから、
盤の表現に81列、持駒の表現に16列、対局情報レコードへの参照に1列程度、という100列程度のレコードのテーブルを作ればいい
(Microsoft SQL Serverのようにレコードサイズに制限があり、それに収まらない場合はテーブル分割などの工夫が要るが)

たとえば、2010年に指された5五が金将である局面を全てリストアップするには、(year列、"対局ID"列とかを設けるとして)
 SEELCT * FROM (局面table) JOIN (対局table) ON (対局table).ID = (局面table)."対局ID"
 WHERE (対局table).year = 2010 AND (局面table)."5五" = 5
とかやると良い(金将のコードを5、局面テーブルに"5五"という列があり、コードが格納されているとして)

さてこれはRDBの理屈に即した演算で済むから良いのだが、問題は1つの対局内の局面を時系列順に全て得たい、というときだ
ぶっちゃけ、RDBのレコードでリンクリストを実現してリスト構造(や木構造)を作ってやっても、
それをたどるのにn回SELECTを発行する羽目になって効率が悪い
だったら、リンクリストなどやめて1回のSELECTで局面をまとめて取得→オンメモリで並べ替える(ただし、あらかじめindex列を設けておく)
というのが多分正解

structで一生懸命説明している人はここらの話(レコードのオブジェクトへのマッピングをどうするのが良いか)について説明していないし、
多分ポイントを把握もしていない



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch