Fork me on GitHub

二分和三分的学习笔记

我确实很菜的啦,竟然还去百度了二分和三分有什么区别,也算知道了

二分用于单调函数寻找某个值,必须是单调的,而三分就用于单峰函数求极值

总归,二分就好像很暴力的找出某一个值,但是三分更像是在找一个单峰函数的极值(最优解);

二分模板奉上:(写的时候在main和全局都开了一个数组。。。调试了好久啊。。。)

ll er_fen(ll p,ll left,ll right){
    ll l = left,r = right,mid;
    while(l < r){
        printf("%lld %lld\n",l,r);
        mid = (l + r)/2;
        if(a[mid] > p)
            r = mid-1;
        else if(a[mid] < p)
            l = mid + 1;
        else
            return mid; 
    }
    return l;//这里返回的是下标 
}

下面,奉上三分模板:

double cal(){}//既然是求最优值,那么有的时候就是小数,所以用double

while(l + eps < r){//浮点数的比较 
    lmid = l + (r-l)/3;
    rmid = r - (r-l)/3;
    //或者  lmid = (2*l + r)/3,rmid = (l + r*2 + 2)/3;
    v1 = cal(lmid);
    v2 = cal(rmid);
    if(v1 < v2) l = lmid;
    else r = rmid;
}

好的做几道题。。。(虚的一批啊我)

posted @ 2018-04-11 21:04  梦想飞的菜鸟  阅读(228)  评论(0编辑  收藏  举报