前端算法 时间复杂度

44 阅读2分钟

算法时间复杂度|给幼儿园小朋友的故事

下面用糖果分发折纸游戏的小游戏,让大家都能懂程序跑得快还是慢。


什么是“时间复杂度”?

  • 就像玩游戏需要时间,电脑做事也要时间。
  • 时间复杂度告诉我们:当事情(n 件事)变多时,需要花的时间会怎么变化。

常见的几种“速度等级”

1. O(1):一次就搞定

  • 不管有多少糖果,一按按钮就吃到。
  • 例子:你按门铃响一次,和家里没人、一个人、十个人都一样快。

2. O(n):一个一个来

  • 糖果多一倍,数的时间就多一倍。
  • 例子:桌上有 n 颗糖,你要一个个数完,要数 n 次。

3. O(log n):对半折,快到飞起

  • 每次都把要找的东西对半折,折到剩 1 件就找到。

  • 折纸游戏举例(n = 8)

        [1 2 3 4 5 6 7 8]
         ├─────┴─────┤
      [1 2 3 4]   [5 6 7 8]
       ├──┴──┤     ├──┴──┤
     [1 2] [3 4] [5 6] [7 8]
      ├┴┤  ├┴┤  ├┴┤  ├┴┤
     [1][2][3][4][5][6][7][8]
    
    

O(log n) 示例

  • 折的次数:8 → 4 → 2 → 1,一共折 3 次,正好是 log₂8 = 3。
  • 捉迷藏找朋友:16 个小朋友,问“他在左边还是右边?”,最多 4 次(log₂16 = 4)就能找到。

4. O(n log n):既要跑一圈,又要多轮折半

  • 典型玩法:快速排序(Quick Sort),就像给糖果排队。
  • 分糖果版说明:
    1. 每轮都要看完所有糖果(n 颗)——要跟每颗糖“打招呼”一次。
    2. 然后把这堆糖对半分,分别对左右两堆再做同样动作。
    3. 总共要做 log₂n 轮(把堆折到只剩 1 且结束),每轮花 n 次比较 → n × log₂n 次。

小朋友们要记住

速度等级动作描述举例
O(1)一次就完成按门铃
O(n)一个接一个数糖果
O(log n)对半折,折到剩 1折纸找卡片、捉迷藏
O(n log n)每轮全跑一遍 + 多轮折半快速排序分糖果

这样,下次再看到 O(n log n)O(log n),就像在玩分糖果折纸游戏,轻松记住速度差别啦!🎉