zoukankan      html  css  js  c++  java
  • 幂集合[集合论]

    补充:(改进:一种递归方法)http://www.cnblogs.com/tinaluo/p/5294341.html
    已知集合S,S的幂集合是指集合S所有子集的集合,用P(S)来表示,例如:

    P({0,1,2})={$,{0},{1},{2},{0,1},{0,2},{1,2},{0,1,2}};

    这让我想起二进制模拟,假如现在用算法模拟打印幂集合(空集除外),该怎么办呢?
    二进制模拟起到很好的作用,首先来看一下,二进制模拟是什么,如图:
    数组初始为0,循环在首位+1,按照二进制格式进位,最终会得到下面的可能:

    1  0  0  0  0
    0  1  0  0  0
    1  1  0  0  0...
    假如有3个元素,组合则有7种形式,加上空集,即为幂集合的所有可能性!

    /*-------完整代码@映雪-------*/
    
    #include <iostream>
    using namespace std;        
    int main()
    {
        int carry=1;
        int a[3]={0};/*状态数组*/
        int b[3]={0,1,2};/*集合数组*/
        int n=7;
        while(n>0)
        {        
            for(int i=0;i<3;i++)/*每次得到一种状态*/
            {
                a[i]+=carry;
                carry=a[i]/2;
                a[i]=a[i]%2;
                if(carry==0)
                break;
            }
            for(int j=0;j<3;j++)/*遍历数组状态,打印幂集*/
            {
                if(a[j]==1)
                cout<<b[j]<<" ";
            }
            cout<<endl;
            --n;
            carry=1;/*复位*/
        }
        return 0;
    }
  • 相关阅读:
    nginx 安装部署
    cordova 安装使用
    git 设置和取消代理
    SQL语句 合并列值 将一列的多个值合并成一行
    idea 注册码 地址:
    mac 安装redis
    redisTemplate 方法
    js 点击 隐藏弹出层
    windows 安装redis
    docker 安装redis
  • 原文地址:https://www.cnblogs.com/tinaluo/p/5260295.html
Copyright © 2011-2022 走看看