需要一种算法来查找数组中5个整数的所有子集,其总和在给定范围内

时间:2015-03-15 20:52:48

标签: arrays algorithm combinatorics

我有一个包含43个术语的数组,我需要找到5个术语的所有可能组合,其总和在特定范围内。

我查看过以前的帖子,并发现了类似的问题,但它们都有不适合我的问题的变体。

1 个答案:

答案 0 :(得分:3)

如果您的目标范围很大,那么您必须生成43个中的大多数选择5 = 962,598个5元组的43个元素。在电脑上,这通常不是太糟糕。

如果范围很窄,你可以做得更好。一个改进是制作元素三元组的排序列表,按照和,以及按元素排序的元素对的排序列表。对于每一对,取三元总和的连接子列表,给出总数在正确的范围内,过滤到这些三元组,使得对中使用的所有索引都大于三元组中使用的所有索引(以避免重复) 5元组和重复元素)。如果范围非常窄,对于n个元素数组而言,这可能需要大约c n ^ 3 log n步,而不是c n ^ 5.