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之眼花缭乱的运算符
Sep 14 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
对python中的装包与解包实例详解
Aug 24 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
Python 捕获代码中所有异常的方法
Aug 03 Python
python hmac模块验证客户端的合法性
Nov 07 Python
Python实现机器学习算法的分类
Jun 03 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实现用于计算执行时间的类实例
2015/04/18 PHP
php实现数据库的增删改查
2017/02/26 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
JavaScript删除数组元素的方法
2015/03/20 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
Python判断操作系统类型代码分享
2014/11/22 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
浅析Python3 pip换源问题
2020/01/06 Python
快速查找Python安装路径方法
2020/02/06 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
五四青年节优秀演讲稿范文
2014/05/28 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
七个Python必备的GUI库
2021/04/27 Python
总结Python常用的魔法方法
2021/05/25 Python
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
使用Redis实现分布式锁的方法
2022/06/16 Redis