常用算法设计方法

    经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。

一、迭代法

  迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。

二、穷举搜索法

  穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。

三、递推法

  递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。

四、递归

   采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。

五、回溯法

    回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。

    回溯法的实质是在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树。若进入某子节点的子树后没有找到解(或者需要找出全部解),则需要从子节点回退(回溯)至父节点,从而可以选择其他子节点进行搜索。回溯法有“通用的解题法”之称,用它可以系统地搜索一个问题的所有解或任一解。

六、贪婪法

  贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。

七、分治法

1、分治法的基本思想

任何一个可以用计算机求解的问题所需的计算时间都与其规模N有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。  

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

如果规模为n的问题可分解成k个子问题,1<k≤n,这些子问题互相独立且与原问题相同。

如:

            斐波那契(Fibonacci)数列可以递归地定义为:

            《常用算法设计方法》

2、分治法的适用条件

  分治法所能解决的问题一般具有以下几个特征:

  (1)该问题的规模缩小到一定的程度就可以容易地解决;

  (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;

  (3)利用该问题分解出的子问题的解可以合并为该问题的解;

  (4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。

3、分治法的基本步骤

 分治法在每一层递归上都有三个步骤:

  (1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;

  (2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;

  (3)合并:将各个子问题的解合并为原问题的解。

八、动态规划法

  为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。

    动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

    与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的。若用分治法来解这类问题,则相同的子问题会被求解多次,以至于最后解决原问题需要耗费指数级时间。动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解,每个解都对应于一个值,我们希望找到具有最优值(最大值或最小值)的那个解。


    原文作者:五大常用算法
    原文地址: https://blog.csdn.net/jinmie0193/article/details/80170981
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞