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操作Access数据库基本步骤分析
Sep 19 Python
简单了解OpenCV是个什么东西
Nov 10 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python爬取个性签名的方法
Jun 17 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
Python Selenium截图功能实现代码
Apr 26 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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之第一天
2006/10/09 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python的pdb调试命令的命令整理及实例
2017/07/12 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python随机取list中的元素方法
2018/04/08 Python
pytorch 数据集图片显示方法
2018/07/26 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
Python装饰器用法与知识点小结
2020/03/09 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
综合测评自我鉴定
2013/10/08 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
化工见习报告范文
2014/10/31 职场文书
法人代表证明书范本
2015/06/18 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸