老师在纸上写了一个 1~100 之间的整数,让小明来猜。每次猜完老师会告诉"大了"或"小了"。
笨办法:从1开始一个个猜,最坏要猜 100次。
聪明办法:每次都猜中间的数!
第1次:猜 50 → 老师说"大了"
第2次:猜 25 → 老师说"小了"
第3次:猜 37 → 老师说"大了"
第4次:猜 31 → 老师说"小了"
第5次:猜 34 → 老师说"对了"!🎉
只用了 5 次!最多也只要 7 次!
为什么?因为每次猜中间的数,搜索范围缩小一半:
100 → 50 → 25 → 13 → 7 → 4 → 2 → 1
最多 ⌈log₂(100)⌉ = 7 次就能确定答案!
这就是二分法 —— 每次排除一半,对数级效率!
💡 二分法 vs 线性查找
线性查找(一个个找):n=10⁹ 时最坏要 10亿次 → 超时!
二分查找(每次砍半):n=10⁹ 时最多 30次 → 瞬间完成!
10亿 vs 30,差距是 3300万倍!这就是 O(n) 和 O(log n) 的天壤之别。