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;
    }
原文地址:https://www.cnblogs.com/Accoral/p/3160749.html