算法设计方法

1.求值法
2.递推法

3.递归法
递归就是一个过程或函数在其定义中直接或间接调用自身的方法。递归法是一种用来描述问题和解决问题的基本方法。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出需要多次反复计算的解题过程,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象无限的集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

递归法的思路:第一步,将较大规模的原问题分解为一个或多个规模更小,但具有类似于原问题特性的子问题,即较大的问题递归地用较小的子问题来描述,解原问题的方法同样可以来解决子问题。第二步,确定一个或多个无须分解、可直接求解的最小子问题(称为递归的终止条件)

递归的两个基本要素是:
(1)递归关系式(递归体),确定递归的方式,即原问题是如何分解为子问题的。
(2)递归出口,确定递归体到何终止,即递归的终止(结束、边界)条件

4.枚举法
5.模拟法
6.分治法
7.贪心法
8.回溯法
灵魂之问:

  1. 回溯法的适用范围是什么?

  2. 回溯法的解的形式是什么?

  3. 回溯法的搜索空间是什么?

  4. 回溯法的搜索策略有哪些?

  5. 回溯法是如何进行减枝的?

  6. 回溯法的适用条件是什么?

  7. 回溯法存储搜索路径的数据结构有哪些?

  8. 回溯法实现的方式主要有哪两个?其伪代码如何实现?

  9. 搜索树节点数的估计如何实现?

    回溯法又称为试探法,它是算法设计的重要方法之一,是一种在解空间中搜索问题的解的方法。即在问题的解空间树中,按深度优先搜索策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一节点时,先判断该节点是否包含问题的解。如果不包含,则跳过对以该节点为根的子树搜索,逐层向其祖父节点回溯;否则进入该子树,继续按深度优先策略搜索。用回溯法求问题的所有解时,要回溯到根节点,且根节点的所有子树都被搜索一遍才结束。用回溯法求问题的一个解时,只要搜索到问题的一个解就可以结束。这种以深度优先方式系统搜索解的算法称为回溯法。

回溯法是尝试搜索算法中最基本的一种,它采用一种“走不通就掉头”的思想作为其控制结构。在用回溯法解决问题时,每向前走一步都有很多路需要选择,但当没有决策的信息或决策的信息不充分时,只好尝试某一路线向下走,到一定程度后得知此路不通时,再回溯到上一步尝试其他路线。当然,在尝试成功时,问题得解,算法结束。

回溯法求解问题由“试探和回溯”两部分组成

通过对问题的归纳分析,找出求解问题的一个线索,沿着这一线索往前试探,若试探成功,即得到解;若再往前走不可能得到解,就回溯,退一步另找线路,再往前试探。

从解的角度理解,回溯法将问题的候选解按某种顺序进行枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。若当前候选解,除不满足问题规模要求外,满足所有其他要求,就继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的就一个解。

9.构造法
10.动态规划法
11.分支限界

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值