(五)二分法

二分法应用场景

  1. 存在一个有序的数列
  2. 题目能建模为在一个有序数列上查找一个合适数值

特点速度快,效率很高,二分法的复杂度O(logn)

n次二分后,区间缩小到(b-a)/2^n,给定a,b和精度要求e,可以计算出二分次数n

(b-a)/2^n<e。

如函数在区间[1,100000]内单调,要求根的精度10^-8,那么由100000/2^n<10^-8可知二分次数

n>log2(10^13),44次。

整数二分

左闭右开循不变,

左中位数找后继,

右中位数找前驱,

欲寻后继收右边,

移左莫忘再加一。

例:在单调递增序列种查找x或x的后继,在单调递增序列种查找x或x的前驱

 

跳石头

看完贪心后回来补

青蛙过河

看完贪心回来补 

实数二分

两种写法:while,for

 1e-7表示10^-7,也可以用for循环来写,直接100次二分,一定会分到一个极小区间,但这个100不能滥用,达到精度即可,否则会超时。

练习:

一元三次方程求解

 

 直接在区间上做二分无法找到3个解,题目给了个很好的条件,根与根之差绝对值大于等于1,

在每个[i,i+1]内做二分查找,共有200个长度为1的区间

 

 题目要求精确到小数点后2位,(这里做10次二分,即1/1024的精度,足以达到题目要求确保不会出错)。

y(mid)*y(right)>=0表示mid和right都在target的右侧,right=mid,y(mid)*y(right)>=0则相反

 

解立方根

 

分巧克力 

 暴力法

二分法

用二分法来做,相当于是整数二分里求x或x的前驱,

需要注意的是,初始right必须是理论最长的边 ,不一定要比所有巧克力的宽高要小

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值