我想在 C# 或 C++ 中提取数组的所有可能子集,然后计算所有子集数组各自元素的总和,以检查其中有多少等于给定数字。
我正在寻找的是算法。我确实理解这里的逻辑,但我现在还无法实现这一逻辑。
考虑一组S
of N
元素,以及给定的子集,每个元素要么属于该子集,要么不属于该子集。因此有2^N
可能的子集(如果包括原始集和空集),并且存在来自二进制表示中的位的直接映射x
之间0
and 2^N
到 中的元素x
第一个子集S
.
一旦您弄清楚如何枚举给定子集的元素,添加值就很简单了。
用于查找等于总数的子集t
对于大N
,一种优化可能是记录那些超过的子集t
,并且不测试任何这些的正确超集。测试是否设置数量x
是集合的超集y
可以通过单个按位运算和整数比较来实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)