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之复习if语句
Oct 02 Python
python中Flask框架简单入门实例
Mar 21 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
简单了解Python生成器是什么
Jul 02 Python
Python3常用内置方法代码实例
Nov 18 Python
python实现指定ip端口扫描方式
Dec 17 Python
python内打印变量之%和f的实例
Feb 19 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
总结Python常用的魔法方法
May 25 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/02/14 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Prototype Function对象 学习
2009/07/12 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
Python中的sort()方法使用基础教程
2017/01/08 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
市场推广策划方案
2014/06/02 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书