发电集算法?
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
i
个位置。这样它就创建了一个数字,其中只设置了第 i
位。
- 接下来执行按位运算,当且仅当该位也设置为
n
时,结果不为零。
- 你终于执行了那个检查。
如果你用二进制计数,最终所有可能的 0 和 1 的组合都会被枚举:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
这是从集合打印 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
i
个位置。这样它就创建了一个数字,其中只设置了第i
位。 - 接下来执行按位运算,当且仅当该位也设置为
n
时,结果不为零。 - 你终于执行了那个检查。
如果你用二进制计数,最终所有可能的 0 和 1 的组合都会被枚举:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111