Tic-Tac-Toe 게임 트리 (첫 번째 이동 후 9 초)가 생성되며 몇 밀리 초만 걸릴 것이라고합니다. 그래서 내가 CodeAnalyst를 통해 실행, 그것을 최적화하기 위해 노력하고있어 이들 상위 5 개 통화가 이루어지고있다 (필자는 틱택 보드를 표현하기 위해 bitsets을 사용) :C++ 트리 생성 최적화
std::_Iterator_base::_Orphan_me
std::bitset<9>::test
std::_Iterator_base::_Adopt
std::bitset<9>::reference::operator bool
std::_Iterator_base::~_Iterator_base
void BuildTreeToDepth(Node &nNode, const int& nextPlayer, int depth)
{
if (depth > 0)
{
//Calculate gameboard states
int evalBoard = nNode.m_board.CalculateBoardState();
bool isFinished = nNode.m_board.isFinished();
if (isFinished || (nNode.m_board.isWinner() > 0))
{
nNode.m_winCount = evalBoard;
}
else
{
Ticboard tBoard = nNode.m_board;
do
{
int validMove = tBoard.FirstValidMove();
if (validMove != -1)
{
Node f;
Ticboard tempBoard = nNode.m_board;
tempBoard.Move(validMove, nextPlayer);
tBoard.Move(validMove, nextPlayer);
f.m_board = tempBoard;
f.m_winCount = 0;
f.m_Move = validMove;
int currPlay = (nextPlayer == 1 ? 2 : 1);
BuildTreeToDepth(f,currPlay, depth - 1);
nNode.m_winCount += f.m_board.CalculateBoardState();
nNode.m_branches.push_back(f);
}
else
{
break;
}
}while(true);
}
}
}
어디에서보고되어야한다 그것을 최적화? 이 5 가지 호출을 최적화하려면 어떻게해야합니까? (나는 인식하지 못합니다.)
세 첫번째 이동 (다른 보드를 생성하기 위해 마지막 두 개의 보드를 회전)입니다하지만 전체 트리를 생성 할, 그게 문제입니다. 나는 나무 구조에 대해서 배울 뿐이므로 의도적으로이 일을하고 있지만 ... 효율적인 방법은 아닙니다. – cam
@cam : 좋습니다, 나무 구조를 만들고 싶습니다. 앞에서 말했듯이 "일시 중지"버튼을 사용하면이 루틴이 호출되는 이유를 알 수 있습니다. 호출 스택을 검색하면 이유를 알 수 있으며 필요한 경우 또는 더 좋은 방법이있는 경우 직접 결정할 수 있습니다. (나는 당신에게 물고기를 가르치려고 노력하고있어 답을주지는 않습니다.) –
정확합니다. 사실 "Node f;" 이 함수에서 발생하는 많은 개체 생성 삭제 및 복사를 의미합니다. 내 보드 상태는 unsigned int (2 비트/제곱)이어야하며 모든 함수 호출은 함수가 아닌 명시 적으로 인라인으로 작성되어야합니다. Tic Tac Toe에 대한 과외 평가가 너무 많습니다. OTOH는 특정 게임과 독립적 인 코드를 원한다고 생각합니다. – phkahler