首页 > 其他分享 >一种子集枚举方式的正确性说明

一种子集枚举方式的正确性说明

时间:2023-03-15 11:22:35浏览次数:30  
标签:cdots 正确性 枚举 1b 子集 2b mathrm

一种常见的枚举子集的方法是

for(int S = SET; S; S = (S-1) & SET)

其中,变量 \(\rm {S}\) 是所枚举的子集

考虑 \(\rm {S}\) 的二进制展开

\[\mathrm {S}=(b_1b_2b_3\cdots b_k)_2 \]

假设其二进制展开下的最低位的 \(1\) 在第 \(p\) 位

\[\mathrm {S}=(b_1b_2b_3\cdots b_p\cdots b_k)_2 \]

归纳一下,假设该枚举方式可以枚举到 \(b_1b_2b_3\cdots b_p\) 不变时的所有子集,也就是,枚举了只有 \(b_{p+1} b_{p+2}\cdots b_k\) 不同的所有子集

那么令 \(\mathrm {S}\leftarrow \mathrm{S} - 1\)

也就是把 \(\mathrm {S}\) 的第 \(b_p\) 位变为 \(0\),\(b_{p+1}b_{p+2}\cdots b_k\) 中所有数变为 \(1\)

这个时候再令 \(\mathrm {S}\leftarrow \mathrm{S}\operatorname {and} \mathrm{SET}\)

就把 \(b_{p+1} b_{p+2}\cdots b_k\) 变成初始集合中的状态

继续该过程,可以枚举 \(b_1b_2b_3\cdots b_{p-1}\) 不变且 \(b_p=0\) 时 \(b_{p+1}b_{p+2}\cdots b_k\) 的所有情况

合起来就是枚举了只有 \(b_pb_{p+1}b_{p+1}\cdots b_k\) 中存在变化的所有子集

初始状态时,考虑最低位的 \(1\) 可以发现该做法显然正确,这可以说明该做法是正确的

标签:cdots,正确性,枚举,1b,子集,2b,mathrm
From: https://www.cnblogs.com/lostintianyi/p/17217839.html

相关文章

  • 回溯算法解决排列—组合—子集问题
    回溯算法解决排列—组合—子集问题无论是排列、组合还是子集问题,就是让你从序列nums中以给定规则取若干元素,主要有以下几种变体:元素无重不可复选,即nums中的元素都......
  • CFR 反编译 Java 枚举
    CFR到这里下载。运行如下命令使用当前文件夹下的cfr-0.152.jar反编译当前文件夹下的T.class。java-jarcfr-0.152.jarT.class--sugarenumsfalse其中--sugarenum......
  • JavaSE-day02(面向对象:内部类,枚举,泛型)
    一、内部类内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。当一个类的内部,包含一个完整的事物,且......
  • 力扣---78. 子集
     给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。 示例1:输入:nums=......
  • java 枚举类
    1.枚举概念:一个类中对象是可数的就是枚举2.枚举关键字:enum枚举类名3.枚举的常用方法:获取枚举值 3.1枚举类名称.对象名称3.2枚举类名称.values......
  • 【LeetCode回溯算法#07】子集问题I+II,巩固解题模板并详解回溯算法中的去重问题
    子集力扣题目链接给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输......
  • 关于字典-用反射将字典动态生成枚举
    在Java中,枚举(enum)的值是在编译时固定的。因此,不能直接基于字典动态生成枚举。但是,可以使用Java的反射机制来实现类似的效果。以下是一个简单的示例importjava.lang.refl......
  • MFC-EnumWindows枚举顶层窗口
     BOOLCALLBACKEnumWindowsProc(HWNDhwnd,LPARAMlParam)//回调函数//参数1:EnumWindows函数自动传过来的句柄//参数2:就是EnumWindows函数参数2的值{......
  • Windows 11提示“无法枚举容器中的对象。”
    *为什么会出现这一错误提示?*在Windows系统当中,对文件或文件夹的权限进行设置可以有效地保护隐私内容。登录管理员账户可以对权限进行更改,并且有权决定是否将内容共享给......
  • 78.子集
    子集给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1......