2014-11-04 117 views
-1

我正在尋找一個非遞歸算法或C代碼來生成多個集合的所有組合(不知道這是否是正確的科學名稱)。例如:生成多個組合的組合

我有N = 2個的符號集:

set 1: [A, Y, Z] 
set 2: [1, Q] 

輸出應爲:

A1 
AQ 
Y1 
YQ 
Z1 
ZQ 

N可以變化一樣,同樣在特定的一組符號的數目。預先感謝任何幫助! :)

+1

您正在尋找[笛卡爾產品](http://en.wikipedia.org/wiki/Cartesian_product) – aioobe 2014-11-04 12:56:31

+0

謝謝!我沒有真正注意到這一點:)但我仍然有問題擴大計算接受無限數量的集合。只有兩個很容易,但對於N ...? – xba 2014-11-04 13:13:01

+0

如果到那時你還沒有收到回答,我會在晚上回到這個。 – aioobe 2014-11-04 13:56:36

回答

0

算法來自:How can I compute a Cartesian product iteratively?

我們可以把一個int數組,其長度爲n,int[ ] choose[n]跟蹤我們有多少元素的所有列表中選擇。所有元素初始設置爲0。

然後我們遍歷存儲所有這些數組的單向鏈表。如果我們迭代了數組ichoose[i]++中的元素,請將其附加到結果中。當選擇[i] ==數組i的長度,然後中斷並移動到下一個數組。

但是我不知道如何去追加,因爲每次迭代數組時,結果的大小都會擴大。

如果你已經知道了,請告訴我。