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之入门(五)缩进和选择
May 27 Python
简单的编程0基础下Python入门指引
Apr 01 Python
Python中random模块用法实例分析
May 19 Python
python简单实现刷新智联简历
Mar 30 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
python实现学生管理系统
Jan 11 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
浅谈Python3中print函数的换行
Aug 05 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 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
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
php生成rss类用法实例
2015/04/14 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
php图像验证码生成代码
2017/06/08 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
Python查询IP地址归属完整代码
2017/06/21 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python 下载及安装详细步骤
2019/11/04 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
村长贪污检举信
2014/04/04 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
行为规范主题班会
2015/08/13 职场文书
Python闭包的定义和使用方法
2022/04/11 Python
德生2P3收音机开箱评测
2022/04/30 无线电