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字符串关键点
Dec 13 Python
python实现简单淘宝秒杀功能
May 03 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
python基于opencv检测程序运行效率
Dec 28 Python
django序列化时使用外键的真实值操作
Jul 15 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
详解Python描述符的工作原理
Jun 11 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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实现维护文件代码
2007/06/14 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
java解析json方法总结
2019/05/16 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
经贸专业毕业生求职信
2014/03/23 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
地心历险记观后感
2015/06/15 职场文书
大学运动会加油稿
2015/07/22 职场文书
上班旷工检讨书
2015/08/15 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python