@@ -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