求解幂集问题

幂集是集合的基本运算之一,由集合的所有子集构成的集合。例:n=3时,幂集是:
{{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}};
若是有限集,有n个元素,那么的幂集有2^n个元素.

【问题描述】
对于给定的正整数n(n≥1),求1~n构成的集合的所有子集(幂集).

【问题求解】
蛮力法①
采用直接蛮力法求解,将1~n的存放在数组a中,求解问题变为构造集合a的所有子集,设集合a[0…2]={1,2,3},其所有子集对应的二进制位及其十进制数如下。

<1>.对于含有n(n≥1)个元素的集合a,求幂集的过程如下:

for(i=0;i<2^n;i++)
{将i装换为二进制数b;输出b中为1 的位对应的a 元素构成一个子集;}

<2>.首先b[0…2]=000,每调用一次inc,b表示的十进制数增加1
算法如下

void inc(int b[],int n)  //将b表示的二进制数增1
{for(int i=0;i<n;i++)   //遍历数组b{   if(b[i])           //将元素1改为0b[i]=0;else              //将元素0改为1并退出for循环{  b[i]=1;break;}}
}

解释如下:

【完整算法代码】

#include<stdio.h>
#include<math.h>void inc(int b[],int n)  //将b表示的二进制数增1
{for(int i=0;i<n;i++)   //遍历数组b{   if(b[i])           //将元素1改为0b[i]=0;else              //将元素0改为1并退出for循环{  b[i]=1;break;}}
}void PSet(int a[],int b[],int n)  //求幂集
{ int i,j;int pw=(int)pow(2,n);           //求2^nprintf("1~%d的幂集:\n",n);for(i=0;i<pw;i++)               //执行2^n次 {printf(" { ");for(int k=0;k<n;k++)          //执行n次 if(b[k])printf("%d",a[k]);printf(" } ");inc(b,n);                     //b表示的二进制数增1 }printf("\n");
}int main(){int n=3;int a[10],b[10];for(int i=0;i<n;i++){a[i]=i+1;b[i]=0;} PSet(a,b,n);
}

时间复杂度:O(n*2^n)
●增量蛮力法②
采用增量蛮力法求解1~n的幂集,当n=3是的求解过程。

这种思路也是蛮力法求解:穷举1~n的所有子集。对应的过程如下:

void f(int n) //求1~n的幂集ps
{置ps={{}};  //在ps中加入一个空子集元素for(i=1;i<=n;i++){ps1=ps;在ps1的每个子集元素中添加i;将ps1的所有元素添加到ps中;}
}

【完整算法代码】

#include<stdio.h>
#include<vector>
using namespacestd;
vector<vector<int>> ps;   //用于存放幂集
void Pset(int n){vector<vector<int> > ps1;   //子幂集vector<vector<int> >::iterator it;   //迭代器 vector<int> s;  //添加空集元素 ps.push_back(s); for(int i=1;i<=n;i++){ps1=ps;   //ps1存放上一步骤得到的幂集 for(it=ps1.begin();it!=ps1.end();++it)    (*it).push_back(i);    //在ps1的每个集合元素末尾添加i for(it=ps1.begin();it!=ps1.end();++it)ps.push_back(*it);   //将ps1的每个集合元素添加到ps中 }
} 

时间复杂度:O(2^n)

求解幂集问题(c语言+蛮力法)相关推荐

  1. 使用蛮力法求解数字迷问题(类似ABCAB*A = DDDDDD)

    蛮力法概述 蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述>和所涉及的概念定义.是基于计算机运算速度快这一特性,在解决问题时采用的一种"懒惰"的策略.把问题的所 ...

  2. 蛮力法求解百元买百鸡问题

    蛮力法(brute force methord,也称穷举法或者枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述.所以,蛮力法也是最容易应用的方法. 蛮力法所依赖的基本技术是遍历(trav ...

  3. 蛮力法在求解最优解问题中的应用(JAVA)--旅行家问题、背包问题、分配问题

    蛮力法在求解最优解问题中的应用 1.TSP(旅行商问题)要求我们找出一条n个给定城市之间的最短路径,使我们再回到出发的城市之前,对欧每个城市都只访问一次.我们可以用赋权图来描述这个问题,那么算法的目的 ...

  4. 蛮力法查找有序数列c语言,算法——蛮力法之选择排序和冒泡排序c++实现

    这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出 ...

  5. 算法分析:采用蛮力法(循环) 求解最大连续子序列和问题。给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)

    一.效果图 二.源代码 package sy4; import java.util.Scanner; /** * @author * */ public class Sy4_2 { static vo ...

  6. 【算法】蛮力法/穷举法/枚举法 的基本问题分析

    炮兵问题的优化,设立逻辑数组 蛮力法设计思想 有策略地穷举 + 验证 制定穷举策略 避免重复 简单来说,就是列举问题所有可能的解,然后去看看是否满足题目要求,是一种逆向解题方式.(我也不知道答案是什么 ...

  7. 蛮力法求最大字段和时间复杂度_蛮力法

    蛮力法的主要思想就是用最简单的思路解决问题,一般性能不好,但仍然很重要. 理论上蛮力法可以解决可计算领域的各种问题 蛮力法解决较小规模问题是可接受的,如果设计一个更高效算法代价不值得 蛮力法可以作为时 ...

  8. 关于算法--蛮力法篇--选择排序

    近日开始学习算法,所看课本为清华大学出版社的<算法设计与分析基础>,对简单的数据结构进行了复习,已经学习了算法效率分析基础. 本篇开始对所学算法的思想进行实际JS编码,看学习的进度,每日写 ...

  9. 蛮力法的相关问题总结

    今天想写写关于蛮力法的一些问题,也给之后自己留下一个笔记. 蛮力法关键------依次处理所有元素 1.查找问题中的蛮力法 顺序查找 int SeqSearch(int r[],int n,int k ...

  10. 算法设计与分析-TSP六种方法-贪心算法(最近邻点、最短链接)、蛮力法、动态规划法、回溯法、分支限界法、模拟退火

    旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径, ...

最新文章

  1. 要求学生从事教学科研无关内容,把学生当廉价劳动力的导师将被严肃处理!...
  2. TensorFlow – A Collection of Resources
  3. 【解题报告】Leecode. 575. 分糖果——Leecode每日一题系列
  4. 通过分区在Kafka中实现订单保证人
  5. vue 中 created 和 mounted 钩子生命周期 问题
  6. “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法...
  7. 百度MP3音乐API接口及应用
  8. Linux内核分析第一周——计算机是如何工作的
  9. SQL Server问题之The remote procedure call failed. [0x800706be]
  10. 【呆萌の研究】JavaScript常见的继承方式
  11. java excel 合并两个单元格内容 无法换行_12个简单高效的EXCEL小技巧,让你秒变职场达人!...
  12. python操作数据库的几种方法_python对mysql数据库操作的三种不同方式
  13. python 逻辑运算的短路问题
  14. python如何用requests传送json格式数据
  15. creator qt 字体太小_QtCreator的一些自定义代码字体和颜色
  16. bjui—关闭dialog以及当前标签
  17. MySQL图书馆借书管理系统试题
  18. CUDA各个版本下载网址
  19. js 伪数组(类数组)与数组的区别
  20. raspios-bullseye-arm64 系统 BUG

热门文章

  1. 设计模式—生成器模式(建造者模式)
  2. Coredump-N, segfault at 0 ip 0000000000000000 sp; 被kernel 抓到
  3. 计算机音乐谱魔法城堡,《魔法城堡》简谱 TFBOYS 乐谱 - 新芭网
  4. [转]FTP搜索引擎的设计与实现
  5. 计算机专业交互式教学课件制作,简易交互式课件的制作
  6. SPPnet论文总结
  7. (java毕业设计)基于jsp旅游网站管理系统源码
  8. 世界首例AI同性婚姻惊呆众人 | Siri和Alexa结婚了
  9. 大智慧c语言dll,易语言大智慧dll模板接口
  10. 传动系统结构简图_液压传动系统结构示意图画图技巧(攻略)