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获取远程文件大小的函数代码分享
May 13 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
python查看微信好友是否删除自己
Dec 19 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Django密码存储策略分析
Jan 09 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
使用matlab 判断两个矩阵是否相等的实例
May 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
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
浅谈Python 对象内存占用
2016/07/15 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
Android笔试题总结
2014/11/29 面试题
导师评语大全
2014/04/26 职场文书
产品销售计划书
2014/05/04 职场文书
新党章心得体会
2014/09/04 职场文书
学生检讨书
2015/01/27 职场文书
死者家属慰问信
2015/03/24 职场文书
公司聚餐通知
2015/04/22 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python