带你走进Java数据结构与算法(十三)

68 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第二十二天,点击查看活动详情

前言:今天带领大家继续学习算法的时间复杂度~

  1. 线性阶O(n)

    for(i=1,i<=n,i++){
        j =i;
        j++;
    }
    

    这段代码,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变 化的,因此这类代码都可以用O(n)来表示它的时间复杂度

  2. 线性对数阶O(nlogN)

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

    将时间复杂度为O(logn)的代码循环N遍的 话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)

  3. 平方阶O(n^2^)

    for(i=1,i<=n,i++){
        for(j=1,j<=n,j++){
            j = i;
            j++;
        }
    }
    

    如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂 度就是 O(n²),这段代码其实就是嵌套了2层n循环,它的时间复杂度就是 O(n * n), 即 O(n²) 如果将其中一层循环的n改成m,那它的时间复杂度就变成了 O(m * n)

  4. 立方阶O(n³)、K次方阶O(n^k^)

平均时间复杂度和最坏时间复 杂度

  • 平均时间复杂度是指所有可能的输 入实例均以等概率出现的情况下, 该算法的运行时间。
  • 最坏情况下的时间复杂度称最坏时 间复杂度。一般讨论的时间复杂度 均是最坏情况下的时间复杂度。 原因是:最坏情况 下的时间复杂度是算法在任何输入实例上运行时间的界限,这就保证 了算法的运行时间不会比最坏情况更长。

image-20220901092550077

空间复杂度

  • 一个算法的空间复杂度(Space Complexity)定义为该 算法所耗费的存储空间,它也是问题规模 n 的函数
  • 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大 小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它 随着n的增大而增大,当n较大时,将占用较多的存储单元