为什么使用二分查找,而不是三分查找?

考虑平均比较次数

对于二分查找:

存在的比较情况:

  • 比较middle是否等于target
  • 比较middle是否小于target

单次查找平均比较次数:\frac{1 + 2}{2} = \frac{3}{2}

T(1) = 1
T(n) = T(\frac{n}{2}) + \frac{3}{2}
T(\frac{n}{2}) = T(\frac{n}{4}) + \frac{3}{2}
T(n) = T(\frac{n}{4}) + \frac{3}{2} \cdot 2
\therefore T(n) = T(1) + \frac{3}{2} \cdot \log_2{n} = 1 + \frac{3}{2} \cdot \log_2{n}

对于三分查找:

存在的比较情况:

  • 比较middle是否等于target_1
  • 比较middle是否小于target_1
  • 比较middle是否等于target_2
  • 比较middle是否小于target_2

单次查找平均比较次数:\frac{1 + 2 + 3 + 4}{4} = \frac{5}{2}

T(1) = 1
T(n) = T(\frac{n}{3}) + \frac{5}{2}
T(\frac{n}{3}) = T(\frac{n}{9}) + \frac{5}{2}
T(n) = T(\frac{n}{9}) + \frac{5}{2} \cdot 2
\therefore T(n) = T(1) + \frac{5}{2} \cdot \log_3{n} = 1 + \frac{5}{2} \cdot \log_3{n}

对比:

1 + \frac{3}{2} \cdot \log_2{n} < 1 + \frac{5}{2} \cdot \log_3{n}

所以,二分查找优于三分查找。

对于x分查找

单次平均比较次数:

x - \frac{1}{2}

平均比较次数

f(x) = 1 + (x-\frac{1}{2})\cdot\log_x{n}

可以证明 f(x)(2,+\infty)是增函数,从而证明二分查找由于n分查找(n > 2)