给定一个N
非负整数列表,提出一种算法来检查X
列表中数字的总和是否等于剩余的N-X
。
换句话说,涉及整个集合的子集和问题的更简单情况。
尝试的解决方案
按降序对列表的元素进行排序。将变量初始化SUM
为第一个元素。删除第一个元素(最大,a(1)
)。让a(n)
表示n-th
当前列表中的元素。
虽然 list 有多个元素,
使
SUM
等于SUM + a(1)
或SUM - a(1)
,以最接近的为准a(2)
。(其中最接近的均值|a(2) - SUM_POSSIBLE|
是最小值)。删除
a(1)
.
如果SUM
等于-a(1)
或a(1)
,则存在线性和。
问题
我似乎无法解决上述算法,如果它是正确的,我想要一个证明。如果它是错误的(更有可能),有没有办法在线性时间内完成?
PS:如果我做错了什么,请原谅:S