//一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示。
//把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中
//依据计数的乘法原理这样的排列数有2^N个,也就是一个有N个不重复元素的集合有2^N个子集。
//而这种10表示方式刚好与N元的二进制串一一对应。
public class CombinationAll
{
    public static void main(String[] args)
    {
        //指定集合的元素个数N
        int N=Integer.parseInt(args[0]);
        //使用一个长度为N的一维数组来表示N元的2进制串
        int[] bin=new int[N];
        //并从00...000开始,到11..111结束。
        //由于检查11...111会花费较多的比较,改用计数器来实现。
        for(int i=0;i<N;i++)
            bin[i]=0;
        show(bin);
        //计数器标识还剩多少个子集没有列出
        double Total=Math.pow(2,N)-1;
        //二进制串每次增加1,计数器每次减1
        int i;
        while(Total>0)
        {
            //从低位向高位找到第一个0,然后将这个0变成1,将这个位置后面的1全变成0
            for(i=N-1;i>=0 && bin[i]==1;i--)
                bin[i]=0;
            bin[i]=1;
            show(bin);
            Total--;
        }
    }
   
    //显示这个数组中的二进制串
    private static void show(int[] bin)
    {
        for(int i=0;i<bin.length;i++)
            StdOut.printf("%d",bin[i]);
        StdOut.println();
    }
}

转载于:https://www.cnblogs.com/longjin2018/p/9868595.html

排列组合-生成集合的所有子集相关推荐

  1. python数字排列组合去重_排列组合-生成集合的所有子集

    //一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...

  2. python排序函数set_【Python】排列组合itertools 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

  3. python生成排列组合_Python 排列组合生成

    zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...

  4. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  5. 【Python基础】Python中的高效迭代库itertools,排列组合随便求

    本文目录 一.模块概述 二.组合生成器 2.1 product 2.2 permutations 2.3 combinations 2.4 combinations_with_replacement ...

  6. 二进制子集生成与排列组合

    二进制子集生成与排列组合 咳咳,二进制我觉得很有必要单独列出来,二进制的玩法还是很多的,比较多的就是表示多重状态,因为只有1和0的存在,每一位可以表示可取或者不可取,还能配合排列组合使用,来试试. 首 ...

  7. LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...

  8. 【组合数学】排列组合 ( 集合排列、分步处理示例 )

    文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...

  9. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )

    文章目录 一.排列组合内容概要 二.选取问题 三.集合排列 四.环排列 五.集合组合 参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排 ...

最新文章

  1. 35个高级Python知识点总结
  2. python 斐波拉契递归 尾递归 备忘录 动态规划 迭代
  3. HTMLCSS设计与构建网站 笔记HTML
  4. Liferay 用PortletSession 实现不同Liferay之间通讯
  5. Python常见十六个错误集合,你知道那些?
  6. python 进程编程速成
  7. Ajenti-Linux控制面板之自动化运维工具
  8. oracle 监听 无法连接,oracle监听hang,无法建立新连接TNS-12540
  9. 相似基因(洛谷-P1140)
  10. pythonurllib的使用_python re和urllib的使用问题。
  11. vue +element 导出多级表头(标题)
  12. sqlserver安装介质上文件的长路径名称失败_SQL Server 2012 软件安装教程
  13. Vue:不使用webpack情况下将Cesium引入到Vue项目中
  14. python解题工程力学_工程力学学习指导与解题指南(普通高等教育十三五规划教材)...
  15. 进程间通信方式 超详细解析全站最全
  16. 2.1 软件开发生命周期模型
  17. python hist2d_Matplotlib(hist2D)中的2D直方图是如何工作的?
  18. 信息安全产品体系的介绍
  19. Anchor Boxes
  20. 「Linux-基础」CentOS8 权限管理

热门文章

  1. 第 5 章 输入输出管理
  2. linux安装挂载samba,【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
  3. mac. mysql 设置root_Mac平台重新设置MySQL的root密码
  4. c++ 获取当前时间_ThinkPHP6中获取参数的3种常用方法【总结】
  5. 软件工程 java实现_软件工程作业——WC Java实现
  6. windows python安装包_Python-3.9安装包(windows版)
  7. c语言 结构体声明和引用、,结构体的声明与自引用
  8. 查一个字段中字符集超过30的列_Mysql 的字符集以及带来的一点存储影响
  9. 分组聚合查询两门以上MySQL_MySQL中的分组聚合查询
  10. 安卓10侧边返回_Flyme 8 体验:可能是最好的国产安卓系统