生成功率集算法?

时间:2015-02-25 07:53:51

标签: algorithm data-structures

这是从Set

打印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

任何人都可以解释我的意思 计数器中的位已设置。

谢谢:)

1 个答案:

答案 0 :(得分:1)

数字位于以二进制表示法表示的计算机中。例如,5表示为:

00000000101

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

例如,您可以测试i位是否"设置" (意思是等于1),使用以下测试:

(n&(1<<i)) != 0
  1. 您首先将1 i个位置向左移动。这样它就会创建一个只设置i位的数字。
  2. 接下来,您执行按位并且结果与零不同,当且仅当该位也设置为n时。
  3. 最后你执行检查。
  4. 如果算上二进制,最终将枚举零和一个的所有可能组合:

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