递归与搜索 (一)

本文探讨递归与搜索算法的核心概念,递归通过将大问题分解为小问题简化解决,而搜索算法则在解空间中寻找目标状态。文章详细解析了递归的三步骤与搜索的具体过程,对比了广度优先搜索与深度优先搜索的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近结束了最令我恐惧的动态规划,现在一下子就学了递归与搜索,感觉理解起来还是相对于动态规划而言简单的,递归和搜索里面的难点我认为有两点,递归和搜索都是第一步是找到递归和搜索的实现方程,将一道题目中可以循环工作的部分找出来,然后写出主体的方程,这样一大部分就可以结束了。但还有一个难点也是细节的完善,递归和搜索的题每道题虽然思想都是各自的思想,但为什么会有千千万万的题,就是因为每道题都有每道题都需要注意的细节,好比在坐标的题目里,细节就是通过两个数组设{0,1,0,-1}来实现,还有的细节是,可能在一些循环的数组中,判断可行性{1,0}之间,会出现多次的1,0之间的转换,这样也会增大题目的难度。这几天做的题很少,主要看了老师上课讲的课件,在Vjudge里边看了几道题,觉得递归与搜索并不简单,但是我认为只要花时间在上面,一定可以做的很出色。
一、递归
递归的主要思想是将一个给定的很大的问题,经过递归函数层层转化为与自己类型相似的小问题,然后小问题十分好解决。递归的定义就是把问题向边界的转化的规则,递归一定会使问题越来越简单,最后终止条件是题目给出,或直接简单算出。

递归算法解题通常有三个步骤:
1)分析问题、寻找递归:找出大规模问题与小规模问题的关系,这样通过递归使问题的规模逐渐变小。
2)设置边界、控制递归:找出停止条件,即算法可解的最小规模问题。
3)设计函数、确定参数:设计函数体中的操作及相关参数。

二、搜索
搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。
相比于单纯的枚举算法有了一定的方向性和目标性。算法是在解的空间里,从一个状态转移(按照要求拓展)到其他状态,这样进行下去,将解的空间中的状态遍历,找到答案(目标的状态)。
状态(state)是对问题在某一时刻进展情况的数学描述,或者是数学抽象。
每一个状态都会是答案的一个“可能的”解。状态的转移就是问题从一个状态转移到另一个状态,这样就可以进行搜索的一步步延伸,最后要得到的解也是其中的一个状态。

搜索分为广度优先搜索和深度优先搜索:
广度优先搜索:
基本思想:从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则。
生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。
——在路径的寻找问题上用得比较多
具体过程:
1 每次取出队列首元素(初始状态),进行拓展
2 然后把拓展所得到的可行状态都放到队列里面
3 将初始状态删除
4 一直进行以上三步直到队列为空。

深度优先搜索:
基本思想:从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。
具体实现过程
1 每次取出栈顶元素,对其进行拓展。
2 若栈顶元素无法继续拓展,则将其从栈中弹出。继续1过程。
3 不断重复直到获得目标状态(取得可行解)
或栈为空(无解)。

继续做题,继续努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值