对于集合求其所有子集

学过集合我们都知道
对于一个元素个数为n的集合而言,其所有子集的个数是2ⁿ+1个
巧的很的是对于这个问题,如果说你一开始不知道怎么下手
而有对二进制有所了解的话
经过一小段时间的对视那就会发现其和二进制会有多么的相近
为什么这么讲
二进制 是关于2的一个计数进制 满二进一这是我们所知道的
一个三位的二进制 其范围是 0-8 共九个数
集合中有三个数,其中所有的情况是2³+1 =9种
在这里插入图片描述
对于一个三个元素的集合而言
其子集的情况可以通过
一个三位数的二进制来模拟表示
每个元素在子集中是否出现
一个n个元素的集合的子集个数
可以完全对应于 n位的二进制数的所有整数位

看到这里 就不难想到 集合的所有子集情况可以借助二进制来获得
由代码获得
在这里插入图片描述

算法思想 来自于此

贴个python算法

#coding=gbk

n = int(input("想要创建一个多大的集合:"))

lst = [None]*n

for i in range(n):#自动补入n个元素
	lst[i] = i+1
		
for i in range(2**len(lst)):#循环2的n次方
	n = i  
	j = 0		
	print('(',end = '')
	while(n):
		i = n % 2
		if i :
			print(lst[j] , end = '')
		j += 1
		n = int(n/2)
	print(')', end = '')
 

这是一种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值