数据结构与算法-时间复杂度计算方式

概念

1.时间复杂度是计算代码运行效率的重要指标,用大写的O表示
2.常见的复杂度(按照从小到大) O(1) ,< O(logn) < O(n) < O(nlogn) < O(n^2 )
O(x*n^2)
3.在代码优化方面, O(1) , O(logn) ,O(n) ,O(nlogn) 的运行效果很好,基本优化的空间不是很大

O(1) :
O(1) 表示运行次数为常量 比如 只有一个 int a = 0 或者for 循环一个常量次数,即使这个常量非常大

public void time0_1(){
        int a =0;    //第一种

        //第二种
        for (int i=0; i< 1000000;++i){
            ///.....
        }
    }

O(logn)

for (int i =1;i<n;++i){
            i = i*2;
        }

计算在这个for 循环中 执行 i = i * 2 的次数 ,我们假设次数为 x
那么第一次 i =1 2的0次方
第二次 i = 2 2的1次方
第三次 i = 4 2的2次方
第四次 i = 8 2的3次方

第 k次 就是 2^(k-1)
所以当 i 要接近n 的时候 , 得出 2^x = n ==> x = log2n (在计算机算法中是忽略常量的) 也就是 时间复杂度 为 logn
i = i*3 也是 logn

O(n)
在一个循环中 需要执行 n次 (n是一个未知数 ,如果n是常量 那么 时间复杂度就是 O(1) 了 )

public void timeO_n(int n){
        for (int i =0;i<n;++i){
            i = i+1;
        }
    }

O(nlogn)
其实就是在时间复杂度为n的代码里面嵌套一个时间复杂度为logn的代码

public void time0_nlogn(int n){

        for (int i =0;i<n;++i){
            i = i+1;
            for (int j = 0;j<n;j++){
                j = 2*j;
            }
        }

    }

O(n^2)
在一个时间复杂度为n的代码里面再嵌套一个时间复杂度为n的代码

public void timeO_n_2(int n,int m ){

    for (int i =0;i

O(x*n^2) 原理同上

如果一段代码里面 出现了两种 时间复杂度的 ,那么这段代码的时间复杂度就是最大的那个

这段代码的时间复杂度为 n*logn

public void mutiTimeO(int n,int m){
        for (int i =0;i<n;++i){
            i = i+1;
        }

        for (int i =0;i<n;++i){
            i = i+1;
            for (int j = 0;j<n;j++){
                j = 2*j;
            }
        }
    }

你可能感兴趣的:(数据结构和算法,数据结构,算法)