一、算法的概念及评估标准
算法是操作数据、解决问题的一组方法。
衡量算法的维度:
- 时间维度:时间复杂度,执行算法消耗的时间。
- 空间维度:空间复杂度,执行算法占用的内存空间。
大O符号表示法来表示算法的复杂度。
二、时间复杂度
2.1 概念
时间复杂度:T(n)=O(f(n)),算法的渐进时间复杂度,f(n)表示每行代码执行次数之和,O表示正比例关系。
for(i=1; i<=n; ++i) //1个时间粒度
{
j = i; //n个时间粒度
j++; //n个时间粒度
}
T(n)=(1+2n)*时间粒度,当n->无限大的时候,简化为:T(n)=O(n)
==》表示代码执行时间的变化增长趋势
2.2 常见的时间复杂度
- 常数阶O(1)——消耗的时间不随某个变量增长
- 线性阶O(n)——消耗的时间随着n的变化而变化
- 对数阶O(logN)
int i = 1;
while(i<n)
{
i = i * 2;
}
假设循环x次后,i>n,则2的x次方=n,则x = log2^n
4.线性对数阶O(nLogN)——将O(logN)循环n遍
5.平方阶O(n^2)——将O(n)再嵌套循环一遍
三、空间复杂度
3.1 概念
空间复杂度:对算法在运行过程中临时占用存储空间的大小的度量。S(n)
3.2 常见的空间复杂度
- 空间复杂度O(1)——占用的空间不随某个变量增长
- 空间复杂度O(n)——占用的空间随着n的变化而变化
int[] m = new int[n] //数组占用n个空间,S(n)=O(n)
for(i=1; i<=n; ++i)
{
j = i;
j++;
}