二分tips

it2022-05-05  132

二分注意: 两套二分的方式 1.r=mid,l=mid+1,mid=(l+r)>>1 算最大值的 2.l=mid,r=mid-1,mid=(l+r+1)>>1 算最小值的 用位运算避免用 / 时负数出现的问题 why?右移运算是向下取整,整数除法是向0取整。

实数域上的二分 确定eps 保留k位小数时 通常取eps=10^-(k+2) l + eps < r

while (l + eps < r){ double mid =(l+r) /2; if (calc(mid)) r = mid;esle l = mid; }

或者采取循环固定次数的二分方法,得到的精度往往比设置eps更高

for (int i=0;i<100;i++){ double mid =(l+r)/2; if (calc(mid)) r = mid;else l = mid; }

三分求单峰函数极值 1.f(lmid)<f(rmid) l = lmid; 2.f(lmid)>f(rmid) r = rmid;


最新回复(0)