[回溯法] 回溯法介绍-回溯与递归的区别
原文链接:https://www.yuque.com/cppdev/algo/loeps2
【回溯法】
- 有一类问题,我们不知道它明确的计算法则。而是先进行试探,试探到最终状况,发现不满足问题的要求,则回溯到上一个状态继续试探。这种不断试探和回溯的思想,称为回溯法(Backtrcking)
- 此类问题包括:求最优解、一组解、全部解。例如八皇后问题
【回溯的算法思想】一直往下走,然后再一步步往回走
面对一个问题,每一步有多种做法。先做其中一个做法,然后再此基础上一直做下去,把这个做法的所有可能全部做完,再回来,做第二种做法。
【例子】
- 深度优先搜索
- 求一个序列的幂集
- 八皇后问题
- 涂色问题
【回溯法实质】它的求解过程实质上是先序遍历一棵“状态树”的过程。只不过,这棵树不是遍历前预先建立的,而是隐含在遍历过程中。如果认识到这点,很多问题的递归过程设计也就迎刃而解了。
【回溯与递归的区别】回溯这个算法思想可以由递归这个算法结构来实现
递归 | 回溯 |
---|---|
是一种算法结构 | 是一种算法思想,可以用递归来实现 |
递归即是自己调用自己或间接调用自己 | 回溯就是一种试探,类似于穷举,但是回溯比穷举少很多计算量,俗称剪枝 |
例如计算阶乘问题: n ! = ( n − 1 ) ! ∗ n n!=(n-1)!*n n!=(n−1)!∗n |
例如求和问题:给定7个数字(1、2、3、4、5、6、7),在7个数字中选几个数字,令它们的和等于8 我们可以从小到大搜索,选择1+2+3+4=10>8,已经超过8,之后567就没必要继续了。此时就是一种搜索过程优化 |
相关博客:https://blog.csdn.net/u014772862/article/details/51789015
[回溯法] 回溯法介绍-回溯与递归的区别相关推荐
- c语言 用回溯算法解决01背包问题,回溯法解决01背包问题
<回溯法解决01背包问题>由会员分享,可在线阅读,更多相关<回溯法解决01背包问题(21页珍藏版)>请在人人文库网上搜索. 1.回溯法解决01背包问题,回溯法解决01背包问题, ...
- python回溯算法_什么是回溯法,Python解法交流?
只有去多做题,才能慢慢掌握.力扣leetcode-cn.com LeetCode 上的解释 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 ...
- 算法设计与分析-TSP六种方法-贪心算法(最近邻点、最短链接)、蛮力法、动态规划法、回溯法、分支限界法、模拟退火
旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径, ...
- 回溯和递归的区别(简述)
回溯和递归的区别(简述) 前言 递归和回溯 最后 前言 最近在LeetCode上刷题刷到了递归实现的回溯算法,产生疑惑:这两者有什么区别呢?在网络上阅读了一些相关的文章,总结了一些: 递归和回溯 递归 ...
- 链表反转的四种方法(栈、头插法、三指针法、递归法)
单链表反转或转置的四种方法 链表的反转实质上是反转链表上的内容: 若链表存储的数据是:1->2->3->4->5; 那么反转后则是:5->4->3->2-&g ...
- 数据结构与算法 | 快速排序:Hoare法, 挖坑法,双指针法,非递归, 优化
前两章讲解了排序中的选择排序和插入排序,这次就来讲一讲交换排序中的快速排序. 快速排序时间复杂度:平均 O(nlogn) 最坏 O(n2) 快速排序,顾名思义,它的排序的效率是非常高的,在数据十分杂乱 ...
- php pcre回溯攻击,PHP利用PCRE回溯次数限制绕过某些安全限制 | 码农网
*本文原创作者: phith0n ,本文属FreeBuf原创奖励计划,未经许可禁止转载 这次 Code-Breaking Puzzles 中我出了一道看似很简单的题目pcrewaf,将其代码简化如下: ...
- 荣耀战魂冥界回归服务器维护,荣耀战魂万圣节活动冥界的回归玩法及奖励介绍...
荣耀战魂万圣节活动"冥界的回归"除了将现有玩法加入了万圣节节日气氛之外,还新增了"无限战场"的每周任务,并且更新了活动奖励,下面小编带来万圣节活动冥界的回归玩法 ...
- 【JY】推开土木工程振型求解之兰索斯法(Lanczos法)的大门
一.写在文前 [前言]子空间迭代法可同时求解几个极端特征值和相应的特征向量,但它有收敛较慢,运算量较大,积累误差的缺点:随后,人们对其作了进一步的研究,出现了预处理子空间迭代法,这种方法的运算量较之子 ...
最新文章
- [hdu 1561] The more, The Better
- 网站出现大量死链时该如何进行处理?
- python:从入门到实践-----外星人入侵的图片问题
- 2016/11/10 kettle概述
- python第三方库文件传输_Python第三方库在Excel文件读写中的应用
- python no module named pandas_【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy...
- Linux下开源邮件系统Postfix+Extmail+Extman环境部署
- MySQL数据库基础理论
- ios 基础知识点总结
- idea安装插件时一直转解决方法
- C# CAD批量转换为图片
- 你对软件测试了解多少?这篇文章会给你不一样的启示!
- EBS系统打补丁(Patch)
- keil5里错误怎么解决Undefined symbol STM32_Control (referred from main.o).
- C++对象的底层原理都在这儿了,还敢说学不会?
- CButton类的继承+重写--本类来自孙鑫老师C++课堂
- 手机联系人信息获取(头像,电话,姓名)
- 面试:Art虚拟机和Davlik虚拟机简要对比
- 物联网大数据平台的主要功能和特点
- 《蓝桥杯Java组通关秘笈》