【问题标题】:Build a specific number with summation of a few limited numbers用几个有限数字的总和构建一个特定的数字
【发布时间】:2014-05-21 19:47:45
【问题描述】:

我正在寻找一种可以帮助我解决这个问题的算法:

我需要创建一个系列,它将告诉我如何通过将数组中的数字与整数相乘来获得数字(输入)(可用于构建数字)。

让我们以数字“4”为例。将数组视为 [3,2]

所以算法应该给出一个输出为 0x3+2x2=4。

(我认为我的主要问题是当我创建输出时我看到 4 > 3 所以我的输出数组以 [1,..] 开头,这不能再工作了。)

【问题讨论】:

  • 还有哪些其他限制?他们可以是消极的吗?它们必须是整数吗?
  • 数组中只有正整数,只需要构建正整数
  • 对于给定约束的一般情况,这是不可能的。考虑目标 3 和输入 [2, 4]。没有可以满足2x + 4y = 3 的系数。一般来说,如果输入数组的最大公分母除以目标数,则可能有一个解决方案,通过欧几里得算法计算将是微不足道的。更具体地说,如果输入数组中有两个互质整数,则所有整数都有一个有效解。

标签: algorithm math


【解决方案1】:

这可以通过 linear integer programming

解决

给定一个数组(向量)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 应该是整数的要求,这个问题很容易解决。

【讨论】:

  • x1,x2,...,xn 应该不是整数是什么意思?你的意思是它应该是布尔值,所以每个数字只能使用一次吗?
  • @user3662339 不,如果他们能得到任何实数值(3, 4.3333, pi, ...)
  • 好吧,那会更容易,但这是不可能的:(
  • 如果 x1...xn 不必是非负数,这也很容易。 (这产生了完全不同类别的 ILP 算法。)
【解决方案2】:

假设系数必须是非负整数,一种算法是:

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

【讨论】:

  • 想解释一下吗?此外,您的算法似乎是针对长度为 2 的数组进行硬编码的(是这种情况)吗?如果是这样的话 - 这是问题的过度简化。
  • 是的,因为这是被问到的问题(求解一个有两个未知数的线性方程。
  • 我看不到它在哪里要求两个数字,它说“少数有限的数字”。只有示例显示了两个数字。
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
相关资源
最近更新 更多