为什么二分查找的时间复杂度是 O(logN)?
以下是大致的证明过程:
假设长度为 N 的数组,最多需要比较 f(N) 次才能找到目标元素。
- 当 N 为1时,只需要比较一次,因此 f(1) = 1。
- 当 N 为2时,先二分一次,然后在长度为1的子数组中查找,因此 f(2) = 1 + f(1)
- 当 N 为3时,先二分一次,二分后的两个子数组长度都为1,因此 f(3) = 1 + f(1)
- 当 N 为4时,有f(4) = 1 + f(2)
- 重复上述步骤,当 N 为 n 时,得出比较次数为 f(n) = 1 + f(n/2)。其中,N/2 向下取整。
根据上述归纳,我们可以得出公式:
依次递推,我们可以得出:
当 N/2^m =1,即 m = logN 时:
对于长度为N的数组,最多需要比较 logN + 1次。它的增长等级为 logN,因此二分查找算法的时间复杂度为 O(logN)。