算法复杂度:主要体现在运行该算法时 所需要的计算机资源,计算机资源最重要的是时间和内存,也因此可以将算法复杂度分为时间复杂度和空间复杂度。
时间复杂度:代表运行算法所需要的计算量。(“整个算法的执行时间与基本操作重复执行的次数成正比。”)
空间复杂度:代表运行算法所需要的内存空间。
时间复杂度:
假设算法中基本操作重复次数是问题规模n的某个函数, 用T(n)表示;若存在某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于0的常数,那么称f(n)为T(n)的同数量级函数。记做T(n)=O(f(n)),称O(f(n))为算法的时间复杂度。
算法执行时间的执行率,和f(n)的增长率成正比,f(n)越小,算法时间复杂度越低,算法效用越高。
计算算法时间复杂度:
- 先找到算法的基本操作
- 然后根据相应的语句的执行次数T(n),再找到T(n)的同数量级函数f(n)。(常见同数量级函数有:1、、、、、、、)
- 若T(n)/f(n)求极限为一个常数,则时间复杂度为T(n)=O(f(n))
例如,有如下算法:
for (i=0;i<n;i++)
{
for(times = 1; times <= n; times++)
{
tmp = array[times-1]; //该步骤属于基本操作,执行次数:n的平方次
for(index = times;index <= n; index++)
{
if(array[index] < tmp)//该步骤属于基本操作执行次数:n的三次方次
{
index_tmp = index;
tmp = array[index];
}
}
}
}
那么有,基本操作计算次数,我们可以确定T(n)的同数数量级为f(n)=,明显T(n)/f(n)极限为常数,所以该算法的时间复杂度为T(n)=。
空间复杂度
是对一个算法在运行过程中临时占用的存储空间大小的度量,记做S(n)=O(f(n))。