Math 分区中可能的组合数

Math 分区中可能的组合数,math,combinatorics,linear-programming,Math,Combinatorics,Linear Programming,给定的是大小为n的集合S,该集合被划分为大小为n1,…,nk的类(s1,…,sk)。自然地,它认为n=n1+…+nk 我感兴趣的是找出可以组合此分区元素的方法的数量,以便每个组合只包含每个类的一个元素 因为我可以从s1中选择n1元素,从s2中选择n2元素等等,所以我正在寻找任意n1,…nk的max(n1*.*nk)的解,其中n1+..+nk=n 我觉得这是一个线性优化问题,但我已经很久没有在大学里学过这个了。我希望有人记得如何计算它。您正在寻找每个分区中一个元素的组合数 这就是n1*n2*…*n

给定的是大小为n的集合S,该集合被划分为大小为n1,…,nk的类(s1,…,sk)。自然地,它认为n=n1+…+nk

我感兴趣的是找出可以组合此分区元素的方法的数量,以便每个组合只包含每个类的一个元素

因为我可以从s1中选择n1元素,从s2中选择n2元素等等,所以我正在寻找任意n1,…nk的max(n1*.*nk)的解,其中n1+..+nk=n


我觉得这是一个线性优化问题,但我已经很久没有在大学里学过这个了。我希望有人记得如何计算它。

您正在寻找每个分区中一个元素的组合数

这就是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

我们使用拉格朗日乘数定义了一个新函数:

λ=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

一些有用的链接:

--马库斯克

另外,对于你给出的S={1,2,3,4},n=4,k=2的例子,这给出了:

floor(4/2)^(2 - 4 mod 2)*ceil(4/2)^(4 mod 2)
floor(2)^(2 - 0)*ceil(2)^(0)
2^2 * 2^0
4 * 1
4
…如你所愿

为了澄清这一点,该公式给出了分区生成的置换数量,以及置换的最大可能数量。当然,还会有其他不太理想的划分

对于给定的周长,面积最大的矩形是最接近正方形的矩形(在更高的维度中也是如此),这意味着您希望边的长度尽可能接近相等(例如,所有平均长度向上或向下四舍五入)。然后可以看出公式为:

   (length of short sides)^(number of short sides)
times
   (length of long sides)^(number of long sides)
这就是满足此约束的超矩形的体积


注意,以这种方式查看时,它还告诉您如何构造最大分区。

这里似乎有两个独立的问题。组合总数的解决方案如下所述。这里还有一个优化问题?我希望下面的内容能有所帮助。这是一个微积分的话题,需要花一段时间来复习,但简而言之就是这样。非常感谢Rob。这似乎有助于我更接近一个解决方案。如果您有后续问题,请在中添加另一条评论(或编辑问题,如果您愿意)。我在下面的问题中放弃了很多微积分,但结果是:如果n是k的倍数,那么n1=n2=…=如果没有,情况也不会复杂得多。那么n1=n2=…=nj=天花板[n/k]和n_j+1=n_j+2=…=n_k=floor[n/k]其中j=n mod kNo,问题是我不知道前面的n1,…,nk。对于每个n,我想知道最大最坏的情况。例如,设S={1,2,3,4},然后我可以分成两部分,使得n1=0,n2=4或n1=1,n2=3或n1=2,n2=2或。最后一个分区产生了4个组合,这是我要寻找的值。哦,我看到了优化的作用。编辑输入。嗨,马库斯。非常感谢你的回答。这似乎是在正确的轨道上,但是,如果我没有弄错的话,那么你的公式就不能给出正确的答案,例如,对于n=6和k=3。你的公式是8,但我最多只计算6个组合,例如,对于分区1 | 23 | 456。@ericbodden 12 | 34 | 56给出8。我的理解是你在寻找最大值,对吗?哦,我的错。你是对的。显然我错过了那个案子。谢谢你介意给我两句话解释一下这个公式为什么有效吗?@ericbodden没问题。如果你喜欢,你介意点击复选标记指定这是被接受的答案吗?非常感谢,这对我来说很有意义。
   (length of short sides)^(number of short sides)
times
   (length of long sides)^(number of long sides)