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

Posted alex-leaves

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/2/12 每日一学 三分搜索相关的知识,希望对你有一定的参考价值。

对于二分,设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 每日一学 三分搜索的主要内容,如果未能解决你的问题,请参考以下文章

每日一学

C语言每日编程:打印一个圆形!代码+思路一学就会!

每日一学之认识Spring中的AOP

2018/2/22 每日一学 AC自动机

2018/2/23 每日一学 后缀数组

2018/2/15 每日一学 手写栈