項的所有組合比方說,這些都是啓動陣列:如何找到多個陣列
[a,b,c]
[d]
[e,f]
什麼算法可以產生以下數組?
[a,d,e]
[a,d,f]
[b,d,e]
[b,d,f]
[c,d,e]
[c,d,f]
啓動數組的數量可能會有所不同。
項的所有組合比方說,這些都是啓動陣列:如何找到多個陣列
[a,b,c]
[d]
[e,f]
什麼算法可以產生以下數組?
[a,d,e]
[a,d,f]
[b,d,e]
[b,d,f]
[c,d,e]
[c,d,f]
啓動數組的數量可能會有所不同。
取決於語言,但正式這樣的事情(如你指定的時候,你有3個陣列)
for el1 in first_array do
for el2 in second_array do
for el3 in third_array do
begin
create new element in result array as [e1, el2, el3]
end
簡單是最好的解決方案:) –
你能想到的最簡單的算法是,你可以有最好的。由於答案的大小,所有這些數組的乘數維度可以在這裏做出很大的改進。我個人建議使用遞歸,因爲數組的數量不能太大,而不會使得結果數組的數量真的很大。
另一種方法是圖形化方法,您從原始集合開始,順時針移動其內容並存儲組合。示例首先旋轉最後一行,並在最後一次旋轉後移動最後一行(本例中爲d,但不能旋轉它),因此您將旋轉第一行。這就像二進制和。
[a,b,c] [a,b,c]---->[b,c,a] [b,c,a]---->[c,a,b] [c,a,b]
[d] [d] [d] [d] [d] [d]
[e,f]------>[f,e]------>[e,f]------>[f,e]------>[e,f]------>[f,e]
PD:你只能保存每個陣列永遠是第一要素。
讓有分別ķ陣列Ñ,正 ... N ķ元件。
編寫所有組合非常喜歡在mixed radix中編寫所有數字。
所以,簡單地遍歷所有可能的數字從0到(N ň ... N ķ -1),它從你的陣列採取「數字」混合基數表示寫下來 - 只需要兩個嵌套循環。
它被稱爲[笛卡爾積](http://en.wikipedia.org/wiki/Cartesian_product),但沒有太多的算法,只需遍歷嵌套循環中的所有集合(如果數字的集合是固定的並且事先已知)或者使用遞歸。 – biziclop