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实现的简单文件传输服务器和客户端
Apr 08 Python
python中set常用操作汇总
Jun 30 Python
Python正规则表达式学习指南
Aug 02 Python
Python3生成手写体数字方法
Jan 30 Python
深入理解Python爬虫代理池服务
Feb 28 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
Django用户身份验证完成示例代码
Apr 03 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 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获取网络文件的实现代码
2010/01/01 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
浅谈vue加载优化策略
2019/03/19 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python实现栈的方法
2015/05/26 Python
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
浅谈Python中的bs4基础
2018/10/21 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
Pycharm安装python库的方法
2020/11/24 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
抗洪抢险事迹材料
2014/05/06 职场文书
市政管理求职信范文
2014/05/07 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
工作证明格式及范本
2014/09/12 职场文书
学校通报表扬范文
2015/05/04 职场文书
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript