python利用递归方法实现求集合的幂集


Posted in Python onSeptember 07, 2020

什么是集合的幂集?

就是原集合中所有的子集(bai包括全集du和空集)构成的集族。可数集是zhi最小的无限集; 它的幂集和实数dao集一一对应(也称同势),是不可数集。 

不是所有不可数集都和实数集等势,集合的势可以无限的大。如实数集的幂集也是不可数集,但它的势比实数集大。 设X是一个有限集,|X| = k,则X的幂集的势为2的k次方。

代码

def powSet(S):
 #创建列表a存储S中的元素
 a=[]
 for i in S:
  a.append(i)
 #判断S中是否只有一个元素,作为递归的终点
 if len(a)==1:
  return set([frozenset(),frozenset(a)])
 
 powset=set()
 #遍历S中的每一个元素
 	for i in range(len(a)):
  S.remove(a[i])
  temp = set()
 #取S中的这一个元素去掉,得到集合S的下一层(相当于S-1),认为S-1幂集已知。
 #将去掉的元素与S-1幂集中每一个元素都求并,得到新集合temp,temp和S-1的幂集求并便得到S的幂集
  for j in powSet(S):
   temp.add(j.union({a[i]}))
   powset = powSet(S).union(temp)
  S.add(a[i])
 return powset
 #验证
s=set([1,2,3])
print(powSet(s))

#结果
{{frozenset({2}), frozenset({2, 3}), frozenset({1, 2}), frozenset({1, 2, 3}), frozenset({3}), frozenset({1}), frozenset(), frozenset({1, 3})}}

需要知识

幂集的概念

python set 和 frozenset 数据类型

心得体会

笔者在写代码时遇到的问题是认为powSet(S-1)(S-1代表S中去掉任一个元素)就完完全全地替代了真正去掉那一个随机元素的元素组成的幂集。

实际上这样是不完全的,因为设置的递归规则有缺陷,不可能完全遍历所有情况。

解决:借助于集合元素的不可重复添加这一特性,我们可以遍历遍历所有S中的元素,都让它们进行一次递归操作,这样做虽然会产生n(S)次重复,但是它可以考虑到所有情况。

到此这篇关于python利用递归方法实现求集合的幂集的文章就介绍到这了,更多相关python递归方法求集合的幂集内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中单例模式总结
Feb 20 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
python开发一款翻译工具
Oct 10 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
这样写python注释让代码更加的优雅
Jun 02 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 #Python
python简单利用字典破解zip文件口令
Sep 07 #Python
python 如何快速复制序列
Sep 07 #Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 #Python
python 装饰器的实际作用有哪些
Sep 07 #Python
通俗讲解python 装饰器
Sep 07 #Python
彻底搞懂python 迭代器和生成器
Sep 07 #Python
You might like
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Numpy之文件存取的示例代码
2018/08/03 Python
python散点图实例之随机漫步
2018/08/27 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python类的实例化问题解决
2019/08/31 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
初中作文评语
2014/12/25 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
JavaScript实现两个数组的交集
2022/03/25 Javascript