【转】三分查找
转自: http://blog.csdn.net/acdreamers/article/details/9989197
首先来说说三分的概念:
二分是把区间分为长度相等的两段,三分则是把区间分为长度相等的三段,进行查找,这样的查找称为三分查找,三分查找通
常用来迅速确定最值。
众所周知,二分算法的要求是搜索的序列是单调序列,而三分法所面向的搜索序列的要求是:序列为一个凸性函数。
与二分法类似,三分算法先把区间分为长度相等的三段,那么l与r之间就有两个点,
分别是:
ll=l+(r-l)/3=(2l+r)/3和
rr=r-(r-l)/3=(l+2r)/3
也可以是:
ll = (l + r) / 2;
rr = (ll + r) / 2;
如果ll比rr更靠近最值,我们就舍弃右区间,否则我们舍弃左区间。
算法的正确性:
1、ll与rr在最值的同一侧。由于凸性函数在最大值(最小值)任意一侧都具有单调性,因此,ll与rr中,更大
(小)的那个数自然更为靠近最值。此时,我们远离最值的那个区间不可能包含最值,因此可以舍弃。
2、ll与rr在最值的两侧。由于最值在中间的一个区间,因此我们舍弃一个区间后,并不会影响到最值。