背景:私の大学のコースの1つで、チェスを作っています。GUIはすでにコントローラーへのフックで終了しています。私がしなければならないのは、オブジェクトを実装することだけです。従来は、各タイプのオブジェクトに適したネイティブ構造、移動履歴のスタック(サポートされていませんが、やり直しはできません)、ボードの2D配列/ベクトルなどを使用していました。仕様の一部は、ロードする必要があることです。ゲームを特殊なXML形式で保存するので、DOMDocumentを使用してゲーム全体を保存したいと思います。これにより、DOMの読み込み/保存アクションを実装するライブラリがある場合、XMLと構造の間で変換する必要がなくなるため、読み込みと保存が非常に簡単になります。
問題:速度。チェスのすべてのアルゴリズムでは、場所によって多くの選択を行う必要があります。
XML形式(変更不可):
<board>
<piece type="rook" color="white" column="0" row="7"/>
<piece type="knight" color="white" column="1" row="7"/>
<piece type="bishop" color="white" column="2" row="7"/>
<piece type="queen" color="white" column="3" row="7"/>
<piece type="king" color="white" column="4" row="7"/>
<piece type="bishop" color="white" column="5" row="7"/>
<piece type="knight" color="white" column="6" row="7"/>
<piece type="rook" color="white" column="7" row="7"/>
<piece color="white" column="3" row="6" type="pawn"/>
<piece row="6" type="pawn" color="white" column="4" />
</board>
次に、すべてのピース要素を取得し、属性を除外する必要があります。これはO(n)操作です。配列/ベクトルの実装では、単純なインデックス作成であるため、O(1)時間を簡単に達成できます。特に膠着状態を検出する場合、O(n)の価格は高すぎて支払うことができません。
どのように速度を向上させますか?私は基本的にDOMにインデックスを付ける方法を探しています。私はいくつかのアイデアを持っていますが、この問題をどのように解決しますか?
参考までに、私はC ++で開発しており、おそらくXML用のXercesライブラリを使用しますが、実際のコードではなく、主にアイデアを探しています(ただし、それは役に立ちます)。