算法入门04:时间复杂度的定义

现在结合 场景比喻(找糖果),重新整理并解释 时间复杂度的定义,一步一步来。


1. 问题背景

我们有一个数组(像一排盒子):

A[0]  A[1]  A[2]  ...  A[n-1]

现在要在这些盒子里找到糖果 k


2. 算法(找糖果的步骤)

int i = n - 1;                 // 从最后一个盒子开始找
while (i >= 0 && (A[i] != k))  // 只要没找到,就继续往前
    i--;                       // 每次往前一个盒子
return i;                      // 返回位置,没找到就 -1

👉 翻译成找糖果

  • 你先站在最后一个盒子(第 n-1 个)。

  • 打开它,如果不是糖果 k,就往前走一步。

  • 一直这样翻,直到找到 k,或者走到最前面还没找到。


3. 时间复杂度的定义

时间复杂度描述的是:当盒子越来越多(n 越大)时,找糖果要花多少步?

用公式表示:

T(n)=O(f(n))T(n) = O(f(n))

其中:

  • T(n) = 算法实际的操作次数(语句的频度总和)。

  • f(n) = 算法中“最核心操作”的执行次数。

  • O(f(n)) = 忽略常数和低阶项后的“数量级”。


4. 三种情况

  • 最好情况:糖果就在最后一个盒子里。

    • 只翻一次 → T(n) = 1 → O(1)

  • 最坏情况:糖果根本不在盒子里。

    • 要翻 n 次 → T(n) = n → O(n)

  • 平均情况:糖果可能在任何位置。

    • 平均翻 n/2 次 → T(n) ≈ n/2 → O(n)


5. 更一般的解释

  • 时间复杂度就是:算法执行语句的总次数 T(n),和输入规模 n 的关系。

  • 我们不看精确次数,而是看 数量级:当 n 变得很大时,执行次数大约增长得有多快。


一句话总结
时间复杂度就是——当问题规模越来越大时,算法要花多少时间来完成
就像找糖果:盒子越多,时间越长;我们用 O(1)、O(n)、O(n²)… 来衡量这种“长”的速度。


要不要我帮你整理一张 “找糖果 vs 时间复杂度”对照表,把 O(1)、O(n)、O(n²) 都换成直观的找糖果场景?