綜合於大牛們的總結:
三分算法解決凸形或者凹形函數的極值;
二分解決具有單調性的函數的極值;
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道題目感覺三分題目對我來說挺難得,但是木有事,繼續加油...每一道題都要把解題報告寫好。