本文共 500 字,大约阅读时间需要 1 分钟。
我们了解下从二分衍生出来的三分法
摘自hihocoder(略改): 当函数是凸形函数时,二分法就无法适用,这时就需要用到三分法。 从三分法的名字中我们可以猜到,三分法是对于需要逼近的区间做三等分:如图这种情况先减后增,适用于求答案的极小值,若lm比rm低(即lm对应的函数值 < rm函数值)则极小点(图中最低点)肯定在[ left, rm ] ,反之在[ lm, right ],剩下就跟二分一样根据大小关系调整区间就行了。
double solve(double l,double r){ while(fabs(r-l) > esp) { double lmid = l + (r-l)/3,rmid = r - (r-l)/3; if(val(lmid) >= val(rmid)) //求极大值 /*if(val(lmid) <= val(rmid)) //求极小值 */ r = rmid; else l = lmid; } return val(l);}