绪论
一、什么是算法?
二、算法的描述方法
- 自然语言
优点:容易理解
缺点:冗长、二义性
使用方法:粗线条描述算法思想
注意事项:避免写成自然 - 流程图
优点:流程直观
缺点:缺少严密性、灵活性
使用方法:描述简单算法
注意事项:注意抽象层次 - 程序设计语言
优点:能由计算机执行
缺点:抽象性差,对语言要求高
使用方法:算法需要验证
注意事项:将算法写成子函数 - 伪代码——算法语言
伪代码(Pseudocode):介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。
优点:表达能力强,抽象性强,容易理解
三、算法设计的一般过程
1.理解问题2. 预测所有可能的输入3. 在精确解和近似解间做选择 4. 确定适当的数据结构 5.算法设计技术6.描述算法 7.跟踪算法 8.分析算法的效率 9.根据算法编写代码
四、重要问题类型
- 查找问题
- 排序问题
- 图问题
- 组合问题
- 几何问题
五、算法分析 - 算法分析(Algorithm Analysis):对算法所需要的两种计算机资源——时间和空间进行估算
时间复杂性(Time Complexity)
时间复杂性分析的关键:
问题规模:输入量的多少;
基本语句:执行次数与整个算法的执行时间成正比的语句
空间复杂性(Space Complexity) - 算法分析的目的:
设计算法——设计出复杂性尽可能低的算法
选择算法——在多种算法中选择其中复杂性最低者
六、算法伪码的表示
- 赋值语句:←
- 分支语句:if …then … [else…]
- 循环语句:while, for,repeat until
- 转向语句:goto
- 输出语句:return
- 调用:直接写过程的名字
- 注释://…
例:求最大公约数
算法 Euclid (m, n)
输入:非负整数 m, n,其中m与n不全为0
输出:m 与 n 的最大公约数 1.
- 1.while m > 0 do
- 2.r ←n mod m
- 3.n ←m
- 4.m ←r
- 5.return n
七、算法的两种时间复杂度
- 最坏情况下的时间复杂度 W(n)
算法求解输入规模为 n 的实例所需要的最长 时间 - 平均情况下的时间复杂度 A(n) 在给定同样规模为 n 的输入实例的概率分布 下,算法求解这些实例所需要的平均时间 A(n) 计算公式 平均情况下的时间复杂度 A(n) 设 S 是规模为 n 的实例集 实例 I∈S 的概率是 PI 算法对实例 I 执行的基本运算次数是 tI
在某些情况下可以假定每个输入实例概率相等
八、函数渐进的界- 大O符号
定义:若存在两个正的常数c和n0对于任n≥n0,都有T(n)≤c×f(n),则称T(n)=O(f(n)),或称算法在O(f(n)中。 - 大Ω符号
定义:若存在两个正的常数c和n0,对于任意n≥n0,都有T(n)≥c×g(n),则称T(n)=Ω(g(n)) - Θ符号
定义:若存在三个正的常数c1、c2和n0,对于任意n≥n0都有c1×f(n)≥T(n)≥c2×f(n),则称T(n)=Θ(f(n))