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引用(import)文件夹下的py文件的方法
Aug 26 Python
Python实现的ini文件操作类分享
Nov 20 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
Python中的变量和作用域详解
Jul 13 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
对python sklearn one-hot编码详解
Jul 10 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
Python语言中的数据类型-序列
Feb 24 Python
python中 .npy文件的读写操作实例
Apr 14 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 mysql 判断update之后是否更新了的方法
2012/01/10 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
《Python学习手册》学习总结
2018/01/17 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
什么是Web Service?
2012/07/25 面试题
幸福家庭事迹材料
2014/02/03 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
文秘个人求职信范文
2014/04/22 职场文书
村党支部换届选举方案
2014/05/02 职场文书
个人自荐材料
2014/05/23 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
毕业典礼主持词
2015/06/29 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript