У меня есть пары (a1, b1), (a2, b2) ..... (an, bn) Я хочу сгенерировать все 2^n списков. С рекурсией это легко и похоже на нахождение всех перестановок строки, но я хочу сделать это итеративно. Пожалуйста, предложите мне способ сделать это.Создание списка из пар
Чтобы быть ясным, первое место списка может быть a1 или b1, второе место может быть a2 или b2 .. i-е место может быть ai или bi .... n-е место будет a или bn.
Пример: (a1 a2 .... an) (b1 b2 ..... bn) (b1 a2 ... a) (a1 b2 ..... an) (все 2^n списки)
вот пример рекурсивного кода для n = 3.
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
void compute(int a[][2],int i,vector<int> v)
{
if(i==3)
{
for(int j=0;j<v.size();j++)
cout<<v[j]<<" ";
cout<<endl;
return;
}
for(int j=0;j<=1;j++)
{
if(j==1) v.pop_back();
v.push_back(a[i][j]);
compute(a,i+1,v);
}
}
int main()
{
float ans=0;
int a[3][2];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=1;j++)
cin>>a[i][j];
}
vector <int> v;
compute(a,0,v);
}
Я хочу использовать повторяющийся код для повышения производительности как с точки зрения скорости и, что более важно на пространстве, потому что теперь я должен передать по значению, так что новый вектор v создается каждый раз, а код не будет работать если я пройду по ссылке
Просто перефразируйте, вы хотите, чтобы итеративный алгоритм генерировал все перестановки в списке. Где в этом конкретном случае это список пар. –
Можете ли вы показать s.th. вы пробовали? Ваш вопрос довольно неясен. –
http://stackoverflow.com/questions/2390954/how-would-you-calculate-all-possible-permutations-of-0-through-n -iteratively –