[英]Build a specific number with summation of a few limited numbers
我正在寻找一种可以帮助我解决这个问题的算法:
我需要创建一个序列,该序列将告诉我如何通过将每个数与整数相乘来对数组中的数字进行加乘运算来得到数字(输入)。
让我们以数字“ 4”为例。 将数组视为[3,2]
因此,该算法的输出应为0x3 + 2x2 = 4。
(我认为我的主要问题是在创建输出时看到4> 3,所以我的输出数组以[1,..]开头,这将不再起作用。)
这可以通过线性整数编程解决
给定一个数组(向量) c = (c1,c2,...,cn)
和一个数字k
,您正在寻找x = (x1,x2,...,xn)
使得c [dot] x = k
,这是等效于c1x1 + c2x2 + ... + cnxn = k
的矩阵符号。
优化问题是:
find x1,...,xn that maximizes:
c1x1 + c2x2 + ... + cnxn
subject to:
c1x1 + c2x2 + ... + cnxn <= k
x1 >= 0, x2>= 0, .... , xn >= 0
请注意,整数编程是NP-Hard ,但是仍然有很好的算法可以解决它,并且如果您放弃x1,x2,...,xn应该为整数的要求,那么这个问题很容易解决。
假设系数必须为非负整数,则一种算法为:
a*x + b*y = c
given c, x, y
for i = 0 to floor(c/x)
if (i*x - c) % b == 0 // answer found
b = (i*x - c) / b
break;
next
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.