1.算法效率
-
时间效率(又被称为时间复杂度)
时间复杂度主要衡量一个算法的运行速度。 -
空间效率(又被称作空间复杂度)
空间复杂度主要衡量一个算法所需要的额外空间。
2.时间复杂度
- 时间复杂度的概念:算法中的基本操作的执行次数,为算法的时间复杂度。
举个例子:
void Func(int N)
{
int count = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
++count;
}
}
for (int k = 0; k < 2 * N; k++)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
printf("%d\n", count);
}
Func执行的基本操作次数为:F(N)=N^2+2*N+10
1.当N=10,F(N)=130
2.当N=100,F(N)=10210
3.当N=100,F(N)=1002100
-
大O的渐进表示法:实际上我们在计算时间复杂度时,我们并不一定要计算精确的执行次数,而只需要大概执行次数,所以用大O的渐进表示法。
大O符号:是用于描述函数渐进行为的数学符号。
推导大O阶方法:
1.用常数1取代运行时间中的所有加法常数
2.在修改的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶在使用大O的渐进表示法以后,上面提到Func的时间复杂度为:O(N^2)
1.当N=10,F(N)=100 2.当N=100,F(N)=10000 3.当N=100,F(N)=1000000
大O的渐进表示法去掉了那些对结果影响不大的项,简洁表明了执行次数。
值得注意的是,有些算法的时间复杂度存在最好、平均、最坏三种情况:
1.最坏情况:任意输入规模的最大运行次数(上界) 2.平均情况:任意输入规模的期望运行次数 3.最好情况:任意输入规模的最小运行次数(下界) 注意:在实际一般情况中关注的是算法的最坏情况
举个例子:在一个长度为N数组中搜索一个数据 a
最好:1次就找到
最坏:N次找到
平均:N/2次找到
3.空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,空间复杂度不是程序占用了多少byte的空间,而是变量的个数,同样使用大O渐进表示法。