算法知识点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析》知识点总结
1.算法的渐进时间复杂度分析,能够对给定的代码段(伪代码段)进行时间复杂度分析,能够对用关于问题规模n的函数表示的时间复杂度计算其渐进阶。
2.概念:
算法:通俗来讲,算法是指解决问题的方法或者过程,包括输入,输出,确定性,有限性。
1)子问题:结构性质与原问题相似的具有规模更小的问题。
2)可行解:满足某线性规划所有的约束条件(指全部前约束条件和后约束条件)的任意一组决策变量的取值,都称为该线性规划的一个可行解。
3)解空间:若齐次线性方程组有非零解,则其解有无穷多个,而齐次线性方程组所有解的集合构成一个向量空间,这个向量空间就称为解空间.
4)目标函数:指所关心的目标(某一变量)与相关的因素(某些变量)的函数关系。
5)最优解:使某线性规划的目标函数达到最优值(最大值或最小值)的任一可行解,都称为该线性规划的一个最优解。
6)最优化问题:一般是指按照给定的标准在某些约束条件下选取最优的解集,即使系统的某些性质能指标达到最大或最小。
7)递归算法:直接或者间接地调用自身的算法称为递归算法。
8)分治法:将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。递归地求出子问题的解,就可得到原问题的解。
9)动态规划:将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解,与分治法不同的,分解的子问题往往不是互相独立的。(为了避免指数时间,不管子问题的解会不会用到,都会填入到一个表中)
10)最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。(动态规划和贪心都有)
11)重叠子问题性质:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要此子问题时,只是简单地用常数时间查看一下结果。
12)备忘录算法:动态规划方法的变形。与动态规划算法不同的是,备忘录方法的递归方式是自顶向下的,而动态规划算法则是自底向上的。(其控制结构与递归方法是一样的,只是备忘录方法为每一个解过的子问题建立备忘录,以便需要时查看,避免相同子问题的重复求解)
13)贪心法:是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。
14)贪心选择性质:指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来达到。
15)回溯法:是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这
种走不通就退回再走的技术为回溯法。(第二种,以深度优先方式系统搜索问题解的算法称为回溯法)
3.分治法的算法框架
在每一层递归上都有三个步骤:
a,分解:将原问题分解为若干个规模较小,相对独立,与原问题形式相同的子问题。
b,解决:若子问题规模较小且易于解决时,则直接解。否则,递归地解决各子问题。
c,合并:将各子问题的解合并为原问题的解。
DividAndConquer(p(n))//分治法设计原理
{
if (n <= n0)
return Adhoc(p(n));
else
{
//将P分解为较小的子问题P1、P2、…、Pk
Divide p int o smaller subinstances P1, P2, ..., Pk;
for (i=1; i<=k; i++)
yi = DividAndConquer(pi);//递归解决Pi
return Merge(y1, y2, ..., yk);//合并子问题
}
}
4.动态规划的步骤
1)找出最优解的性质,并刻画其结构特征。
2)递归地定义最优值。
3)以自底向上的方式计算出最优值。
4)根据计算最优值时得到的信息,构造最优解。
5.动态规划的基本要素
1)最优子结构性质。
2)子问题重叠性质。
6.贪心法的步骤
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
7.贪心法的基本要素:
贪心选择性质,最优子结构性质。
8.贪心法与动态规划的比较
贪心法就是通过对每一个子问题采取最优决策,最后达到全局最优的一种策略。动态规划也是一种求解最优化问题的算法设计策略,它先求解若干子问题,再根据子问题的解来做出决策,共同点是两者所解决的问题都有很强的步骤性,都要经过各步决策最终得到最优解。区别在于贪心法要求针对问题设计最优度量标准,动态规划则是利用最优子结构,自底向上从子问题的最优解逐步构造出整个问题的最优解。
9.备忘录算法与动态规划算法的比较
动态规划算法的最大特性是:局部最优中产生整体最优,具体方法是逐层迭代,从局部开始,一步一步达到整体。
备忘录算法是动态规划方法的变形。与动态规划算法不同的是,备忘录方法的
递归方式是自顶向下的,而动态规划算法则是自底向上的。(其控制结构与递归方法是一样的,只是备忘录方法为每一个解过的子问题建立备忘录,以便需要时查看,避免相同子问题的重复求解)