有关时间复杂度的计算

有关时间复杂度的计算
时间复杂度:执行的次数和问题规模之间的函数关系。
1.计算规则:(1)只考虑高阶项,低阶项直接丢弃;(2)系数不要。
2.常见的时间复杂度:增长率由小到大为:
常数阶O(1),  对数阶O(log2n),  线性阶O(n),  线性对数阶O(nlog2n),  平方阶O(n^2), 立方阶O(n^3),..., k次方阶O(n^k), 指数阶O(2^n),  阶乘O(n!)。
如果一个算法的复杂度为常量 、 log2n 、n 、 n*log2n,那么这个算法时间效率比较高 ,如果是 2n , 3n ,n!,那么稍微大一些的n就会令这个算法不能动了,居于中间的几个则差强人意。
3.举例:
(1)O(1)
    Temp=i;
    i=j;
    j=temp;    
    //执行的次数和问题规模n无关

(2)O(n)
    void Fun(int n)
    {
        if(n<1)
            return 1;
        else
            return Fun(n-2)+1;
    }
    //循环了n+(n-2)+(n-4)+(n-6)+……+1 不考虑系数n/2,所以是O(n)

(3)O(log2n)
    void Fun(int n)
    {
        if(n<1)
            return 1;
        else
            return Fun(n/2)+1;
    }
    //循环了n+(n/2)+(n/4)+(n/6)+……+1 2^x=n x=log2n,所以是O(log2n)
    
(4)O(n2)
 (a)for(i=1;i<=n;i++)    //循环了n*n次,是O(n^2)
        for(j=1;j<=n;j++)
            s++;
            
 (b)for(i=1;i<=n;i++)    //循环了(n+n-1+n-2+...+1)≈(n^2)/2,因为时间复杂度是不考虑系数的,所以也是O(n^2)
        for(j=i;j<=n;j++)
            s++;
            
 (c)for(i=1;i<=n;i++)    //循环了(1+2+3+...+n)≈(n^2)/2,当然也是O(n^2)
        for(j=1;j<=i;j++)
            s++;
            
(5)for(i=1;i<=n;i++)
        for(j=1;j<=i;j++)
            for(k=1;k<=j;k++)
                x=x+1;
    //循环了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6 ≈ (n^3)/3,不考虑系数,自然是O(n^3)

另外,在时间复杂度中,log(2,n)(以2为底)与lg(n)(以10为底)是等价的,因为对数换底公式log(a,b)=log(c,b)/log(c,a)
所以,log(2,n)=log(2,10)*lg(n),忽略掉系数,二者当然是等价的
4.渐近时间复杂度
时间复杂度是某个算法的时间耗费,它是该算法所求解问题规模n的函数;
而渐进时间复杂度是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。
例题:设三个函数f,g,h分别为 f(n)=100n^3+n^2+1000 , g(n)=25n^3+5000n^2 , h(n)=n^1.5+5000nlgn
请判断下列关系是否成立:
(1) f(n)=O(g(n))
(2) g(n)=O(f(n))
(3) h(n)=O(n^1.5)
(4) h(n)=O(nlgn)

渐近时间复杂度的表示法T(n)=O(f(n)),这里的"O"是数学符号,它的严格定义是"若T(n)和f(n)是定义在正整数集合上的 两个函数,则T(n)=O(f(n))表示存在正的常数C和n0 ,使得当n≥n0时都满足0≤T(n)≤C?f(n)。"

简单来说就是这两个函数当整型自变量n趋向于无穷大时,两者的比值是一个不等于0的常 数。(即两个函数的增长率相等,即最高项的指数相同)

◆(1)成立。题中由于两个函数的最高次项都是n^3,因此当n→∞时,两个函数的比值是一个常数,所以这个关系式是成立的。
◆(2)成立。与上同理。
◆(3)成立。与上同理。

◆(4)不成立。由于当n→∞时n^1.5比nlgn递增的快,所以h(n)与nlgn的比值不是常数,故不成立。

以上是比较常用的情况,以后学习完更多复杂情况,再来完善这篇博客。

----------------------------------------------------------------------------------------------

参考资料:
http://blog.csdn.net/firefly_2002/article/details/8008987
http://univasity.iteye.com/blog/1164707
http://blog.csdn.net/zhuchzhi/article/details/1529514

猜你喜欢

转载自blog.csdn.net/lemonchi/article/details/78314328
今日推荐