Сравнение сложности между двумя реализациями алгоритма «комбинаций» - PullRequest
1 голос
/ 11 мая 2019

Рассмотрим следующие две реализации поиска c(n,k), то есть нахождения количества способов выбора n объектов k за один раз. Как соотносятся временные сложности для двух алгоритмов?

Я реализовал реализацию динамического программирования и попробовал несколько тестовых примеров, таких как C (100,25), и это работает довольно быстро. Я пришел к выводу, что сложность по времени для этого решения равна O (n ^ 2).

Другая реализация использует prev_permutation или next_permutation, доступные в библиотеке C ++ STL, взятые из здесь , первоначально из Rosetta Code . Документация к этой функции здесь говорит, что она работает за линейное время до половины расстояния между (первым, последним), так что цикл, который она находится вне, сделает всю сложность снова равной n в квадрате? не уверен насчет этой части, вот где мне нужна помощь).

size_t combinations_dp (int n, int k) {
      vector <vector<size_t>> grid (n + 1, vector<size_t> (k + 1, 0));
      // base cases
      for (int i = 0; i <= n; i ++) {
            for (int j = 0; j <= k; j ++) {
                  if (i == j) grid[i][j] = 1;
                  if (j == 0) grid[i][j] = 1;
            }
      }
      for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= k; j++) {
                  if (j == 0 || j >= i) continue;
                  else {
                        grid[i][j] = grid[i-1][j-1] + grid[i-1][j];
                  }
            }
      }
      return grid[n][k];
}
void combinations_bits(N, K) {
  vector<bool> arr (K, 1);
  arr.resize(N, 0);
  long long count = 0;

  do {
    count ++;
  } while (prev_permutation(arr.begin(), arr.end()));

  cout << count << "\n";
}

Я не уверен, как сложности двух реализаций сравниваются друг с другом, особенно как функции prev_permutation и next_permutation увеличивают сложность функции по времени.

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