16.1 優化,是在優化什麼?
先把 10.1 的結論搬回來:程式會不會 TLE,由「運算次數隨資料量 n 成長的形狀」決定——認出 O、代入最大的 n、除以 10^9 跟時限比。
所以優化的目標是換形狀,不是修零頭。一個 O(n^2) 的做法在 n = 10^5 要跑 10^{10} 次,就算你把迴圈裡的運算精簡一半,也還有 5 \times 10^9 次——照樣 TLE。真正的出路是把形狀往下換一階:
| n = 10^{12} 時 | 運算次數 | 感受 |
|---|---|---|
| O(n) | 10^{12} | 約一千秒,死當 |
| O(\sqrt{n}) | 10^6 | 眨眼 |
| O(\log n) | 約 40 | 快到測不出來 |
| O(1) | 1 | 一步 |