UVa 1476 LA 3485 Error Curves
单峰函数(unimodal function):先严格递增再严格递减(此时存在唯一的最大值),或者先严格递减再严格递增(此时存在唯一的最小值) 的函数。
三分法适用于单峰函数求唯一的最值。
本题是求解函数最小值问题,函数先严格递减后严格递增。使用三分法。
就本题而言,在[1,1000]内求最小值,设定L=0, R=1000
m1 = L + (R-L)/3;
m2 = R - (R-L)/3;
m1,m2是三分点。
如果F(m1) < F(m2), 说明答案在[L, m2]内;
否则,说明答案在[m1, R]内;
终止条件的设定:
一种做法是把终止条件写成解区间的长度小于阀值;
另外一种做法是尝试迭代上限,比如下面的100。如果迭代次数过小导致wa,则加大迭代次数;如果tle,则减小迭代次数;
本题eps <= 1E-9能ac,同迭代次数上限理论一样,eps过小,会导致tle
double L = 0, R = 1000, m1, m2; //while ( R-L > eps ) { for ( i = 0; i < 100; ++i ) { m1 = L + (R-L)/3; m2 = R - (R-L)/3; if ( F(m1) < F(m2) ) R = m2; else L = m1; }