二进制表示的集合 枚举子集 的快速方法。

令要 枚举子集 的集合为S ,每一个二进制位表示一个元素是否存在。

则可 for (int S0 = S; S0; S0 = (S0 – 1)&S )

证明:

(S0 – 1)&S必然是S的子集

因为是从最后一位开始减小,所以(S0 – 1)&S必然是最十进制数位上最靠近S0的S的自己。

故可以用(S0 – 1) & S 来生成下一个子集并得到所有S的子集。

二进制表示的集合 枚举子集 的快速方法。》上有1条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>