SWE Intern · OA DSA Multiple Choice

Rippling OA 三层循环复杂度:为什么是 Θ(n⁴)

按外层 i、中层 i² 次、内层约 i 次求和,区分代码真实边界与只数循环层数的错误。

题目重点:按外层 i、中层 i² 次、内层约 i 次求和,区分代码真实边界与只数循环层数的错误。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • n 为非负整数,内层确实执行与 i 成正比的 Θ(i) 次基本操作;各循环界互不被内部修改。
  • 若内层有提前 break、步长倍增或 i² 实为别的表达式,应以真正执行次数重算,不能套用本结论。

解题路线

  1. 固定一个 i:中层有 i² 次迭代,每次内层 Θ(i),所以该 i 的工作 Θ(i³);i=0 的零工作不影响渐近阶。
  2. 对 i=1…n−1 求和,Σi³=(n(n−1)/2)²,所以总工作 Θ(n⁴)。给上界和下界都由同一多项式阶支撑,比只报 O(n⁴) 更精确。
  3. 可代 n=2、3 手算各外层成本:n=3 时 i=1 贡献 1、i=2 贡献 8,总 9;公式 `(3×2/2)²=9`。
  4. 如果 j 从 0 到 n−1 而非 i²−1,总和会变为 nΣi=Θ(n³);看变量依赖才能判断,不能‘三层循环=立方’。

手动走一遍

n=4:外层 i=0,1,2,3 各约 0,1,8,27 次,合 36;公式 `(4×3/2)²=36`。若内层每次还做 O(log n) 工作,整体会乘上该成本。

规模与取舍

时间 Θ(n⁴);若只是累加计数器且不分配随 n 增长的存储,辅助空间 O(1)。n 很大时数学计数值在固定宽度整数中可能溢出,但不改变算法操作次数。

易错点与追问

容易失分的边界

  • 机械地数三层得到 O(n³)。
  • 把 i² 与 i 的依赖当独立 n。
  • 只给 O(n⁴) 上界,却忽略该条件下也有 Ω(n⁴)。
  • 没核实内层是否真的每次做 i 步。

继续深挖

  • 若中层到 i 而非 i²,复杂度如何变?
  • 若内层每次 i/2 步,阶数变吗?
  • 若 i 每次翻倍,求和怎么变?
  • 用公式怎样验证小 n 的操作数?
✓已复制微信号!