三分搜索

介绍

非常快地找到凸函数的极值点。

实现&原理

与二分法类似,三分算法先把区间分为长度相等的三段,那么l与r之间就有两个点,分别是:ll=l+(r-l)/3=(2l+r)/3和
rr=r-(r-l)/3=(l+2r)/3。
也可以二分再二分,即mid = (l+r) / 2,mmid = (mid + l) / 2。

如果ll比rr更靠近最值,我们就舍弃右区间,否则我们舍弃左区间。
时间复杂度O(logn)

算法的正确性:

  1. ll与rr在最值的同一侧。由于凸性函数在最大值(最小值)任意一侧都具有单调性,因此,ll与rr中,更大
    (小)的那个数自然更为靠近最值。此时,我们远离最值的那个区间不可能包含最值,因此可以舍弃。
  2. ll与rr在最值的两侧。由于最值在中间的一个区间,因此我们舍弃任意一个区间后,并不会影响到最值。

总的来说,只需考虑两个点的在极值点的同一侧的情况就可以了。

典型题目:HDU4355,HDU2438,POJ3301
参考

posted @ 2020-07-07 13:57  limil  阅读(181)  评论(0编辑  收藏  举报