同一任务,不同算法 · time complexity in real numbers
新手常觉得"我的 O(n) 算法常数大,可能比 O(n²) 还慢"。在 n 很小时确实如此,但 n 一旦变大,曲线立刻碾压常数。
当 n=1000:左边是 100 万次操作,右边也是 100 万次,打平。当 n=1 万:左边 1000 万,右边 1 亿——O(n²) 已经慢 10 倍。当 n=10 万:左边 1 亿,右边 100 亿,慢 100 倍。常数再大也是线性的,曲线一旦分叉就再也合不上。
拖动滑块改变 n,看四种复杂度的操作数怎么变。条形长度按对数缩放(不然 O(2ⁿ) 一根条会撑爆屏幕)。
指数复杂度不是"慢一点",是"宇宙都跑不完"。n=64 时,2⁶⁴ ≈ 1.8×10¹⁹ 次操作,按每秒 10 亿次算要 580 年。这就是为什么 NP-hard 问题(如旅行商的暴力解)在 n 稍大时就无解——不是算法差,是问题本身在指数爆炸。
工程上遇到指数复杂度,标准动作是换问题:用近似算法、贪心、动态规划把指数压成多项式。比如背包问题暴力是 O(2ⁿ),动态规划能压到 O(nW)。不追求最优解,只追求"够好且能跑完"。