issues
search
stepney141
/
dagaz-v2
JavaScript game engine for creating and playing various boardgames
MIT License
0
stars
1
forks
source link
盤面をインクリメンタルに更新することを試す
#22
Open
stepney141
opened
2 years ago
stepney141
commented
2 years ago
現状
1つの盤面状態は、1つの
TBoard
オブジェクトで表される
つまり新しい盤面状態に遷移するたびに、新しく
TBoard
のインスタンスが生成される
懸念
新しくインスタンスを生成する方式は無駄?
「ある程度以上の複雑さを持つゲームでは一度の状態遷移時の変化量は部分的になるので、毎回新規に状態を生成するのは無駄」みたいな話がある
※オセロとか囲碁とかはどうなんだ?
ナイーブに局面の全列挙をする場合、探索深さ n に対して到達局面の総数は n^2 から n^3 程度のオーダーで増加していく
当然、
TBoard
が作られる回数もそのオーダーで増えることになる
そもそも、データを操作するためのメソッドを状態に含めるのは余計な計算量とメモリ領域を費やすのでは?
するべきこと
以下の実装を比較する
現行方式
TBoard
をクラスではなくオブジェクトリテラルで表現する方式
現行方式をインクリメンタル更新にしたもの(=クラスを使う)
TBoard
をオブジェクトリテラルで表現し、インクリメンタル更新にしたもの(=関数で状態を操作する)
現状
TBoard
オブジェクトで表されるTBoard
のインスタンスが生成される懸念
TBoard
が作られる回数もそのオーダーで増えることになるするべきこと
TBoard
をクラスではなくオブジェクトリテラルで表現する方式TBoard
をオブジェクトリテラルで表現し、インクリメンタル更新にしたもの(=関数で状態を操作する)