开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第二十二天,点击查看活动详情
前言:今天带领大家继续学习算法的时间复杂度~
-
线性阶O(n)
for(i=1,i<=n,i++){ j =i; j++; }这段代码,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变 化的,因此这类代码都可以用O(n)来表示它的时间复杂度
-
线性对数阶O(nlogN)
for(i=1,i<=n,i++){ i = 1; while(i<n){ i = i*2; } }将时间复杂度为O(logn)的代码循环N遍的 话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)
-
平方阶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)
-
立方阶O(n³)、K次方阶O(n^k^)
平均时间复杂度和最坏时间复 杂度
- 平均时间复杂度是指所有可能的输 入实例均以等概率出现的情况下, 该算法的运行时间。
- 最坏情况下的时间复杂度称最坏时 间复杂度。一般讨论的时间复杂度 均是最坏情况下的时间复杂度。 原因是:最坏情况 下的时间复杂度是算法在任何输入实例上运行时间的界限,这就保证 了算法的运行时间不会比最坏情况更长。
空间复杂度
- 一个算法的空间复杂度(Space Complexity)定义为该 算法所耗费的存储空间,它也是问题规模 n 的函数
- 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大 小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它 随着n的增大而增大,当n较大时,将占用较多的存储单元