@@ -46,6 +46,7 @@ def find_max(arr):
4646在上述例子中,基本操作总共执行了 $1 + n + n + n + 1 = 3 \times n + 2$ 次,因此可以用 $f(n) = 3 \times n + 2$ 表示其操作次数。
4747
4848时间复杂度分析如下:
49+ 
4950-  当 $n$ 足够大时,$3n$ 是主要影响项,常数 $2$ 可以忽略不计。
5051-  由于我们关注的是随规模增长的趋势,常数系数 $3$ 也可以省略。
5152-  因此,该算法的时间复杂度为 $O(n)$。这里的 $O$ 表示渐近符号,强调 $f(n)$ 与 $n$ 成正比。
@@ -69,6 +70,7 @@ def find_max(arr):
6970** 直观理解** :$T(n) = O(f(n))$ 表示「算法的运行时间至多为 $f(n)$ 的某个常数倍」,即不会比 $f(n)$ 增长得更快。
7071
7172>  ** 示例** :
73+ >  
7274>  -  如果 $T(n) = 3 \times n^2 + 2 \times n + 1$,则 $T(n) = O(n^2)$。
7375>  -  如果 $T(n) = 2 \times n + 5$,则 $T(n) = O(n)$。
7476>  -  如果 $T(n) = 100$,则 $T(n) = O(1)$。
@@ -82,6 +84,7 @@ def find_max(arr):
8284** 直观理解** :$T(n) = \Omega(f(n))$ 表示「算法的运行时间至少不会低于 $f(n)$ 的某个常数倍」,即增长速度不慢于 $f(n)$。
8385
8486>  ** 示例** :
87+ >  
8588>  -  如果 $T(n) = 3 \times n^2 + 2 \times n + 1$,则 $T(n) = \Omega(n^2)$。
8689>  -  如果 $T(n) = 2 \times n + 5$,则 $T(n) = \Omega(n)$。
8790>  -  如果 $T(n) = n^3$,则 $T(n) = \Omega(n^2)$。
@@ -95,6 +98,7 @@ def find_max(arr):
9598** 直观理解** :$T(n) = \Theta(f(n))$ 表示「算法运行时间与 $f(n)$ 同阶」,即上下界都为 $f(n)$ 的常数倍。
9699
97100>  ** 示例** :
101+ >  
98102>  -  如果 $T(n) = 3 \times n^2 + 2 \times n + 1$,则 $T(n) = \Theta(n^2)$。
99103>  -  如果 $T(n) = 2 \times n + 5$,则 $T(n) = \Theta(n)$。
100104>  -  如果 $T(n) = n \log n + n$,则 $T(n) = \Theta(n \log n)$。
@@ -306,8 +310,8 @@ def generate_permutations(arr):
306310|  $O(n)$     |  10            |  100   |  1000   |  线性搜索、数组遍历 | 
307311|  $O(n \log n)$ |  33        |  664   |  9966   |  快速排序、归并排序 | 
308312|  $O(n^2)$   |  100           |  10000 |  1000000|  冒泡排序、选择排序 | 
309- |  $O(2^n)$   |  1024          |  1.3× 10^30 |  1.1× 10^301 |  递归斐波那契 | 
310- |  $O(n!)$    |  3628800       |  9.3× 10^157 |  4.0× 10^2567 |  全排列 | 
313+ |  $O(2^n)$   |  1024          |  $ 1.3 \times  10^30$  |  $ 1.1 \times  10^301$  |  递归斐波那契 | 
314+ |  $O(n!)$    |  3628800       |  $ 9.3 \times  10^157$  |  $ 4.0 \times  10^2567$  |  全排列 | 
311315
312316### 2.4 最佳、最坏、平均时间复杂度  
313317
@@ -331,7 +335,7 @@ def find(nums, val):
331335-  ** 最坏情况** :目标值不存在,需要遍历整个数组,时间复杂度 $O(n)$
332336-  ** 平均情况** :假设目标值等概率出现在任意位置,平均时间复杂度 $O(n)$
333337
334- ** 实际应用** :通常使用 ** 最坏时间复杂度**  作为算法性能的衡量标准,因为它能保证算法在任何输入下的性能上限。只有在不同情况下的时间复杂度存在量级差异时,才需要区分三种情况。
338+ >  ** 实际应用** :通常使用 ** 最坏时间复杂度**  作为算法性能的衡量标准,因为它能保证算法在任何输入下的性能上限。只有在不同情况下的时间复杂度存在量级差异时,才需要区分三种情况。
335339
336340## 3. 空间复杂度  
337341
0 commit comments