三分算法

综合于大牛们的总结:

三分算法解决凸形或者凹形函数的极值;

二分解决具有单调性的函数的极值;

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道题目感觉三分题目对我来说挺难得,但是木有事,继续加油...每一道题都要把解题报告写好。

posted on 2013-03-02 09:58  crying_Dream  阅读(3485)  评论(1编辑  收藏  举报