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通过正则查找微博@(at)用户的方法
Mar 13 Python
Pyhton中单行和多行注释的使用方法及规范
Oct 11 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
Python装饰器基础概念与用法详解
Dec 22 Python
python开发游戏的前期准备
May 05 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
Python3 翻转二叉树的实现
Sep 30 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
keras输出预测值和真实值方式
Jun 27 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实现创建微信自定义菜单的方法示例
2017/07/14 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
js登录弹出层特效
2014/03/07 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
js实现文字滚动效果
2016/03/03 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
详解redux异步操作实践
2018/08/15 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
Python的多态性实例分析
2015/07/07 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
python psutil监控进程实例
2019/12/17 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
财务副总经理工作职责
2013/11/25 职场文书
大学入学感言
2015/08/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
MySQL基础(一)
2021/04/05 MySQL
python中opencv实现图片文本倾斜校正
2021/06/11 Python