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算法之栈(stack)的实现
Aug 18 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python编码类型转换方法详解
Jul 01 Python
Python 多线程Threading初学教程
Aug 22 Python
python中subprocess批量执行linux命令
Apr 27 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python 实现单通道转3通道
Dec 03 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 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
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
AngularJS快速入门
2015/04/02 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
python字符串对其居中显示的方法
2015/07/11 Python
详解Python进程间通信之命名管道
2017/08/28 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
CSS3 分类菜单效果
2019/05/27 HTML / CSS
建筑工程管理专业自荐信范文
2013/12/28 职场文书
小学生打架检讨书
2014/01/26 职场文书
开学寄语大全
2014/04/08 职场文书
管理提升方案
2014/06/04 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript