zoukankan      html  css  js  c++  java
  • 二分法(算法描述)

    二分的本质是:  边界

    注:(l+r+1)/2的原因是避免出现死循环:l=r-1时。

    用到(l+r+1)是l=mid的时候

    //左右半区间的划分方式一共有两种:
    bool check(int s)
    {
        if(s>0)
            return true ;
        return false;
    }
    int bsearch_1(int l,int r)
    {
        while(l<r)
        {
            int mid= (l+r )>>1;
            if(check(mid))
                r=mid;
            else
                l=mid+1;
        }
        return l;
    //中点mid属于左半区间,则左半区间是[l, mid],右半区间是[mid+1, r]
    // 更新方式是r = mid;或者 l = mid + 1;,此时用第一个模板;
    }
    
    int bsearch_2(int l,int r)
    {
        while(l<r)
        {
            int mid=(l+r+1)>>1;
            if(check(mid))
                l=mid;
            else
                r=mid-1;
        }
    //中点mid属于右半区间,则左半区间是[l, mid-1],右半区间是[mid, r]
    // 更新方式是r = mid - 1;或者 l = mid;,此时用第二个模板;
        return l;
    }
    实数二分:
    ans是精确度
    while(r-l>ans)
    {
        if(check())
            l=mid;
        else
            r=mid;
    }
    cout<<r<<endl;
    
    
    
     
  • 相关阅读:
    求出123456 8910,数字,显示出来
    Django之Model操作
    AJAX全套
    Python之路【第十六篇】:Django【基础篇】
    Q2Day81
    Django第二重点(thml与django连接)
    react
    es6 和 python 语法比较
    微信
    py库: GUI(tkinter)
  • 原文地址:https://www.cnblogs.com/zwx7616/p/10879263.html
Copyright © 2011-2022 走看看