算法日记day3

阳了这么多天终于好了

今天继续写日记。

二分

如果一组数,存在某种条件能把这组数一分为二,使得这个数组下标中点以左的数(不)满足该条件以右的数不满足该条件,那么此时就可以用二分处理。dffc15c9a40948068b3fe1d7f73f9680.png

 如此题,若给定数组

1 2 2 3 3 4

3起始与角标3终止于4,并且mid=2.5=2

因此答案应在mid+1,r中(闭区间)

给定x为任意元素

若mid所对应数>=x则答案在l到mid中此时只需令r=mid反之只需调整l令l=mid+1最后所剩的单元肯定是x(前提x存在于数组中)。另外,这样找到的x是从左向右找的。

若从右向左找,只需让条件变为mid对应的数<=x这样,应令l=mid值得一提的是,这里的mid=r+l+1/2原因是由于整型变量整除是向下取值,所以,若l恰好等于r-1,则mi

 

 

无论是快排,归并,还是二分,本质上都是把数组分成一个单元。因此在循环时,条件都是l<r

 

因此角标e4fbbd0f26f247b3b6a8a0d9a1f21352.png

 

再来说说浮点二分,浮点二分不存在边界问题,因为他不会像整型变量那样作商时向下取整,因而简单很多6f8d0b2ba11a4b12b79f2ac6dcfba88a.png

 经验告诉我,若我要保留六位小数,就让循环的条件卡在1e-6,若保留八位,就1e-10

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值