时间复杂度学习(上)

2018-12-03  本文已影响0人  HelloWodee

2018年10月9日

1,定义

时间复杂度一般采用大O标记法, 即 T(n)=O(f(n)), 其中T(n)表示代码运行时间;n表示数据规模大小;f(n)表示每行代码执行次数总和,O 表示T(n)与f(n)的正比关系。大 O 时间复杂度实际上并不具体表示代码的真正运行时间,而是表示代码执行时间随数据规模增长的变化趋势。

在大 O 表示分析中,低阶项常数项都可以省略,只保留最高阶项即可;如 f(n)=2n+2在大 O 标记法中记为 T(n)=O(n),而对于形如 f(n)=2n^2 +2n+3表示为 T(n)=O(n^2)

2,时间复杂度分析

3,常见时间复杂度量级

度量级 O 表示
常量阶 O(1)
对数阶 O(logN)
线性阶 O(N)
线性对数阶 O(NlogN)
平方阶 O(N^2)
立方阶 O(N^3)
指数阶 O(2^n)
阶乘阶 O(N!)

4,最好、最坏、平均和均摊时间复杂度

以下将通过一段代码来讲述这几个时间复杂度:

public class Test {
    private int[] array = new int[5];
    private int N = 0;

    public void push(int item) {
        if (N == array.length) {
            resize(2 * array.length);
        }
        array[N++] = item;
    }

    private void resize(int size) {
        int[] temp = new int[size];
        for (int i = 0; i < N; i++) {
            temp[i] = array[i];
        }
        array = temp;
    }
}

上述代码是用数组模拟一个栈的部分代码,其中push表示压栈操作,resize表示对数组进行扩容的操作;当压入栈中的元素数量达到数组的容量时,就定义一个容量为之前两倍的新数组temp,将旧数组array中的元素复制到新数组中,然后将array指向temp

上一篇 下一篇

猜你喜欢

热点阅读