什么是时间复杂度和空间复杂度?如何分析大 O 表示法?

时间复杂度描述算法运行时间随输入规模 n 增长的趋势;空间复杂度描述额外内存随 n 增长的趋势。O() 只保留最高阶项并忽略常数系数。

分析步骤:

  1. 找出随输入规模变化最频繁的操作(基本语句)
  2. 用 n 表达其执行次数
  3. 取最高阶、去常数

常见量级(由快到慢):

O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(2^n) < O(n!)
// O(1):与 n 无关
function first(arr) { return arr[0] }

// O(n):线性扫描
function sum(arr) {
  let s = 0
  for (const x of arr) s += x   // 执行 n 次
  return s
}

// O(n^2):嵌套循环
function bubble(arr) {
  for (let i = 0; i < arr.length; i++)
    for (let j = 0; j < arr.length; j++) { /* ... */ }
}

注意:大 O 是「渐进上界」,最坏情况分析最常见;实际还要关注平均情况与常数因子(如 Quick Sort 常数优于 Merge Sort)。

同分类其他题目