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 17 Python
Django实现表单验证
Sep 08 Python
Python一行代码实现快速排序的方法
Apr 30 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
python如何实现复制目录到指定目录
Feb 13 Python
Python %r和%s区别代码实例解析
Apr 03 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
django中cookiecutter的使用教程
Dec 03 Python
详解NumPy中的线性关系与数据修剪压缩
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函数
2010/02/16 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python模拟百度登录实例详解
2016/01/20 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
python实现词法分析器
2019/01/31 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
涨价通知
2015/04/23 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby