Я пишу программу, которая вычисляет общее количество уникальных игр Connect 4, в которые можно играть. Для этого у меня есть DFS-подобный алгоритм, который перебирает каждую возможность:
void DFS(int col, PositionPiece turn, std::vector<int> plays, Board board) {
// Place current piece
if (board.place(col, turn)) {
plays.push_back(col);
printf("%s\n", board.toString().c_str());
// Check for complete game
if (plays.size() == (MAX_ROW*MAX_COL)) { // Check if board if full
GAME_COUNTER += 1;
return;
}
if (board.winner() != EMPTY) { // Check if someone won
GAME_COUNTER += 1;
return;
}
} else {
return;
}
// Place next piece
for (int i = 0; i < MAX_COL; i++) {
DFS(i, turn, plays, board);
}
}
for (int firstCol = 0; firstCol < MAX_COL; firstCol++) {
DFS(firstCol, turn, plays, board);
}
Проблема в том, что эта программа слишком долго запускается. Я позволил этому работать в течение дня, и это не было даже частью полного пути. Я смотрю на способы, которыми я могу улучшить это. Мне интересно, если я положу первые n чисел пьес в их собственный поток и запусту его, могу ли я значительно улучшить время расчета? Я знаю, если в теории это должно сократить время вычисления до 1 / n от исходного времени, если есть n потоков, разделяющих работу, но будет ли это на самом деле работать или потоки будут просто бороться за ресурсы?