码迷,mamicode.com
首页 > 其他好文 > 详细

2018/2/12 每日一学 三分搜索

时间:2018-02-12 11:26:48      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:double   最大   while   ble   自变量   一个   变量   最大值   arch   

对于二分,设left,right为问题的两个极值,用min=left+(right-left)>>1或mid=(left+right)>>1,可以知道mid值,判断,然后进行更换。

显然,二分适用于单调函数,而对于一个二次函数就无效了。

这时,我们可以用三分搜索来做。

我们定义midl=(left+mid)>>1,midr=(right+mid)>>1。判断midl和midr就行了。

看看代码吧:(转自http://blog.csdn.net/u011787119/article/details/44598871)

double solve(double parameter)
{
    // 计算函数值,即f(x)
}

double trisection_search(double left, double right)
{
    // 三分搜索,找到最优解(求函数最大值下的自变量值)
    double midl, midr;
    while (right-left > 1e-7)
    {
        midl = (left + right) / 2;
        midr = (midl + right) / 2;
        // 如果是求最小值的话这里判<=即可
        if(solve(midl) >= solve(midr)) right = midr;
        else left = midl;
    }
    return left;
}

 

2018/2/12 每日一学 三分搜索

标签:double   最大   while   ble   自变量   一个   变量   最大值   arch   

原文地址:https://www.cnblogs.com/Alex-leaves/p/8443607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!