这个操作有名字吗?并且:是否存在封闭式表达式?
- 对于给定的 n 个元素集合,以及介于 1 和 n 之间的 k 值,
- 取 k 个项目的所有子集(组合)
- 找到每个子集的乘积
- 求所有这些产品的总和
我可以用 Python 表达这一点,并且很容易进行计算:
from operator import mul
from itertools import combinations
from functools import reduce
def sum_of_product_of_subsets(list1, k):
val = 0
for subset in combinations(list1, k):
val += reduce(mul, subset)
return val
我只是在寻找封闭形式的表达式,以避免在设置大小变大的情况下出现循环。
请注意,这与此问题不同:所有组合与每个组中的一个元素的乘积之和——该问题是关于笛卡尔积的乘积之和。我正在寻找大小为 k 的组合的乘积之和;我不认为他们是一样的。
需要明确的是,对于 set(a, b, c, d),则:
k = 4 --> a*b*c*d
k = 3 --> b*c*d + a*c*d + a*b*d + a*b*c
k = 2 --> a*b + a*c + a*d + b*c + b*d + c*d
k = 1 --> a + b + c + d
只求表情;无需专门提供 Python 代码。(如果您想提供示例实现,任何语言都可以说明。)