没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
1页
什么是集合的幂集? 就是原集合中所有的子集(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()
资源详情
资源评论
资源推荐
python利用递归方法实现求集合的幂集利用递归方法实现求集合的幂集
什么是集合的幂集什么是集合的幂集?
就是原集合中所有的子集(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装饰器结合递归原理解析python实现文法左递归的消除方法python如何停止递归
weixin_38740391
- 粉丝: 6
- 资源: 961
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论10