1.时间复杂度

  T(n):对输入规模为n的问题处理所需的时间;

    a.忽略小规模问题处理时间,基本操作视为在常数时间内完成;

    b.通常忽略具体大小,关注上下界即可;

2.空间复杂度

  在对空间效率要求不甚严格的情况下,优先考察时间复杂度;在任何一个算法的一次计算中,其占用的空间都不会多于其间的基本操作次数,时间复杂度是空间复杂度的一个上界

3.算法复杂度

  a.常数复杂度 σ(1);

  b.对数复杂度 σ(nlogn);

  c.现行复杂度 σ(n);

  d.多项式复杂度 σ(n2),此时准确来说 Θ(n2);

  e.指数复杂度 σ(2n),此时不能算是有效的算法,并不能在实际中使用;

4.递归

  a.线性递归:每个实例只能至多的递归调用自己一次;

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3};
        System.out.println(sum(arr,arr.length));
    
    }
    private static int sum(int[] arr,int n){
        if(n==0){
            return 0;
        }else{
            return sum(arr,n-1)+arr[n-1];
        }
    }    

  b.二分递归:将一个大的问题拆分成两个小的问题分别递归求解;

  c.多分支递归:将一个问题拆分为多个子问题来解决;