美文网首页
算法的时间复杂度

算法的时间复杂度

作者: ip小怪兽 | 来源:发表于2020-04-02 01:34 被阅读0次

    时间复杂度

    渐进时间复杂度(asymptotic time complexity):
    若果存在函数f(n),使得当n区域无穷大时,T(n)/f(n)的极限值为不为零的常数,则f(n)是T(n)的同数量级函数,记作T(n)=O(f(n)),称为O(f(n)),O为算法的渐进时间复杂度,简称时间复杂度。因为渐进时间复杂度用大写O来表示,所以也被为大O表示法
    如何推导出时间复杂度呢?
    ①如果运行时间是常数量级,则用常数1表示;
    ②值班刘时间函数的最高阶项;
    ③如果最高阶项存在,则省去最高阶项前的系数。
    怎么计算时间复杂度,看下面几个例子:
    1、

    public void test1(){
        System.out.println("Hello");   //需要执行一次;
        System.out.println("World");   //需要执行一次;
    }
    

    T(n) = 2,执行次是常量,则转化时间复杂度为T(n) = O(1)

    2、

    void test2(int n) {
        for (int i = 0; i < n; i++) {
            System.out.println("Hello");  //需要执行一次;
            System.out.println("World");  //需要执行一次;
            System.out.println("!!!!!!");  //需要执行一次;
        }
    }
    

    T(n) = 3n,执行次是线性的,则转化时间复杂度为T(n) = O(n)
    3、

    void test3(int n) {
        for (int i = 0; i > n; i *= 2) {
            System.out.println("等一分钟");  //需要执行一次;
            System.out.println("等一分钟");  //需要执行一次;
        }
    }
    

    上面这段代码以为每次循环中i 乘以2,所以循环退出条件为2^x>n;则x次后退出循环;即 x = log_2^n 次;即T(n) = 2logn。所以这个循环的时间复杂度为O(logn)。
    4、

    void test4(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                System.out.println("等一分钟");  //需要执行一次;
            }
            System.out.println("做点什么");  //需要执行一次;
        }
    }
    

    第一次中打印语句1次,第二次执行2执行2次...第n次执行n次,一共执行了1+2+3+...+n次,T(n) = 0.5n^2 + 0.5n,执行次数使用多项式表示的,即O(n)=n^2

    常见的时间复杂度:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

    相关文章

      网友评论

          本文标题:算法的时间复杂度

          本文链接:https://www.haomeiwen.com/subject/jwyyuctx.html