算法及其简要分析
1 相关概念
1.1 算法是对特定问题的求解步骤的一种描述,是指令的有序序列
1.2 算法的5大特性
- 输入:一个算法有零个或者多个输入
- 输出:一个算法有一个或者多个输出
- 有穷性:一个算法必须是在执行有穷步后结束,且每一步的执行时间是有穷的
- 确定性:算法中每一条指令必须明确的,同一个输入只能得到相同输出
- 可行性:算法描述的操作可以通过已实现的操作,通过有限步来实现
2 算法的表示方法
- 自然语言描述
- 伪代码描述
3 评价算法效率
3.1 事后统计:将算法实现测算其时间与空间的开销
3.2 事前分析:对算法所耗资源的一种估算
3.3 算法分析的维度
- 时间复杂度
- 空间复杂度
4 算法分析
每条语句执行时间 = 语句执行的次数 * 单条语句执行的时间(单位时间,依赖于指令系统、代码质量等)
进行算法比较时可以剔除对于单位时间的考虑,单位时间是由所使用的硬件CPU以及操作系统所决定
算法执行时间 = 语句执行的时间 ≈ 每条语句执行的次数之和 ≈ 基本语句的执行次数
4.1 算法分析----时间复杂度
- 基本语句重复执行的次数是关于问题规模的一个函数,我们把该函数的渐进阶称为该算法的时间复杂度
- 问题规模:输入量是多少
- 基本语句:是执行次数与整个算法的执行次数成正比的语句
例如:for(i=1; i++; i <= n)
for(j=1; j++; j <= n)
x++
问题规模:n
基本语句:x++
问题复杂度:o(n2)
4.2 算法分析--大O符号
4.2.1 定义
若存在两个正常数C与n0,是的n≥n0时,T(n) <=C*f(n)恒成立,则T(n) = O(f(n))。

定理:若A(n)为一个n次多项式,则A(n)=O(nm)
4.2.2 算法分析---最坏情况、最好情况、平均情况
- 基本语句的执行次数是否只与问题的规模相关?
- 如果问题规模相同,时间代价与输入数据有关;则需要根据输入分析最好、最坏、平均情况。
4.2.3 常见的时间复杂度
常见阶的比较:O(1) < O(logn) < O(n) < O(n2) < O(2n) < O(n!)

4.3 算法分析---时间复杂度分析方法
4.3.1 时间复杂度运算法则
若T1(n) = O(g(n)), T2(n) = O(f(n)),则:
- T1(n) + T2(n) = max{g(n),f(n)}
- T1(n) * T2(n) = O(g(n)*f(n))
4.3.2 时间复杂度分析方法
- 求出程序各语句、各模块的运行时间
- 求出整个程序运行时间
4.3.3 求出各语句、各模块的运行时间所应该遵循的原则
- 赋值语句、读/写语句-----O(1)
- 语句序列-----运行时间由加法原则确认,取最长运行时间语句
- 分支语句 -----运行时间由分支条件(O(1))与运行时间最长的分支决定
- 循环语句-----重复执行次数n * (循环体耗时 + 计算参数、循环条件、跳出循环等辅助操作(O(1)))
- 递归函数-----T(n) = C + T(n-1);T(n)为递归函数运行时间
4.4 算法分析-----空间复杂度
是指算法执行过程中,最大存储空间的需求
浙公网安备 33010602011771号