时间:2018/12/20

一、算法概述

什么是算法

1.算法:为一个计算的具体步骤;常用于计算、数据处理、推理等

性质:有限、确定、可行、输入、输出;

目的:解决问题(问题定义了输入和输出)

2.例子:割圆术、四则运算、快速排列、最小生成树、求最大公因子算法;

算法的位置

1计算机体系:

可计算否—>能行可计算否—>算法设计与分析—>计算机语言实现—>软件系统

2可计算理论:计算模型、可计算问题、计算模型的等价性

3.计算复杂性理论:

算法分析引论

1.正确性:程序调试只能证明有错,而程序的正确性需要归纳证明

2.复杂性分析:

目的:预测算法对不同输入所需资源量;

复杂性测度:时间(步数)、空间、I/O等,是输入大小的函数;

用途:为求解一个问题选择最佳算法;

需要的数学基础:离散数学、组合数学、概率论、代数等

需要的数学能力:建立数学模型、化简数学模型

3. 时间复杂性(步骤数)

算法设计引论

1.算法设计模式:暴力搜索、分治法、图搜索与枚举、随机化方法;

2.算法实现方法:递归与迭代、串行与并行、确定性与非确定性、近似求解与精确求解;

3.最优化算法设计方法:线性规划、动态规划、贪心法、启发式方法

二、算法分析的数学基础

计算复杂性函数的阶

1.增长的阶:描述增长率

2.增长函数:典型的增长阶(1,n,n!,lg n)

3.增长的记号:同阶函数集合、低阶函数集合、高阶函数集合、严格低阶函数、严格高阶函数集合

4.渐进符号的性质:传递性、自反性、对称性、反对称性

和式的估计与界限

1.线性和

2.级数

3.和的界限:直接求和的界限

递归方程

1.概念:使用小的输入值来描述一个函数的方程或不等式;

2.求解递归方程的方法:替换方法、迭代方法、master定理方法

3.替换方法:提出猜想(上下界猜测),用数学归纳法证明

4.迭代方法:将方程转化为和式,用估计和的方法求解、

三、分治算法

分治法

1.设计过程:划分、求解、合并(自顶向下)

实例

1.大整数乘法:划分

算法分析:建立递归方程、使用master定理得出T(n)=O(n)

2.最大值和最小值:归并排序

元素提取问题的线性时间算法

1.中位数问题定义:比较操作次数的上下界

2.线性时间选择:分组、排序、递归调用算法、MOM划分、递归

快速傅里叶变换

四、动态规划

基本原理

1.子问题重叠:自底向上的计算

2.优化子结构、重叠子问题

矩阵乘法问题

最长公共子序列问题

五、贪吃算法

贪心法的基本原理

1.每一步只有一组选择;每次做出当前最好的选择;(希望通过局部优化选择达到全局优化选择)

任务安排问题

哈夫曼编码问题

六、搜索策略

暴力美学:搜索

深度优化与广度优化

搜索的优化