目录
1. 如何衡量一个算法的好坏
计算程序的时间复杂度和空间复杂度
2. 算法效率
算法效率分析分为两种:第一种是时间效率,第二种是空间效率
。
时间效率被称为时间复杂度,而空间效率被称作
空间复杂度
。
时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间
3. 时间复杂度
3.1 时间复杂度的概念
算法的时间复杂度是一个数学函数,
算法中的基本操作的执行次数,为算法的时间复杂度。
3.2 大O的渐进表示法
void func1(int N){
int count = 0;
for (int i = 0; i < N ; i++) { -------------N
for (int j = 0; j < N ; j++) { -----------N
count++;
}
}
for (int k = 0; k < 2 * N ; k++) { -------2*N
count++;
}
int M = 10;
while ((M--) > 0) { ------10
count++;
}
System.out.println(count);
}
将各部分的次数加起来得到
3.3 推导大O阶方法
1
、用常数
1
取代运行时间中的所有加法常数。
2
、在修改后的运行次数函数中,只保留最高阶项。
3
、如果最高阶项存在且不是
1
,则去除与这个项目相乘的常数。得到的结果就是大
O
阶。
使用大
O
的渐进表示法以后,
Func1
的时间复杂度为:
通过上面我们会发现大
O
的渐进表示法
去掉了那些对结果影响不大的项
,简洁明了的表示出了执行次数。
最坏情况:任意输入规模的最大运行次数
(
上界
)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数
(
下界
)
例如:在一个长度为
N
数组中搜索一个数据
x
最好情况:
1
次找到
最坏情况:
N
次找到
平均情况:N/2
次找到
4.空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,
度计算规则基本跟时间复杂度类似,也
使用
大
O
渐进表示法
。
总结
在设置程序时,尽量选择设计复杂度小的程序写法来简化代码,提高代码的效率
希望读者在编写程序时多思考如何编写,选择效果较好的写法