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的ORM框架SQLObject入门实例
Apr 28 Python
Python在图片中添加文字的两种方法
Apr 29 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
总结Pyinstaller打包的高级用法
Jun 28 Python
Python实现仓库管理系统
May 30 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP HTML代码串 截取实现代码
2009/06/29 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
原生JS实现天气预报
2020/06/16 Javascript
Python深入学习之特殊方法与多范式
2014/08/31 Python
Python实现多线程抓取妹子图
2015/08/08 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
解析Python3中的Import
2019/10/13 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
美国性感女装网站:bebe
2017/03/04 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
SQL Server面试题
2013/04/04 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
abstract class和interface有什么区别
2013/08/04 面试题
求职信需要的五点内容
2014/02/01 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
南京导游词
2015/02/03 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
公开致歉信
2019/06/24 职场文书