考慮具有三個陣列的情況下:如何從數組中生成組合?
X = {A , B , C};
Y = {D , E , F};
Z = {G , H , I};
如何生成從這些三個陣列的所有可能的組合(C++或Python),即就像
C1 = {A , D , G};
C2 = {A , D , H};
...
C4 = {A, E , G};
...
C10 = {B , D , G};
...
...
考慮具有三個陣列的情況下:如何從數組中生成組合?
X = {A , B , C};
Y = {D , E , F};
Z = {G , H , I};
如何生成從這些三個陣列的所有可能的組合(C++或Python),即就像
C1 = {A , D , G};
C2 = {A , D , H};
...
C4 = {A, E , G};
...
C10 = {B , D , G};
...
...
嘗試此
from itertools import product
x = {'a', 'b', 'c'}
y = {'d', 'e', 'f'}
z = {'g', 'h', 'i'}
for a in product(x, y, z):
print(a)
如果您想要更加務實,從多個集合中獲取所有組合可以通過嵌套循環完成。在蟒蛇,它會是這樣
for e1 in x:
for e2 in y:
for e3 in z:
print((e1, e2, e3))
如果你不事先知道有多少iterables存在,你可以讓他們追加到一個列表中的程序運行,然後運行product(*args)
,例如
items = [x, y]
items.append(z)
for a in product(*items):
print(a)
如果我在運行時間之前不知道輸入數組會怎麼樣? –
我的意思是我不知道我將與多少個陣列合作 –
您可以在STL內部使用算法頭,使用next_permutation函數可以生成所有可能的組合。警告:它只會產生一個排列,您將不得不在循環中使用它。你可以在這個鏈接上看到該功能的文檔。 Generating Permutation
「組合」功能遞歸地工作以找到答案。只要把所有的元素稱爲「ARR」一個數組,我認爲有6大小下面是山楂的例子使用的功能:
#include <iostream>
#include <vector>
using namespace std;
void combinations(string arr[], int len, int startPosition, string result[]){
if (len == 0){
cout <<"{";
for (int i = 0; i < 2; i++) {
cout << result[i] <<", ";
}
cout << result[2]+ "}" << endl;
return;
}
for (int i = startPosition; i <= 6-len; i++){
result[3 - len] = arr[i];
combinations(arr, len-1, i+1, result);
}
}
int main(int argc, const char * argv[]) {
string arr[] = {"A","B","C","D","E","F"};
string temp[3];
combinations(arr, 3, 0, temp);
}
我認爲你正在尋找笛卡爾乘積。看這裏.https://stackoverflow.com/questions/533905/get-the-cartesian-product-of-a-series-of-lists – Tico
@Tico謝謝這正是我正在尋找..如果有一個C++的實現它也會很棒。 –
@Julien謝謝這正是我所期待的。如果有一個C++的實現,它也會很棒。 –