综合于大牛们的总结:
三分算法解决凸形或者凹形函数的极值;
二分解决具有单调性的函数的极值;
mid = (Left + Right) / 2
midmid = (mid + Right) / 2;
如果mid靠近极值点,则Right = midmid;
否则(即midmid靠近极值点),则Left = mid;
程序模版如下:
double cal(Type a){ /* 根据题目的意思计算 */}void solve()
{ double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = MIN; Right = MAX; while (Left + EPS <= Right) { mid = (Left + Right) / 2; midmid = (mid + Right) / 2; if (cal(mid)>=cal(midmid))Right = midmid;
else Left = mid; }}我搜索的三分算法的题目:HDU :3400 2298 4454 2438 3756
POJ: 3301 3737
ZOJ: 3203
利用有限的时间想把它们都ac掉,切了2道题目感觉三分题目对我来说挺难得,但是木有事,继续加油...每一道题都要把解题报告写好。