获取阵列的所有产品

时间:2017-05-21 19:08:13

标签: algorithm combinations

如何计算阵列的所有产品并为每种组合返回两种产品?

数组:

[2, 2, 3, 4]

输出:

1, 2*2*3*4
2, 2*3*4
2*2, 3*4
2*2*3, 4
2*2*4, 3
2*3, 2*4

我希望我的输出包含所有这些内容。任何想法,伪代码,代码都是受欢迎的。

1 个答案:

答案 0 :(得分:3)

由于某些因素会重复出现,因此您需要考虑其多重性,以避免重复某些产品。

根据需要对数组进行排序并计算多重性(连续相等的值)。

然后,假设k个具有相应多重性Mk的不同值,您将模拟k个嵌套循环,每个循环从0到Mk(包括0和Mk)。对于此仿真,请考虑所有初始化为0的计数器数组。然后递增第一个计数器,当它达到其最大值时,重置它并进入下一个计数器。如果下一个计数器达到最大值,重置它并进入下一个...

使用这些计数器作为因子的指数并计算产品。第二个数字是所有因子除以第一个数字的乘积。

E.g。

Values:         2, 3, 4
Multiplicities: 2, 1, 1

Counters:
  000
  100
  200
  010
  110
  210
  001
  101
  201
  011
  111
  211

First numbers:
  1
  2
  2²
  3
  2.3
  2²3
  4
  2.4
  2²4
  3.4
  2.3.4
  2²3.4

Second numbers = 2²3.4 / First numbers

产品对的总数等于乘数加1的乘积,(M1 + 1)(M2 + 1)...(Mk + 1)。