2 算法
2.1 算法定义:
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2.2 算法的特性
算法具有五个基本特性:
- 输入:有0或多个输入
- 输出:至少一个或多输出
- 有穷性:在执行有限步骤后,自动结束不会出现无限循环
- 确定性:每一步骤都有明确含义,不会出现二义性
- 可行性:每一步都能够通过执行有限次数完成
2.3 算法设计的要求
- 正确性
- 可读性
- 健壮性:当输入数据不合法时,算法也能作出相关的处理,而不是产生异常或莫名其妙的结果
- 时间效率高和存储量低
2.4 算法度量方式
- 事后统计方法
- 事前分析估算方法
基本的操作数量必须表示成输入规模的函数。
2.5 算法复杂度
计算算法的时间复杂度其实是一个很基础的东西,目前看主要就是先看执行次数和问题规模的函数f(n),然后推导大O阶的方法计算出时间复杂度,其实只需要关注f(n)中的最高阶的阶数,因为在问题规模趋向于无限大的时候,起决定性作用的就是这个最高阶。计算方法如下:
2.6 常见时间复杂度:
执行次数函数 | 阶 | 非正式术语 |
---|---|---|
12 | O ( 1 ) O(1) O(1) | 常数阶 |
2 n + 3 2n+3 2n+3 | O ( n ) O(n) O(n) | $线性阶 |
3 n 2 + 2 n + 1 3n^2+2n+1 3n2+2n+1 | O ( n 2 ) O(n^2) O(n2) | 平方阶 |
5 l o g 2 n + 20 5log_2n+20 5log2n+20 | O ( l o g n ) O(log_n) O(logn) | 对数阶 |
2 n + 3 n l o g 2 n + 19 2n+3nlog_2n+19 2n+3nlog2n+19 | O ( n l o g n ) O(nlog_n) O(nlogn) | n l o g n nlogn nlogn阶 |
6 n 3 + 2 n 2 + 3 n + 4 6n^3+2n^2+3n+4 6n3+2n2+3n+4 | O ( n 3 ) O(n^3) O(n3) | 立方阶 |
2 n 2^n 2n | O ( 2 n ) O(2^n) O(2n) | 指数阶 |
O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log n)<O(n)<O(nlog n)<O(n 2)<O(n 3)<O(2 n)<O(n!)<O(n^n) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
2.7 最坏情况与平均情况
一般没说明的情况下,指最坏情况
平均情况具有参考意义
2.8 算法空间复杂度
通过计算算法所需的存储空间实现。
“时间复杂度”指运行时间的需求
“空间复杂度”指空间需求