Python求子集和问题
习题 子集和问题-1:写出集合A = [5, -2, 4, 2]的所有子集。
1.定义一个函数get_sub(list),传入参数为一个列表list:
def get_subs(list): # 定义函数,传入一个参数res = [] # 用于保存所有的子集for i in range(2**len(list)): # 循环遍历从1到该集合长度的平方的所有整数sub = [] # 用于保存一个子集for j in range(len(list)): # 用于移位运算(方便移位的自增)if (i >> j) % 2 == 1: # 移位运算,将二进制位作为传入参数list集合的倒序映射sub.append(list[j]) # (7)0111,有1的部位表示子集中list[0]、list[1]、list[2]存在,list[3]不存在res.append(sub) # 调用列表的append()方法将得出的子集添加到结果中return res # 返回结果
2.在主函数中调用该函数:
if __name__ == "__main__": # 定义主函数A = [5, -2, 4, 2] # 定义一个列表list1 = get_subs(A) # 调用函数求子集和print(list1) # 输出结果
3.最后的结果为:
[[], [5], [-2], [5, -2], [4], [5, 4], [-2, 4], [5, -2, 4], [2], [5, 2], [-2, 2], [5, -2, 2], [4, 2], [5, 4, 2], [-2, 4, 2], [5, -2, 4, 2]]
习题 子集和问题-2:写出集合A = [5, -2, 4, 2]中,子集和等于k(整数)的所有子集的集合。
1.定义一个函数get_sub_equals_sum(items, k),传入参数为一个集合items和一个整数k:
def get_sub_equals_sum(items, k): # 定义函数,传入两个参数result = [] # 用于保存满足条件的子集N = len(items) # 获得传入的集合items的长度for i in range(2**N): # i从0~2的N次方循环(包括0,不包括2的N次方)sub = [] # 定义一个列表,用于临时保存每个子集的元素for j in range(N): # 可移位的范围是0~N(包括0,不包括N)if(i >> j) % 2 == 1: # 右移位运算,二进制数最低位为1,则不能被2整除,所以该位置元素存在(右移j位,则在二进制数左边添加j个0,右边去掉j位)sub.append(items[j]) # 当集合中对应的下标第j位元素存在,则被添加到sub中形成子集if sum(sub) == k: # 调用sum(iterable)函数求可遍历的sub中所有元素的和(即子集和),若子集和等于kresult.append(sub) # 则将该子集添加到结果列表中return result # 返回结果列表
2.在主函数中调用该方法求得结果:
if __name__ == "__main__": # 定义主函数A = [5, -2, 4, 2] # 定义一个列表list2 = get_sub_equals_sum(A, 2)list3 = get_sub_equals_sum(A, 7)
3.输出结果为:
[[-2, 4], [2]]
[[5, -2, 4], [5, 2]]
Python求子集和问题相关推荐
- python求子集_【算法07】求子数组的最大和
题目:输入一个整型数组,数组里面有正数也有负数,数组中的连续一个或者多个整数组成一个子数组,每一个子数组都有一个和,求所有子数组和的最大值.要求时间复杂度为O(n). 例如:输入数组为{1,-2,3, ...
- Python 求最大子集的递归实现
Python 求最大子集的递归实现 def PowerSetsRecursive(items): """Use recursive call to return all ...
- python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总
Python求算数平方根和约数的方法汇总 一.求算术平方根 a= x=int(raw_input('Enter a number:')) if x >= : while a*a < x: ...
- python中求最小公约数,python求最大公约数和最小公倍数的简单方法
python求最大公约数和最小公倍数的简单方法 python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于 ...
- 全排列算法(无重复数字全排列/有重复数字全排列)/ 组合算法/ 求子集算法
写在前面 全排列 1 无重复数字全排列 1.1 紫书版本 1.2 回溯法 2 有重复数字全排列 复盘易错点(可跳过) 写在前面 很久很久以前就想写的一篇博客,因为懒一直没开工,但是学习全排列算法算是我 ...
- python判断素数的函数_如何用python求素数
如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...
- 数字拆分问题算法回溯_回溯算法:求子集问题!
给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/le ...
- 递归/回溯:Subsets II求子集(有重复元素)
上一篇描述了针对数组中没有重复元素进行子集的求取过程递归/回溯:subsets求子集 但是当出现如下数组时: 例如: nums[] = [2, 1, 2, 2] 结果为: [[], [1], [1,2 ...
- python求微分方程组的数值解曲线01
本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, ...
最新文章
- ffmpeg m4a 转pcm_FFmpeg提取视频音频python将音频转文字
- 浅谈分布式计算的开发与实现
- 聋哑六年级计算机课教学进度计划,小学六年级下册信息技术教学计划三篇
- php oracle count,调用Count列php mysql
- ESP8266 问题
- cakephp视图用php文件,CakePHP - 扩展视图( Extending Views)
- Python正则表达式集锦
- Android-源码剖析CountDownTimer(倒计时类)
- CSS中margin和padding的区别
- ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)
- 爬虫之基于线程池异步抓取
- 零信任风口来了,新一代企业安全架构革新势在必行
- “飞天、无影、小蛮驴…”带你走进2020云栖大会
- signature=2d36ad490c0d9e19a6dc808d43a34033,Matemàtica discreta : problemes resolts
- ubuntu16.04 每次开机都显示“System program problem detected”
- Remap 后的 USART1 不能发送数据
- 字符编码(一):序言
- 【转】VBA编程入门(二)
- 10分钟看明白大M法和两阶段法
- 华中科技大学计算机组成原理教材,2017华中科技大学《计算机组成原理》考研套装资料...