回溯算法-02遍历所有组合方式问题
遍历所有的组合方式
- 简介
- 经典的数学组合问题,对应之前的排列问题。
- 问题描述
- 现在有四本书为A,B,C,D,要求选出两本,输出所有的选择情况。
- 问题分析
- 和之前一样,如果试求组合数目,那么DP将会是一个不错的选择,但是DP不是很擅长这种序列输出的题。
- 其实,这还是个回溯题,因为每一步的问题都是一样的只不过参数不一样罢了。
- 每一步都是在剩余书籍中挑出一本。
- 与之前的排列问题不同之处在于选过的书本不可以选了,也就是选了AB,B后面的选择就没有A了。
- 实现与排列类似
- 代码
# -*-coding:utf-8-*-# -*-coding:utf-8-*-result = []def solve(array, number, solution):global resultif len(solution) == number:# 表示所有书都分配完毕,输出答案result.append(solution)returnfor i in range(len(array)):new_solution = solution + [array[i]]new_array = array[i+1:]solve(new_array, number, new_solution)if __name__ == '__main__':input = ['A', 'B', 'C', 'D']solve(input, 2, [])for item in result:print(item)print("共{}种组合".format(len(result)))
- 运行结果
- 补充说明
- 具体代码可以查看我的Github,欢迎Star或者Fork
- 参考书《你也能看得懂的Python算法书》
- 书中错误已经修改
回溯算法-02遍历所有组合方式问题相关推荐
- 回溯算法-01遍历所有排列方式问题
遍历所有排列方式 前言 回溯采用试错的方法解决问题,一旦发现当前步骤失败,回溯算法就返回上一个步骤,继续另一种方案继续试错. 回溯算法的优点是速度快,没有尝试所有路径就可能找到答案.当然,如果运气不好 ...
- 算法训练Day24 | 回溯算法理论基础;LeetCode77.组合(经典的回溯问题)
目录 回溯算法理论基础 1. 什么是回溯法 2. 回溯法的效率 3. 回溯法解决的问题 4. 如何理解回溯法 5. 回溯法模板-- 回溯三部曲 6. 总结 LeetCode77.组合 1. 思路 2. ...
- 回溯算法解子集、组合、排序
转载labuladong:力扣 代码方面,回溯算法的框架: result = [] def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor ...
- 回溯算法(全排列、组合、N皇后问题)
回溯算法(全排列.N皇后问题) 暴力穷举,这是不可避免,因为回溯法没有重复子结构,所以其时间复杂度大于等于O(N!): 前言 本文章内容部分参考公众号labuladong关于回溯算法的讲解,仅为笔者日 ...
- Suzy找到实习了吗 Day24 | 回溯算法开始啦:回溯的理论知识,77组合(有一个问题没有解决)
回溯算法理论 回溯算法解决的问题 组合问题 切割问题 子集问题 排列问题 棋盘问题 算法模板 函数没有返回值 业界给回溯算法命名:backtracking 算法伪代码模板 def backtracki ...
- 【回溯算法】【打卡第179道】:leetCode :39. 组合总和(数组中的元素可以重复使用)
1.题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式 ...
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- 小白易懂的回溯算法!!!
1.什么是回溯算法? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法, ...
- [学习记录]回溯算法及其应用
目录 一.简介 二.回溯算法的应用 三.回溯算法的模板 四.回溯算法解决子集问题 (一)子集问题描述 (二)问题解决 (三)代码实现 (四)剪枝操作 五.回溯算法解决分割问题 一.简介 回溯与递归是相 ...
最新文章
- 八种常见排序方法总结 C/C++代码实现
- 两个计算机系统安装,如何在一台电脑上同时重装两个系统|戴尔电脑怎么安装两个系统...
- Java-reflect(反射)初步理解_1
- python网页表格读取_是否可以读取网页html表格数据?
- 收藏 | 图像处理Transformer:华为诺亚、北大等IPT模型,刷榜
- 【剑指Offer】29、最小的K个数
- Twisted入门教程(10)
- JavaScript的实现
- 电商系统中商品模型与类目体系设计
- C++使用librdkafka创建消费者和生产者
- 魔百盒ZXV10 B863AV3.2-M/B863AV3.1-M2_S905L3A-B_线刷+卡刷精简固件
- dcs常用的冗余方式_DCS系统冗余技术讲解
- win7 x64部署和串口调试虚拟驱动toaster
- 萌言萌语|测试工作日报及总结
- Eclipse 查看类继承和实现关系(包括子类)
- 水星路由器设置成交换机
- base-64 字符数组的无效长度
- 血脂测试软件,血脂检测,最全解读!
- Vue 和 React 的区别
- bpmn不带网关的流程
热门文章
- MyBatis 源码解读-会话创建过程
- MyBatis 源码解读-reflectorFactoryElement()
- RocketMQ消息存储的整体结构
- Tomcat集群快速入门:Nginx+Tomcat搭建集群
- Bootstrap全局css样式_按钮
- Java8函数式编程(2)--流与管道
- 财政指标是什么意思_in the black是“在黑暗中”吗?那in the dark是什么意思?
- 【报错笔记】使用MultipartFile 出现异常:java.lang.ClassNotFoundException: org.apache.commons.fileupload...
- python 网络爬虫requests模块
- 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案