发电集算法?

Generating Power Set Algorithm?

这是从集合打印 PowerSet 的算法

Input: Set[], set_size

1. Get the size of power set
   powet_set_size = pow(2, set_size)

2  Loop for counter from 0 to pow_set_size
     (a) Loop for i = 0 to set_size

          (i) If ith bit in counter is set
              Print ith element from set for this subset
     (b) Print seperator for subsets i.e., newline

谁能给我解释一下如果 计数器中的第 i 位已设置。

谢谢:)

数字在计算机中以二进制表示法表示。例如5表示为:

00000000101

因为第零位是一,第二位也是。因此 2^0+2^2=5.

例如,您可以使用以下测试来测试第 i 位是否为 "set"(意味着它等于 1):

(n&(1<<i)) != 0
  1. 您首先向左移动 1 i 个位置。这样它就创建了一个数字,其中只设置了第 i 位。
  2. 接下来执行按位运算,当且仅当该位也设置为 n 时,结果不为零。
  3. 你终于执行了那个检查。

如果你用二进制计数,最终所有可能的 0 和 1 的组合都会被枚举:

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111