二分和三分的学习笔记

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

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

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

二分模板奉上:(写的时候在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;
}

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

转载于:https://www.cnblogs.com/xuyanqd/p/8798750.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值