习题 子集和问题-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求子集和问题相关推荐

  1. python求子集_【算法07】求子数组的最大和

    题目:输入一个整型数组,数组里面有正数也有负数,数组中的连续一个或者多个整数组成一个子数组,每一个子数组都有一个和,求所有子数组和的最大值.要求时间复杂度为O(n). 例如:输入数组为{1,-2,3, ...

  2. Python 求最大子集的递归实现

    Python 求最大子集的递归实现 def PowerSetsRecursive(items): """Use recursive call to return all ...

  3. python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总

    Python求算数平方根和约数的方法汇总 一.求算术平方根 a= x=int(raw_input('Enter a number:')) if x >= : while a*a < x: ...

  4. python中求最小公约数,python求最大公约数和最小公倍数的简单方法

    python求最大公约数和最小公倍数的简单方法 python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于 ...

  5. 全排列算法(无重复数字全排列/有重复数字全排列)/ 组合算法/ 求子集算法

    写在前面 全排列 1 无重复数字全排列 1.1 紫书版本 1.2 回溯法 2 有重复数字全排列 复盘易错点(可跳过) 写在前面 很久很久以前就想写的一篇博客,因为懒一直没开工,但是学习全排列算法算是我 ...

  6. python判断素数的函数_如何用python求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  7. 数字拆分问题算法回溯_回溯算法:求子集问题!

    给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/le ...

  8. 递归/回溯:Subsets II求子集(有重复元素)

    上一篇描述了针对数组中没有重复元素进行子集的求取过程递归/回溯:subsets求子集 但是当出现如下数组时: 例如: nums[] = [2, 1, 2, 2] 结果为: [[], [1], [1,2 ...

  9. python求微分方程组的数值解曲线01

    本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, ...

最新文章

  1. ffmpeg m4a 转pcm_FFmpeg提取视频音频python将音频转文字
  2. 浅谈分布式计算的开发与实现
  3. 聋哑六年级计算机课教学进度计划,小学六年级下册信息技术教学计划三篇
  4. php oracle count,调用Count列php mysql
  5. ESP8266 问题
  6. cakephp视图用php文件,CakePHP - 扩展视图( Extending Views)
  7. Python正则表达式集锦
  8. Android-源码剖析CountDownTimer(倒计时类)
  9. CSS中margin和padding的区别
  10. ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)
  11. 爬虫之基于线程池异步抓取
  12. 零信任风口来了,新一代企业安全架构革新势在必行
  13. “飞天、无影、小蛮驴…”带你走进2020云栖大会
  14. signature=2d36ad490c0d9e19a6dc808d43a34033,Matemàtica discreta : problemes resolts
  15. ubuntu16.04 每次开机都显示“System program problem detected”
  16. Remap 后的 USART1 不能发送数据
  17. 字符编码(一):序言
  18. 【转】VBA编程入门(二)
  19. 10分钟看明白大M法和两阶段法
  20. 华中科技大学计算机组成原理教材,2017华中科技大学《计算机组成原理》考研套装资料...

热门文章

  1. Java初学者作业——分析计费规则后,编写程序输入乘坐出租车的时间和里程数,计算里程价格
  2. 计算机配置时间怎么查,电脑怎么查看系统安装日期 查询电脑系统安装日期及系统运行时间的方法...
  3. 计算机视觉——图像视觉显著性检测
  4. python 回文数判断
  5. 这么多年终于可以在2月14号过一回节了
  6. 存储与数据库 | 字节青训营笔记
  7. 【微信小程序】-- 生命周期(二十八)
  8. 北京经济适用房与廉租房申请标准出台
  9. Docker容器之网络详解
  10. Athena电商系统(21)——Athena生产环境部署