算法设计与分析总结

第一章 算法引论

算法分析的目的:估算该算法所需的内存空间和运行时间。

分析算法复杂度的目的:用以比较同一问题的不同算法;时间和空间的增长率作为衡量的标准。

算法是对解决这个问题的方法和步骤的描述。

算法的基本特征:有穷性、确定性、可行性、0到多个输入、1到多个输出。

一个好的算法应具有正确性、可读性、健壮性和高效性和低存储量需求等特征。

第二章 递归与分治策略

递归的概念:直接或者间接的调用自身的算法。

递归函数:用函数自身给出定义的函数。

构成递归式的两个基本条件:递归的边界条件和递归的定义(递归公式)。

分治法的基本思想:将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解决这些子问题,然后将各个子问题的解合并得到原问题的解。

第三章 动态规划

简述动态规划算法解题的基本步骤

1、找出最优解的性质,并刻画其结构特征;

2、递归的定义最优值;

3、用自底向上的方法计算最优值;

4、根据计算最优值时得到的信息,构造最优解;

简述动态规划和分治法的异同。

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

不同点:分治法的子问题互相独立且与原问题相同;动态规划求解的问题,经分解得到的子问题,往往不是相互独立的,就是各个子问题包含公共的子问题。

动态规划的基本要素

1、最优子结构

2、重叠子问题

简述备忘录方法与动态规划的异同

相同点:备忘录方法和动态规划都有相同的控制结构。

不同点:备忘录方法的递归方式是自顶向下,动态规划则是自底向上;备忘录方法通过建立备忘录避免了相同子问题的重复求解。

快速排序算法的性能取决于划分的对称性。

第四章 贪心算法

贪心算法的基本条件

1、贪心的选择性质

2、最优子结构性质

简述动态规划和贪心算法的异同

相同点:都有最有子结构性质。

不同点:贪心具有贪心选择性质(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来到达);动态规划通常以自底向上的方式解各个子问题,贪心算法通常以自顶向下的方式进行。

简述Prim算法和Kruskal算法的异同

相同点:都可以运用贪心算法构造最小生成树,都利用了最小生成树的性质。

不同点:Prim算法通过扩展连通子集来进行贪心选择;Krusikal算法通过选择具有最小权的边的集合来进行贪心选择,在选择时,进行连通操作以便生成树。

第五章 回溯法

回溯解题的步骤

1、针对所给问题定义问题的解空间。

2、确定易于搜索的解空间结构。

3、以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效的搜索。

回溯法搜索解空间树时常用的两种剪枝函数为约束函数和界限函数。

第六章 分支界限法

简述分支界限法的搜索策略

1、以宽度优先和以最小耗费(最大效益)优先的方式搜索问题的解空间树。

2、每个活节点只有一次成为扩展节点

3、活节点成为扩展节点就一次性生成其所有的子节点。

4、儿子节点中,导致不可行节点和非最优节点的节点被舍弃,其余节点加入到活节点表中,当前活节点从表中删除。

5、从活节点中取出下一个节点成为当前扩展节点,并重复上述节点扩展过程。一直搜索到解或者活节点表为空为止。

分支界限法:队列式分支界限法和优先队列式分支界限法。

活节点的组织形式有:最大堆和最小堆。

简述分支界限法和回溯法的异同

相同点:都是对子集树和排列树的搜索。

不同点:求解目标不同,分支界限法的求解目标是找出满足约束条件的也一个解,或是在满足约束的解中找出某种意义的最优解;回溯法找到的是解空间满足约束条件的所有解。搜索策略不同:分支界限法以广度优先搜索或以最小花费优先的方式进行搜索;回溯法以深度优先搜索的方式进行搜索。

第七章 概率算法

数值概率算法求近似解,精度和时间成正比。

蒙特卡罗算法求的是准确解,但未必正确,正确率和时间成正比。

拉斯维加斯算法不会得到不正确解,得到正确解的概率和时间成正比。

舍伍德算法总能得到解,并且解一定是正确的。最坏时间复杂度和平均时间复杂度差距很大时,可用舍伍德算法进行平均。

第八章 NP完全性理论

P类问题:P={L|L是一个能在多项式时间内被一台DTM所接受的语言}。由此语言定义的问题。

NP类问题:P={L|L是一个能在多项式时间内被一台NDTM所接受的语言}。由此语言定义的问题。

NPC问题:(1)L属于NP;(2)对于所有L'属于NP有L'正无穷PL;由此语言定义的问题。

转载于:https://www.cnblogs.com/xia520/p/10226897.html

你可能感兴趣的:(算法设计与分析总结)