현재 프로젝트에서 조숙 한 최적화가 모든 악의 근원이라는 원칙을 고수하기 위해 최선을 다했습니다. 그러나 이제 코드가 테스트되었으며 최적화 할 시간입니다. 프로파일 링을했는데 코드가 가능한 모든 자식을 찾아 벡터에 넣은 다음 반환하는 함수에서 시간의 거의 20 %를 소비합니다. 메모로서, 나는 속도를 위해 최적화하고있다, 메모리 제한은 요인이 아니다.검색을위한 C++ 벡터 최적화
std::vector<Board> current_children;
current_state.GetBoardChildren(current_children);
:
이
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 %를 지출 :
오른쪽 이제 기능은 다음과 같습니다
가능한 최대 어린이 수가 적기 때문에 (7) 배열을 사용하는 것이 좋을까요? 아니면이 기능을 최적화하기 위해 할 수있는 톤이 없습니까? 내 의견에 대한 응답에서
'children.push_back (* this)'는 'Board' 객체의 사본을 만듭니다. 그 사본을 만드는 것이 얼마나 비쌉니까? – NPE
@ NPE 작업이 꽤 비쌉니다. 상당히 큰 개체입니다. 그러나 나는 복사본을 만드는 방법을 보지 못했습니다. 깊이 우선 알고리즘을 사용하고 있으며, 알고있는 한 가능한 모든 어린이에게 새로운 사본이 필요합니다. –
나는 이것이 대부분의 시간이 가고있는 곳이라고 생각한다. 나는 그 자체가 붉은 청어라고 생각한다. – NPE