您正在寻找每个分区中包含一个元素的组合数量?
这只是 n1*n2*...*nk。
编辑:您似乎还问了一个单独的问题:
给定 N,我如何分配 n1, n2, ..., nk 以使它们的乘积最大化。这实际上不是线性优化问题,因为您的变量是相乘的。
它可以通过一些微积分来解决,即通过使用拉格朗日乘数对每个变量进行偏导数,并带有约束。
结果将是 n1 .. nk 应该尽可能接近相同的大小。
if n is a multiple of k, then n_1 = n_2 = ... = n_k = n/k
otherwise, n_1 = n_2 = ... = n_j = Ceiling[n/k]
and n_j+1 = ... = n_k = floor[n/k]
基本上,我们尝试将元素尽可能均匀地分配到分区中。如果他们平均分配,那就太好了。如果不是,我们尽可能均匀地划分,剩下的部分,我们给第一个分区每个额外的元素。(不必是第一个分区,这个选择相当随意。)这样,任何两个分区拥有的元素数量的差异最多为一个。
血腥细节:
这是我们希望最大化的乘积函数:
P = n1*n2*...nK
我们使用拉格朗日乘数定义一个新函数:
Lambda = P + l(N - n1 - n2 ... -nk)
并在每个 k n_i 变量中取偏导数:
dLambda/dn_i = P/n_i - l
在 l 中:
dLambda/dl = N - n1 -n2 ... -nk
设置所有偏导数 = 0,我们得到一个由 k + 1 个方程组成的系统,当我们求解它们时,我们将得到 n1 = n2 = ... = nk
一些有用的链接:
拉格朗日乘数
优化