我想知道是否存在一种算法,可以使用目标总和来计算排序列表(允许浮动和重复)的“所有可能组合”,如果没有任何组合等于目标总和,则该算法在多项式或伪多项式时间内,将最接近总和(下限)的“所有可能组合”返回到目标总和。 我检查了多项式时间的Balsub算法“具有权重的背包线性问题的时间算法”和“子集总和的更快的伪多项式时间算法”,但是我不确定这些问题在时间复杂度方面是否相同。
这是一个示例:
Sorted List: {1.5, 2.25, 3.75, 3.81}
Target = 3.79
Results: {1.5, 2.25}, {3.75} = 3.75
谢谢
答案 0 :(得分:0)
我不知道。
对于带有小整数的子集和的通常的伪多项式解的想法是,尽管有很多组合,但要考虑的和相对较少。因此,我可以按子集总和存储我们得出该总和的最后一个索引和值的列表。然后,我可以找到目标答案,并向后走数据结构以创建中间子集总和和索引+值的列表,这些列表正在到达最终目标答案。这给了我们一个表示有限状态机的数据结构,以产生所有可能的答案。我们可以通过动态编程将其向前发展,以产生一个答案或一堆答案,或者递归枚举它以给出所有答案。 (知道所有答案通常都很长。)
浮点数的问题在于,现在有大量子集和大量中间和。那把戏不起作用。您可以将数字四舍五入,然后得出接近目标的近似答案。但是它们将是近似的,正确的答案仍然是大海捞针。
对不起。