第一章 人工智能基础
第三部分:算法分析与设计
第一节:算法复杂度分析
内容:时间复杂度与空间复杂度的概念与计算,Big-O 符号的使用
一、为什么要分析算法复杂度?
在人工智能系统中,我们经常要处理大规模数据和复杂模型。算法复杂度分析能帮助我们评估算法的运行效率和资源消耗,避免“看起来可行、实际跑不起”的问题。
二、时间复杂度(Time Complexity)
时间复杂度表示算法执行所需的基本操作数量与输入规模之间的关系,不关心具体运行时间,而关注增长趋势。
常见时间复杂度级别(从快到慢):
表达方式 | 名称 | 示例算法 |
---|---|---|
O(1) | 常数时间 | 访问数组元素 a[i] |
O(log n) | 对数时间 | 二分查找 |
O(n) | 线性时间 | 遍历数组 |
O(n log n) | 线性对数时间 | 归并排序、快速排序 |
O(n²) | 平方时间 | 冒泡排序、选择排序 |
O(2ⁿ) | 指数时间 | 递归求斐波那契 |
O(n!) | 阶乘时间 | 全排列(暴力穷举) |
示例:计算 1 到 n 的和
def sum_n(n):
total = 0
for i in range(1, n + 1):
total += i
return total
该函数有一个 for
循环,循环 n 次,因此时间复杂度为 O(n)。
三、空间复杂度(Space Complexity)
空间复杂度表示算法在运行时所需额外内存空间的增长量(不包括输入本身占用的空间)。
示例:
def create_list(n):
return [i for i in range(n)]
该函数创建了一个长度为 n 的列表,因此空间复杂度为 O(n)。
若函数中只使用常量变量(如计数器等),则空间复杂度为 O(1)。
四、Big-O 符号的使用
【漫话机器学习系列】017.大O算法(Big-O Notation)_big o notation-CSDN博客
Big-O 符号(大O符号)用于描述算法在最坏情况下的复杂度。
特点:
-
表示的是渐进上界(最坏情况);
-
忽略常数项和低阶项:如 O(3n² + 5n + 100) 简化为 O(n²);
-
用于评估算法的可扩展性(即输入变大时性能的变化)。
五、其他相关符号(了解)
-
Big-Omega (Ω):表示最优时间复杂度(最好情况);
-
Big-Theta (Θ):表示平均或精确复杂度(最好与最坏一致时使用);
但实际应用中,Big-O 使用最广泛。
六、小结与建议
-
时间复杂度关注算法执行步骤的增长趋势,空间复杂度关注额外内存占用;
-
Big-O 是工程中最常用的描述方式,用于衡量最坏情况下性能;
-
编写算法时应在准确性、效率、可读性之间做出权衡。