《算法分析与设计》
算法分析与设计是计算机专业比较重要的一们专业课,研究计算科学中的典型问题以及解决他们的各种方法,并将各种算法进行分析、归纳、总结和分类,进而提高分析问题的能力。
常见的问题:排序、查找、串处理、图、组合、几何、数值。
用到的工具方法:蛮力法、分治法、减治法、变治法、时空权衡、动态规划、贪婪法、回溯法、分支界限(我们当时只讲到包括变治法之前的几类算法)
解决问题的五个步骤:问题的提出、理解问题、设计算法思路、伪代码描述、效率分析
简述各类工具方法,以及其典型的算法:
蛮力法:
定义:根据问题的表象,基于问题的描述和设计的概念,直接的解决问题的方法。
特点:几乎所有问题,首先想到蛮力法,普遍性;效率通常很低,但用其效率来衡量其他算法的效率高低;有些时候,蛮力法也有一定的实用性。
典型:冒泡排序、选择排序、穷举查找。
分治法:
定义:将规模较大问题分解为若干个规模较小的且性质不变的子问题,对子问题进行求解后,将其解进行组合,产生母问题的解。
分治法效率分析的统一模式:将规模n的大问题,分解成a个规模为n/b得子问题,a>1,b>1,n=b的k次方;此时,时间效率的递推关系式必是:T(n)=aT(n/b)+f(n),其中,f(n)是将总问题分解成子问题,以及将a个子问题的解进行合并而产生母问题解所需要的时间;通用分治递归式的闭合结果有三种情况,根据a于b的d次方的关系划分——公式不好写出来,略。
典型:计算二叉树的高度,大整数的乘法,凸包问题。
减治法:
思路:将n的主问题的解与小规模子问题的解进行分析比较,找出他们之间的“关系”,再由底向顶进行迭代求解或由顶向底递归求解。如,汉诺塔问题
减治法分为三类:减常量规模、减常量因子规模、减可变规模。
典型:图的遍历,生成组合对象(Johnson算法),俄式乘法(除2乘2)。
变治法:
主要步骤:1.变换;2.求解。
主要类型:
实例化简:问题不变,实例变得更简单。
改变表现:实例不变,表现的形式改变。
问题化简:将不熟悉的问题转化为熟悉的且已有现存算法的问题。
典型:高斯消去法,求逆矩阵,霍纳法则。