我有以下数学模型的优化问题。它类似于在给定其周长的情况下找到矩形的最大面积,但在此示例中我们没有2个变量。
我有X
个正整数,其总和为Y
。如何找到给出Y
给出的最大乘法的整数集?
示例:
鉴于Y = 8
答案应为X[1] = 2; x[2] = 3; x[3] = 3
,因为这样会给我最多的乘法。
这种问题的任何python代码/逻辑?
答案 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]