使用Python的“如何在给定其周长的情况下找到矩形的最大区域”的变体

时间:2013-06-14 15:07:22

标签: python algorithm optimization modeling mathematical-optimization

我有以下数学模型的优化问题。它类似于在给定其周长的情况下找到矩形的最大面积,但在此示例中我们没有2个变量。

我有X个正整数,其总和为Y。如何找到给出Y给出的最大乘法的整数集?

示例:

鉴于Y = 8答案应为X[1] = 2; x[2] = 3; x[3] = 3,因为这样会给我最多的乘法。

这种问题的任何python代码/逻辑?

3 个答案:

答案 0 :(得分:2)

设n为项数,s为总和。使用s // n填充大小为n的列表,并将1添加到最后s % n个元素。这将为您提供最大产品列表。

max_list = [s//n] * (n - s%n) + [s//n + 1] * (s%n)

答案 1 :(得分:1)

确实,“当所有值最接近相等值时,乘法的最大值”,如前一个答案中所述,并通过实施 max_list = [s//n] * (n - s%n) + [s//n + 1] * (s%n)
在另一个答案。这可以通过类似于证明算术平均值与几何平均不等式的技术来证明,例如(例如)Proof by Pólya

当给出和Y但不给出项X的数量,并且希望计算X时,在pow(W,Y/W)时观察W = e ≃ 2.71828是最大的。最接近e的整数是3,因此为了最大化产品,主要包括3个,一个或两个2。通常,当Y%3为1时包括两个2,当Y%3为2时包括两个2,当Y%3为0时包括两个2,并且用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 3 3],[10:3 3 2 2]等等。

答案 2 :(得分:0)

当所有值最接近相等值时,乘法的最大值将是。

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]