项的所有组合比方说,这些都是启动阵列:如何找到多个阵列
[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