最多总和为'k'的子序列

Subsequence having sum at most 'k'

本文关键字:      更新时间:2023-10-16

给定一个大小为n的非递减数组 A 和一个整数 k,如何找到数组A的子序列S,其元素的最大可能总和,使得这个总和最多为k如果有多个这样的子序列,我们只对找到一个感兴趣。

例如,设数组为 {1, 2, 2, 4},因此,n = 4,设 k = 7。那么,答案应该是{1,2,4}。

蛮力方法大约需要 O(n(2^n-1((,但有没有更有效的解决这个问题的方法?

在一般情况下,答案是否定的。

只是确定是否存在元素总和为k的解决方案等效于子集和问题,因此已经是 NP 完备的。

子集和问题可以等价地表述为:给定整数或 自然数w_1,... ,w_n它们中的任何子集的总和精确到W

但是,如果表示最大数量w所需的n或位数P很小,则可能有更有效的解决方案(例如,如果P很小,则基于动态规划的伪多项式解决方案(。此外,如果您的所有数字 w 都是正数,那么也可能找到更好的解决方案。

相关文章:
  • 没有找到相关文章