現在のプロジェクトでは、時期尚早の最適化は諸悪の根源であるという原則を守るために最善を尽くしました。ただし、コードはテスト済みであり、最適化の時期です。いくつかのプロファイリングを行ったところ、私のコードはその時間のほぼ 20% を、考えられるすべての子を見つけてベクトルに入れ、それらを返す関数に費やしていることがわかりました。注として、私は速度を最適化しています。メモリの制限は要因ではありません。
現在、関数は次のようになっています。
void Board::GetBoardChildren(std::vector<Board> &children)
{
children.reserve(open_columns_.size()); // only reserve max number of children
UpdateOpenColumns();
for (auto i : open_columns_)
{
short position_adding_to = ColumnToPosition(i);
MakeMove(position_adding_to); // make the possible move
children.push_back(*this); // add to vector of children
ReverseMove(); // undo move
}
}
children.push_back(*this);
プロファイリングによると、私のコードは、次のように関数を呼び出している行だけで約 40% の時間を費やしています。
std::vector<Board> current_children;
current_state.GetBoardChildren(current_children);
考えられる子の最大数が少ない (7) ので、配列を使用したほうがよいのではないかと考えていました。または、この機能を最適化するためにできることはたくさんありませんか?