二分三分总结(需要注意点)

来源:互联网 发布:qq邮箱smtp端口号 编辑:程序博客网 时间:2024/06/06 05:02
  • 上下界的确定

    一般上下界的确定是根据二分对象的最大值和最小值来确定的;
    如果没有最大或最小值,就根据数据范围来设置最大值和最小值;

  • 根据二分对象的状态决定二分形式

    离散状态(浮点数)最好用的形式是

for(int i=0;i<time;i++){...}

或者

while(end-st>eps)

推荐前者的写法,后者容易卡精度。
而满足条件时,直接st=mid或end=mid即可

对于整数则一般是

int st,end,mid,ans;while(end>st){    mid=(st+end)/2;    if(judge(mid))    {        st=mid+1;        ans=mid;    }    else end=mid-1;}

其中特别要注意边界条件的判断;

  • C++自带二分库函数的应用

default (1) template

int arr[n];int a;int t=upper_bound(arr,arr+n,a)-arr;
  • 三分求峰值(?)
  • 条件:单峰,连续;
  • 需要画图确定
    写法
int st,end;for(int i=0;i<100;i++)        {           double midst,midend;           midst=(st*2+end)/3.0;           midend=(st+end*2)/3.0;           if(f(midst)-f(midend)<1e-10)              st=midst;           else              end=midend;        }
原创粉丝点击