首页 > 编程语言 >7 回溯算法理论基础

7 回溯算法理论基础

时间:2023-02-28 20:11:29浏览次数:30  
标签:递归 理论 个数 算法 参数 回溯 集合 穷举

回溯法:也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,已经不止一次,提到了回溯,回溯是递归的副产品,只要有递归就会有回溯。

回溯法的效率:回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。

回溯法,一般可以解决如下几种问题:

组合问题:N个数里面按一定规则找出k个数的集合
切割问题:一个字符串按一定规则有几种切割方式
子集问题:一个N个数的集合里有多少符合条件的子集
排列问题:N个数按一定规则全排列,有几种排列方式
棋盘问题:N皇后,解数独等等
(组合无序,排列有序)

  回溯法解决的问题都可以抽象为树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。

 

回溯三部曲:

(1)回溯函数模板返回值以及参数

  回溯算法中函数返回值一般为void。因为回溯算法需要的参数不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。

void backtracking(参数)

(2)回溯函数终止条件

  什么时候达到了终止条件,树中就可以看出,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。

if (终止条件) {
    存放结果;
    return;
}

(3)回溯搜索的遍历过程

  回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。

for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
    处理节点;
    backtracking(路径,选择列表); // 递归
    回溯,撤销处理结果
}

 

 

标签:递归,理论,个数,算法,参数,回溯,集合,穷举
From: https://www.cnblogs.com/cjhtxdy/p/17165387.html

相关文章

  • 理论:第二章:Spring的AOP和IOC是什么?使用场景有哪些?Spring事务与数据库事务,传播行为,数据
    AOP:面向切面编程。即在一个功能模块中新增其他功能,比方说你要下楼取个快递,你同事对你说帮我也取一下呗,你就顺道取了。在工作中如果系统中有些包和类中没有使用AOP,例如日志......
  • 高并发场景下常见的限流算法及方案介绍
    作者:京东科技康志兴应用场景现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CD......
  • # 代码随想录算法训练营Day28 回溯算法|93.复原IP地址 78.子集 90.子集II
    代码随想录算法训练营93.复原IP地址题目链接:93.复原IP地址给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。有效的IP地址正好由四个整数(每个整数位......
  • 经典算法动态规划(dp问题归纳)
    1,线性dp求连续子区间问题输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。栗子:输入:1-2310-472-......
  • 经典算法贪心(刷题归纳)
    <贪心算法greedyalgorithnm>本质是让机器模拟人类,每次都按照某一个标准取最优解,一般常用最优子结构问题,但不是所有的时候贪心都获得最优解。跟DP最大的区别在于,贪心不可......
  • 1.4 算法和算法分析
    1.4算法和算法分析算法定义对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中每个指令的表示一个或多个操作。简而言之,算法就是解决问题的方法和步骤。......
  • 算法和算法分析2
    对于同一个问题,可以有许多不同的算法。究竟如何来评价这些算法的优劣程度呢?算法分析的目的是看算法实际是否可行,并在同一问题存在多的算法时可进行性能上的比较,以便于从中......
  • 每日算法--2023.2.28
    1.剑指offer56数组中数字出现的次数2classSolution{publicintsingleNumber(int[]nums){int[]cnt=newint[32];intn=nums.length;......
  • 《分布式技术原理与算法解析》学习笔记Day25
    负载均衡负载均衡是分布式可靠性中非常关键的一个问题,它在一定程度上反映了分布式系统对业务处理的能力。什么是负载均衡?负载均衡可以分为两种:请求负载均衡,即将用户的......
  • LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II
    欢迎关注个人公众号:爱喝可可牛奶LeetCode算法训练-回溯491.递增子序列46.全排列47.全排列IILeetCode491.递增子序列分析找出并返回所有数组中不同的递增子序列......