组合值的算法

时间:2011-03-21 12:12:53

标签: algorithm math

我正在尝试为给定问题编写算法:

我们得到一组数字 - {n1,n2,n3,n4,n5 ......} 我们必须检查我们是否可以使用给定数字的加法和减法得出一个数字(Say X)。 X将始终小于给定集合的所有元素。

例如

设置:{2,3,4,6,9}
给定数字:1,结果:是
9-4-4 = 1

设置:{3,4,6,9}
给定数字:2,结果:是
6-4 = 2

提前致谢。

2 个答案:

答案 0 :(得分:3)

实际上,您正在寻找由您的集合中的数字生成的ideal。整数形成principal ideal domain,这意味着每个理想都是由一个整数生成的。你所要做的就是找到这个单个整数 - 比如g - 并检查X是否可以用g分割。查找g也很容易 - 它是集合中所有元素的最大公约数,可以使用Euclidean algorithm找到。

您的示例集可以通过加法和减法生成每个整数,因为它可以生成1.例如,对于集合{3,4,6,9},您有1 = 4-3,并且可以写入任何整数n是n = 4-3的总和。

答案 1 :(得分:0)

假设,从您的第一个示例开始,您可以多次使用数字。

给定数字必须是您所设定的GCD的倍数。这是唯一的条件。无论多大都没关系。

如果您只想要是/否答案,那么找到GCD就足够了。如果您还想要给定数字的表达式,则可以通过查找GCD的表达式来替换该问题。

GCD = X+Y+..+Z-T-U-...-V