-1
我正在尋找一個非遞歸算法或C代碼來生成多個集合的所有組合(不知道這是否是正確的科學名稱)。例如:生成多個組合的組合
我有N = 2個的符號集:
set 1: [A, Y, Z]
set 2: [1, Q]
輸出應爲:
A1
AQ
Y1
YQ
Z1
ZQ
N可以變化一樣,同樣在特定的一組符號的數目。預先感謝任何幫助! :)
我正在尋找一個非遞歸算法或C代碼來生成多個集合的所有組合(不知道這是否是正確的科學名稱)。例如:生成多個組合的組合
我有N = 2個的符號集:
set 1: [A, Y, Z]
set 2: [1, Q]
輸出應爲:
A1
AQ
Y1
YQ
Z1
ZQ
N可以變化一樣,同樣在特定的一組符號的數目。預先感謝任何幫助! :)
算法來自:How can I compute a Cartesian product iteratively?
我們可以把一個int數組,其長度爲n,int[ ] choose[n]
跟蹤我們有多少元素的所有列表中選擇。所有元素初始設置爲0。
然後我們遍歷存儲所有這些數組的單向鏈表。如果我們迭代了數組i
,choose[i]++
中的元素,請將其附加到結果中。當選擇[i] ==數組i的長度,然後中斷並移動到下一個數組。
但是我不知道如何去追加,因爲每次迭代數組時,結果的大小都會擴大。
如果你已經知道了,請告訴我。
您正在尋找[笛卡爾產品](http://en.wikipedia.org/wiki/Cartesian_product) – aioobe 2014-11-04 12:56:31
謝謝!我沒有真正注意到這一點:)但我仍然有問題擴大計算接受無限數量的集合。只有兩個很容易,但對於N ...? – xba 2014-11-04 13:13:01
如果到那時你還沒有收到回答,我會在晚上回到這個。 – aioobe 2014-11-04 13:56:36