查找列表中添加到目标的所有可能元素组合的有效方法

时间:2017-11-18 07:26:37

标签: algorithm performance optimization data-structures

我遇到的情况是,我需要在列表中找到所有可能的数字组合,这些组合在添加时等于目标。例如,考虑一个列表 - (4,6,10,20,30,40)和目标= 20.所以可能的组合是(4,6,10)和(20)。

我考虑过的优化很少:

  • 忽略列表中>>的所有项目目标
  • 添加列表中的所有数字,如果总和< =目标则  如果sum = target则返回整个列表(因为这将是添加时等于目标的唯一组合)  否则无法从列表中的数字确定总和。
  • 继续查找列表中的所有子集,添加时等于目标。

上述逻辑适用于较小的列表(大小不超过10)。但在最坏的情况下,该列表最多包含100个元素,然后我需要查看2 ^ 100种可能的组合(这也可能导致计数器的整数溢出,跟踪子集的数量),这将减慢程序的速度。计算子集将为O(2 ^ n)n =列表的大小,增长顺序为指数。

有没有更好的方法来解决更大的列表的这个问题?我正在寻找一种通用的方法来解决这个问题,而不使用任何语言特定的功能。任何帮助或建议表示赞赏。

0 个答案:

没有答案