递归、搜索与回溯算法
文章平均质量分 90
有关递归、搜索与回溯算法的介绍和例题
别致的影分身
这个作者很懒,什么都没留下…
展开
-
递归、搜索与回溯算法:递归
递归在解决⼀个规模为n的问题时,如果满⾜以下条件,我们可以使⽤递归来解决:a.问题可以被划分为规模更⼩的⼦问题,并且这些⼦问题具有与原问题相同的解决⽅法。b.当我们知道规模更⼩的⼦问题(规模为 n - 1)的解时,我们可以直接计算出规模为 n 的问题的解。c.存在⼀种简单情况,或者说当问题的规模⾜够⼩时,我们可以直接求解问题。⼀般的递归求解过程如下:a.验证是否满⾜简单情况。b.假设较⼩规模的问题已经解决,解决当前问题。上述步骤可以通过数学归纳法来证明。原创 2024-04-11 19:04:24 · 582 阅读 · 0 评论 -
递归、搜索与回溯算法:回溯,决策树
回溯算法是⼀种经典的递归算法,通常⽤于解决组合问题、排列问题和搜索问题等。回溯算法的基本思想:从⼀个初始状态开始,按照⼀定的规则向前搜索,当搜索到某个状态⽆法前进时,回退到前⼀个状态,再按照其他的规则搜索。回溯算法在搜索过程中维护⼀个状态树,通过遍历状态树来实现对所有可能解的搜索。回溯算法的核⼼思想:“试错”,即在搜索过程中不断地做出选择,如果选择正确,则继续向前搜索;否则,回退到上⼀个状态,重新做出选择。回溯算法通常⽤于解决具有多个解,且每个解都需要搜索才能找到的问题。1.回溯算法的模板。原创 2024-04-19 21:09:33 · 861 阅读 · 1 评论 -
递归、搜索与回溯算法:⼆叉树中的深搜
⼆叉树中的深搜深度优先遍历(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。在⼆叉树中,常⻅的深度优先遍历为:前序遍历、中序遍历以及后序遍历。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很简洁。原创 2024-04-12 22:04:08 · 976 阅读 · 0 评论 -
递归、搜索与回溯算法:FloodFill 算法
算法思路:可以利⽤「深搜」或者「宽搜」,遍历到与该点相连的所有「像素相同的点」,然后将其修改成指定的像素即可。全局变量:int m, n;//记录原先的颜色递归函数设计:void dfs(vector<vector<int>>& image,int i,int j,int color)•参数:a.原始矩阵;b.当前所在的位置;c.需要修改成的颜⾊。•函数体:a.先将该位置的颜⾊改成指定颜⾊(因为我们的判断,保证每次进⼊递归的位置都是需要修改的位置);b.原创 2024-04-24 21:15:46 · 598 阅读 · 0 评论 -
递归、搜索与回溯算法:综合练习
解法:算法思路:⾸先,我们在第⼀⾏放置第⼀个皇后,然后遍历棋盘的第⼆⾏,在可⾏的位置放置第⼆个皇后,然后再遍历第三⾏,在可⾏的位置放置第三个皇后,以此类推,直到放置了 n 个皇后为⽌。我们需要⽤⼀个数组来记录每⼀⾏放置的皇后的列数。在每⼀⾏中,我们尝试放置⼀个皇后,并检查是否会和前⾯已经放置的皇后冲突。如果没有冲突,我们就继续递归地放置下⼀⾏的皇后,直到所有的皇后都放置完毕,然后把这个⽅案记录下来。原创 2024-04-24 15:21:51 · 881 阅读 · 0 评论 -
递归、搜索与回溯算法:记忆化搜索
解法(暴搜 -> 记忆化搜索 -> 动态规划):算法思路:暴搜:a.递归含义:给 dfs⼀个使命,给他⼀个数n,返回第n个斐波那契数的值;b.函数体:斐波那契数的递推公式;c.递归出⼝:当 n == 0或者n == 1时,不⽤套公式。记忆化搜索:a.加上⼀个备忘录;b.每次进⼊递归的时候,去备忘录⾥⾯看看;c.每次返回的时候,将结果加⼊到备忘录⾥⾯。动态规划:a.递归含义 -> 状态表⽰;b.函数体 -> 状态转移⽅程;c.递归出⼝ -> 初始化。原创 2024-05-05 13:33:45 · 1146 阅读 · 0 评论