Например, (n = 3, k = 2)
, я установил {1, 2, 3}
, и мне нужен мой алгоритм, чтобы найти: {1, 2}, {1, 3}, {2, 1}, {2, 3}, {3, 1}, {3, 2}
.
Я смог создать алгоритм с next_permutation
, но он работает оченьмедленно для n = 10, k = 4
(это то, что мне нужно).
Вот мой код:
#include <iostream>
#include <algorithm>
#define pb push_back
using namespace std;
int main() {
vector <int> s = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int k = 4; // (n = 10, k = 4)
map <string, int> m; // To check if we already have that variation
vector <string> v; // Variations
do {
string str = "";
for (int i = 0; i < k; i++) str += to_string(s[i]);
if (m[str] == 0) {
m[str] = 1;
v.pb(str);
}
} while (next_permutation(s.begin(), s.end()));
return 0;
}
Как я могу сделать алгоритм, который делает это быстрее?