时间复杂度描述的是:数据规模 n 变大时,算法的基本操作次数按什么趋势增长,只看最高阶、不计常数倍。常见的阶从慢到快:O(1)<O(log n)<O(n)<O(n log n)<O(n²)。二分查找每比较一次排除一半,最多比较 ⌊log₂n⌋+1 次,是 O(log n);顺序查找最坏比较 n 次,是 O(n);冒泡排序比较 n(n−1)/2 次,是 O(n²)。n 很小时差别不大,n 到百万、十亿时,O(n²) 要算几小时甚至几百年,O(log n) 却只要几十次。
n 人两两握手:n(n−1)/2 次 → O(n²)
n 页字典二分查词:最多 ⌊log₂n⌋+1 次 → O(log n)
n 扩大 10 倍:O(n) ×10,O(n²) ×100,O(log n) 只加约 3.3
· 易错:线性刻度下 O(1)、O(log n) 贴着横轴,不是等于 0,而是比 n² 小太多
· 易错:n(n−1)/2 和 n² 只差常数倍,属于同一个阶 O(n²)
· 对数刻度每格乘相同的倍数(10、100、1000…),能把相差上亿倍的数画在同一张图上
· 生活中:网购平台在上亿商品里搜索,必须用 O(log n) 级别的方法