前言
二分查找大家一定都会,不会的话可以看我的这篇博客:二分+dijkstra
具体来说,二分查找的前提是答案满足单调性,大家一定知道什么叫单调性吧!
正文
与大家熟悉的二分查找不同的是,三分查找需要满足查找的函数是一个有最值的函数(凸性函数),而且我们需要查找的就是给定区间上的最值。
我们怎么做三分查找呢?
现在读者可以自己在纸上画一画一个二次函数,如果你想求它的最值,用计算机应该如何求呢?
(当然是从左边往右边暴力了)
现在我们将区间取一个中点mid,将右半部分再取中点midmid,每一次我们考察f(mid)和f(midmid)的大小关系。聪明的读者应该已经发现了,如果我们要求最小值,我们需要不断把区间往小的地方缩,否则往大的地方缩。
值得注意的是,我们三分的三个区间是独立的,所以左边界只能往mid上缩,右边界只能往midmid上缩,这点大家应该很容易理解吧。
然后放一个三分的模板吧:
long long mid = (l+r)/2;
long long midmid = (mid+r)/2;
if(check(mid)>check(midmid)) l = mid;
else r = midmid;
这个就是一个求最小值的模板啦!