0

ミニマックス タイプのアルゴリズムをリバーシ/オセロ タイプのゲームに適用しようとしています。

したがって、配列はパラメーターとして渡すことができないため、64 個のパラメーターを持つ関数と 1/2 プライごとに配列が必要であるか、またはプライごとに関数と配列のコード コピーを渡す必要があるようです (つまり、checkMovePly1、 checkMovePly2 など)、または配列をローカルに作成します (この時点で、AI が移動すると、ターンごとに 64^(2*ply) 配列が生成および作成されるため、実行が多少遅くなる可能性があります)。

配列の問題を解決できれば、O(64^(2*ply)) の時間の複雑さだけになるため、これはいくつかのプライで機能するはずですが、メソッドによっては 64^(2 *ply) 配列の作成と破棄。

複数の配列の問題を回避する方法はありますか?これは合理的なアプローチですか?

4

2 に答える 2

0

C++ には、配列よりも優先されるさまざまなコンテナーが用意されています。この場合、私はstd::array. をお持ちでない場合はstd::array、 anstd::vectorでも機能します。

void foobar(std::array<int, 64> board);

この関数は、値で渡された配列をコピーします。

于 2013-03-29T20:49:05.080 に答える
0

最初の配列はパラメーターとして渡すことができますが、呼び出された関数は、独自のコピーではなく、元の配列で直接動作します (注意してください)。

void foo(int[8][8] board);

第 2 に、標準 (または必要に応じてカスタム) コンテナー クラスは、より安全に使用でき、必要に応じて簡単にコピーできます。ネイティブ配列は、少しハック的なトリックを使わないと簡単にコピーできません。その時点で、コンテナ クラスを使用するとコードが読みやすくなるはずです。

第三に、この問題は再帰アルゴリズムの古典的な主題のように見えます。これにより、すべての作業を同じ配列 (またはコンテナー クラス) インスタンスで実行できるため、リソース要件 O(1): 固定のゲームボード サイズと既知の最大再帰を維持できます。深さ。

于 2013-03-29T21:43:56.843 に答える