算法和数据结构(一)--算法复杂度

算法复杂度:主要体现在运行该算法时 所需要的计算机资源,计算机资源最重要的是时间和内存,也因此可以将算法复杂度分为时间复杂度和空间复杂度。

时间复杂度:代表运行算法所需要的计算量。(“整个算法的执行时间与基本操作重复执行的次数成正比。”)

空间复杂度:代表运行算法所需要的内存空间。


时间复杂度:

       假设算法中基本操作重复次数是问题规模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、log_{{2}}nnnlog_{{2}}nn^2n^32^nn!
  • 若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)=n^3+n^2,我们可以确定T(n)的同数数量级为f(n)=n^3,明显T(n)/f(n)极限为常数,所以该算法的时间复杂度为T(n)=O(n^3)


空间复杂度

扫描二维码关注公众号,回复: 2635175 查看本文章

是对一个算法在运行过程中临时占用的存储空间大小的度量,记做S(n)=O(f(n))。

 

猜你喜欢

转载自blog.csdn.net/tustzhoujian/article/details/81384127