对于下面的数学模型,我有一个优化问题。它类似于求一个给定周长的矩形的最大面积,但在这个例子中,我们没有两个变量。
我有X个正整数,它们的和是Y。在给定Y的情况下,我怎样才能找到能给出最大乘法的整数集呢?
示例:
给定Y = 8,答案应该是X[1] = 2; x[2] = 3; x[3] = 3,因为这将给我最大的乘法。
有没有针对这类问题的python代码/逻辑?
发布于 2013-06-14 23:45:21
设n是项数,s是总数。用s // n填充大小为n的列表,并在最后一个s % n元素上加1。这给出了具有最大乘积的列表。
max_list = [s//n] * (n - s%n) + [s//n + 1] * (s%n)发布于 2013-06-15 01:47:23
确实,“乘法的最大值将是所有值最接近相等的值时”,正如前面的答案中所述,并通过
max_list = [s//n] * (n - s%n) + [s//n + 1] * (s%n)
在另一个答案中。这可以通过类似于证明算术平均值到几何平均值不等式的技术来证明,例如在Proof by Pólya中。
当给定总和Y而不是项数X,并且希望计算X时,可以观察到当W = e ≃ 2.71828时pow(W,Y/W)是最大的。最接近e的整数是3,因此为了最大化乘积,请主要包括3,以及一个或两个2。通常,当Y%3为1时包括两个2,当Y%3为2时包括一个2,当Y%3为0时没有,并用3弥补差值。示例(在形式中,Y:a b…对于和Y和项a,b,...)包括3: 3、4: 2 2、5: 3 2、6:3 3、7: 3 2 2、8: 3 3 2、9:3 33、10: 3 3 2 2等。
发布于 2013-06-14 23:14:38
乘法的最大值将是所有值都最接近相等的值。
X = [Y // 3 for i in range(3)]
difference = Y - X[0] * 3
if difference == 2:
x[0] += 1
X[1] += 1
elif difference == 1:
X[0] += 1
print (X)
Output:
Y = 8
X = [3, 3, 2]
Y = 9
X = [3,3,3]
Y = 10
X = [4,3,3]https://stackoverflow.com/questions/17111611
复制相似问题