算法的时间复杂度

时间复杂度

渐进时间复杂度(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次后退出循环;即 次;即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)

你可能感兴趣的:(算法的时间复杂度)