有用

代码与技术常识06 / 10

大 O 的 6 个等级

O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ)。

  • 学会用时1 小时
  • 你的收获数据变多时,预判哪里会先卡住
  • 用到的频率每周 1 次
  • 难度稍难

01为什么学

没学之前

数据从一百条变成十万条,页面突然卡死,不知道原因。

学会之后

看代码就能估算增长速度,提前避开 O(n²) 的陷阱。

  • 能预判全文检索、去重、分页的瓶颈
  • 明白为什么长上下文的注意力那么贵

02图解

数据图
对数坐标。n 翻倍,O(n²) 变 4 倍,O(2ⁿ) 变成平方。

03基本单元6 个

  • O(1)常数
  • O(log n)对数,二分查找
  • O(n)线性,遍历一遍
  • O(n log n)排序
  • O(n²)双重循环
  • O(2ⁿ)枚举所有子集

04怎么用

  1. 看循环一层循环 O(n),两层嵌套 O(n²)
  2. 每次把范围砍一半O(log n)
  3. 排序通常是 O(n log n)
  4. 数据量大时优先减少嵌套循环用哈希表或排序加双指针

05速查表

等级例子
O(1)用下标取数组元素、查哈希表
O(log n)二分查找
O(n)遍历数组一遍
O(n log n)排序
O(n²)双重循环(如两两比较去重)

06动手试试

数据变多,代码会慢多少

07套用一次

去重:双重循环是 O(n²);先放进哈希集合再统计是 O(n)。数据 10 万条时,前者要十几秒,后者瞬间。

08常见的坑

  • 忽略常数

    n 很小时,O(n²) 也可能比 O(n log n) 快,别过度优化。

  • 只看代码行数

    一行代码里也可能藏着循环,比如数组的 includes。

09自测与练习

先做 10 秒自测,再动手练一下。

两层嵌套循环,每层都遍历 n 个元素,复杂度是?

10 分钟小练习

找一段自己的代码,估算它的复杂度,再用演示器看 10 万条数据大概多慢。

看参考答案
嵌套循环里再调用数组的 includes 是常见的隐藏 O(n²)。

+配合着学

代码与技术常识的全部 10 条