Algorithm 生成由c+中整数的二进制表示给出的集合的所有子集+; 在C++中,我在寻找一种高效的算法来生成所有的整数,使得它们的二进制表示是由整数n的二进制表示给出的集合的子集。主要是因为N可能非常大

Algorithm 生成由c+中整数的二进制表示给出的集合的所有子集+; 在C++中,我在寻找一种高效的算法来生成所有的整数,使得它们的二进制表示是由整数n的二进制表示给出的集合的子集。主要是因为N可能非常大,algorithm,binary,subset,gray-code,Algorithm,Binary,Subset,Gray Code,我的一个想法是生成一个整数的所有可能子集,该子集对应于N的汉明权重,然后使用设p为popcount(N),即设置的位数,将它们移动到正确的位置。结果的数量是2P-2 将N视为布尔数组(位)。对于设置的每个位,生成两个子集:一个有该位集,另一个没有该位集。这可以递归完成,直到没有设置位为止 最后,从结果中放弃原来的N,也放弃0(根据您的示例) 时间复杂度与输出大小成线性关系,即O(2P)。As-is问题对于SO格式来说可能过于广泛。你应该试试计算机科学SE或类似课程。避免交叉张贴。

我的一个想法是生成一个整数的所有可能子集,该子集对应于N的汉明权重,然后使用设p为popcount(N),即设置的位数,将它们移动到正确的位置。结果的数量是2P-2

将N视为布尔数组(位)。对于设置的每个位,生成两个子集:一个有该位集,另一个没有该位集。这可以递归完成,直到没有设置位为止

最后,从结果中放弃原来的N,也放弃0(根据您的示例)


时间复杂度与输出大小成线性关系,即O(2P)。

As-is问题对于SO格式来说可能过于广泛。你应该试试计算机科学SE或类似课程。避免交叉张贴。