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 相关文章推荐
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
Python简单定义与使用二叉树示例
May 11 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Django 创建/删除用户的示例代码
Jul 24 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python使用正则表达式实现爬虫数据抽取
Aug 17 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python爬虫定时计划任务的几种常见方法(推荐)
Jan 15 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
php简单的会话类代码
2011/08/08 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PDO::query讲解
2019/01/29 PHP
PHP实现文件上传与下载
2020/08/28 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
2014道德模范事迹材料
2014/02/16 职场文书
英语故事演讲稿
2014/04/29 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript