很抱歉,如果这是重复的,但我没有找到任何符合我的答案。
考虑我有一个包含3个值的向量。我想从这个向量构造另一个指定长度的向量。例如,假设长度n=3
和向量包含以下值0 1 2
。我期望的输出如下:
0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2
我当前的实现只是根据n
构造循环并生成预期的输出。我希望能够在输入向量中构造不同长度和不同值的输出向量。
我已经查看了使用next_permutation
的可能实现,但不幸的是,传递长度值似乎不起作用。
是否有时间和复杂性算法可用于此案例?同样,我可能会计算n=17
以及6
周围的向量尺寸。
以下是n=3
的实施情况。这里,enc
是包含输入的向量。
vector<vector<int> > combo_3(vector<double>enc,int bw){
vector<vector<int> > possibles;
for (unsigned int inner=0;inner<enc.size();inner++){
for (unsigned int inner1=0;inner1<enc.size();inner1++){
for (unsigned int inner2=0;inner2<enc.size();inner2++){
cout<<inner<<" "<<inner1<<" "<<inner2<<endl;
unsigned int arr[]={inner,inner1,inner2};
vector<int>current(arr,arr+sizeof(arr)/sizeof(arr[0]));
possibles.push_back(current);
current.clear();
}
}
}
return possibles;
}
答案 0 :(得分:0)
你在做什么是简单的计算。将输出向量视为数字列表(向量的向量)列表。每个数字可能有一个 m 不同的值,其中 m 是输入向量的大小。
这不是排列生成。生成每个排列意味着生成输入向量的每个可能的排序,这不是您正在寻找的。 p>
如果您认为这是一个计数问题,答案可能会让您更清楚。例如,如何生成5位数的所有基数为10的数字?在这种情况下,输入向量的大小为10,输出列表中的每个向量的长度为5。