论为何没有k分

拿二分查找举例子

查找一个单调序列的第一个>x的位置

这里不用k分的原因是

k分的严格复杂度实际上是O(\(k*log_{k}n\))

因为你在k分的时候

你需要花费O(k)的时间判断在这k个分支中应该选择哪一个

(从\([l_1,r_1],[l_2,r_2],......[l_k,r_k]\)中选一个)

又因为\(k*log_{k}n=k\frac{ln(n)}{ln(k)}=ln(n)*\frac{k}{ln(k)}\)

这个关于k的函数在(1,e)单调递减,(e,+inf)单调递增

因此k的最优取值是2或3

2/ln2=2.88539

3/ln3=2.73071
因此理论上来说三分是比二分优秀一点点的

但是差距基本可以忽略,而且二分代码远比三分简单

所以通常使用二分

posted @ 2020-09-26 03:50  Creed-qwq  阅读(757)  评论(0编辑  收藏  举报