算法设计与分析复习

来源:互联网 发布:杨辉三角java递归 编辑:程序博客网 时间:2024/05/17 00:54

第一章:算法问题求解基础

算法是对特定问题求解步骤的一种描述,它是指令的有限序列。

一.算法的五个特征

二.什么是算法?程序与算法的区别。

三.一个问题求解过程包括:理解问题、设计方案、实现方案、回顾复查。

四.系统生命周期或软件生命周期分为:

        开发期:分析、设计、编码、测试;运行期:维护。

五.算法描述方法:自然语言、流程图、伪代码、程序设计语言等。

六.算法分析:是指对算法的执行时间和所需空间的估算。算法的效率通过算法分析来确定。

七.递归定义:是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两部分:基础情况和递归部分;

基础情况:以直接形式明确列举新事物的若干简单对象;

递归部分:有简单或较简单对象定义新对象的条件和方法

八.常见的程序正确性证明方法

1.归纳法:由基础情况和归纳步骤组成。归纳法是证明递归算法正确性和进行算法分析的强有力工具;

2.反证法。

第二章:算法分析基础

五.一个好的算法应具备的4个重要特征

1.正确性:算法的执行结果应当满足预先规定的功能和性能要求;

2.简明性:算法应思路清晰、层次分明、容易理解、利于编码和调试;

3.效率:算法应有效使用存储空间,并具有高的时间效率;

4.最优性:算法的执行时间已达到求解该类问题所需时间的下界。

六.影响程序运行时间的主要因素

1.程序所依赖的算法;2.问题规模和输入数据规模;3.计算机系统性能。

七.1.算法的时间复杂度:是指算法运行所需的时间;

2.算法的空间复杂度:指算法运行所需的存储空间,包括固定空间需求和可变空间需求。固定空间需求主要包括:程序代码、常量、简单变量、定长成分的结构变量所占的空间;可变空间的大小与算法在某次执行中处理的特定数据的规模有关。

第五章:分治法

一.分治法的基本思想

1.将一个复杂的问题分解成若干个规模较小、相互独立,但类型相同的子问题求解;

2.然后再将各子问题的解组合成原始问题的一个完整答案。(如快速排序算法,归并排序算法,二分搜索算法,汉诺塔问题都是用分治法求解的)

二.一个问题能够用分治法求解的要素或特征

1.问题能够按照某种方式分解成若干个规模较小相互独立且与原问题类型相同的子问题;

2.子问题足够小时可以直接求解;

3.能够将子问题的解组合成原问题的解。(自底向上逐步求出原理问题的解)

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

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

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

2. 该问题可以分解为若干个规模较小的相同问题;(大部分问题都能满足)

3. 利用该问题分解出的子问题的解可以合并为该问题的解;(前提)(递归思想)

4. 子问题之间不包含公共的子问题。(效率)

四.归并排序与快速排序的比较

1.分解过程:

归并排序:将序列一分为二即可(简单)

快速排序:需调用Paitition函数将一个序列划分为子序列。(分解方法相对较困难)

2.子问题解合并得到原问题解的过程:

合并排序——需要调用Merge函数(时间复杂度为O(n))来实现。

快速排序——一旦左右两个子序列都已分别排序,整个序列便自然成为有序序列。(异常简单,几乎无须额外的工作,省去了从子问题解合并得到原问题解的过程)

3.掌握合并排序和快速排序的具体排序方法(数据结构内容)。(图5-2,图5-4快速排序的划分操作)

第六章:贪心法

第七章:动态规划法

一.动态规划法的几个步骤

(动态规划法是用于处理不具备贪心准则的问题,用于解决分治法的子问题重叠现象)

1.刻画最优解的结构特性;2.递归定义最优解值;3.以自底向上方式计算最优解值;4.根据计算得到的信息构造一个最优解。

二.动态规划法的基本要素

1.最优子结构特性:一个问题的最优解包含其子问题的最优解(见第五章:贪心法);

1.重叠子问题:递归算法求解问题时,每次产生的子问题并不总是新问题,有些问题被反复计算多次。

第八章:回溯法

1.在求解的过程中,以深度优先方式逐个生产状态空间树中的结点,求问题的可行解或最优解;

2.为提高搜索效率,在搜索过程中用约束函数和限界函数(统称剪枝函数)来剪去不必要搜索的子树,减少问题求解所需实际生产的状态空间树结点数,从而避免无效搜索。

3.常用的剪枝函数:用约束函数剪去已知不含答案状态(可行解)的子树;用限界函数剪去得不到最优答案结点(最优解)的子树。





原创粉丝点击