《算法设计与分析》概念题总结

第一章 算法概述


 

算法

  概念:算法是指解决问题的一种方法或者一个过程。

  性质:

    1. 输入:有零个或多个输入

    2. 输出:有至少一个输出

    3. 确定性:组成算法的每条指令是清晰的,无歧义的

    4. 有限性:算法中的每条指令的执行次数是有限的,执行每条指令的时间也是有限的。

 

程序

  程序是算法用来某种程序设计语言的具体实现。  

 

算法与程序的不同

  算法是用来给人读的,机器不能直接运行。

  程序可以不满足算法的h第四条性质——有限性。

 

算法的复杂性

  算法复杂性的高低体现在运行该算法所需要的计算机资源的多少上,所需资源越多,该算法的复杂性越高;反之越低。

 

 

第二章 递归与分治策略


 

递归算法

  直接或间接调用自身的算法称为递归算法

 

递归函数

  用函数自身给出定义的函数

 

分治法  

  将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题互相独立且与原问题相同,然后递归求解子问题,最后将子问题的解合并得到原问题的解。

 

分治法所能解决的问题的特征

  1. 问题规模缩小到一定程度时可以很容易解决

  2. 该问题可分解为若干个规模较小的子问题,即具有“最优子结构”性质

  3. 利用子问题的解可合并成原问题的解

  4. 子问题相互独立,即子问题之间不包含公共的子问题

 

 

第三章 动态规划


 

备忘录法

  备忘录法是动态规划算法的变形。备忘录法的递归方式是自顶向下的,求解过程中记录每个子问题的解,这样的好处是在求解共同问题避免了重复求解。

 

动态规划

  将原问题分解成若干个子问题,先求解子问题,并记录解,然后从这些子问题的解得到原问题的解。  

 

动态规划与分治法的相同点与不同点

  相同点:都具有最优子结构,分解成与原问题相同但规模更小的子问题

  不同点:动态规划是自底向上求解且子问题之前是有联系的、有重叠的部分,而分治法是独立子问题

 

 

第四章 贪心算法


 

贪心算法思想

  当一个问题具有最优子结构且局部最优解等于全局最优解时候,可以使用贪心法,通常采用自顶向下的形式,每一次进行贪心选择后就将问题转为规模更小的子问题进行求解,最后将这些局部最优解合并得到整体最优解

 

贪心算法性质

  1. 贪心选择

  2. 最优子结构

 

贪心与动态规划的差异

  贪心最优性质是主要区别,即以通过一系列贪心选择得到的局部最优解得到全局最优解

  贪心常常采用的是自顶向下的办法,而动态规划采用的是自底向上的方法

 

 

第五章 回溯法


 

回溯法概括

  采用 dfs 系统地搜索解空间树而求得解的算法

 

回溯法思想

  确定了空间的组织结构后,回溯法从根结点出发,以 DFS 的方式搜索整个解空间。根结点称为活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向某子结点方向移动至一个新结点,这个新结点就成为新的活结点,并成为当前的扩展结点。如果不能再进行往子结点移动,那么当前扩展结点就称为死结点。回溯法以这种方式在整个解空间中进行搜索,直到找到所要求的解或者解空间已经没有活结点为止。

 

 

第六章 分支限界法


 

分支限界法基本思想

  分支限界法通常以 BFS 或最小耗费(最大效益)的方式搜索解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有的子结点。在这些结点中,导致不可行解或导致非最优解的子结点被舍弃【限界,其余子结点被加入活结点列表(即队列或优先队列)中【分支】。此后,从活结点表中取下一个结点成为当前扩展结点,并重复上述操作,直到找到所有要求的解或活结点列表为空为止。

 

回溯法与分支限界法的不同

  1. 回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

  2. 回溯法通常以 DFS 的方式搜索解空间树,而分支限界法通常以 BFS 的方式搜索解空间树。

 

posted @ 2018-07-02 12:17  bw98  阅读(442)  评论(0编辑  收藏  举报