Могу ли я улучшить время вычислений моей DFS, используя многопоточность в C ++ - PullRequest
1 голос
/ 09 апреля 2020

Я пишу программу, которая вычисляет общее количество уникальных игр 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 потоков, разделяющих работу, но будет ли это на самом деле работать или потоки будут просто бороться за ресурсы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...