二分法初步总结

T(n)=T(n/2)+O(1)=O(logn)(把式子展开就能得到结果,最终变为T(n)=T(1)+O(logn)) 通过O(1)的时间,把规模为n的问题变为n/2
补充:T(n)=T(n/2)+O(n)=O(n) O(1+2+4+…n)=O(2n-1)
O(logn)几乎都是二分法 O(nlogn)一般可能要排序 O(2^n)与组合有关的搜索 O(n!)与排列有关的搜索

破剑式
比O(n)更优的时间复杂度几乎只能是O(logn)的二分法 可以根据时间复杂度倒推算法

第一境界:二分法模板四要点
1、while(start+1<end) 这样最后会剩两个数就能结束,而不是非要start和end指向同一个数才结束,能避免死循环(start和end相邻时,mid会偏左,这样start不会移动位置,而二分法每次是要减一半的)
2、mid=start+(end-start)/2 怕int越界,但也就是个装逼写法
3、A[mid] ==, <, >最好三种情况分开讨论,避免出错
4、A[start] A[end] ? target 出了循环记得要讨论,因为二分法只是把规模缩小到肉眼可辨别的地步,而不是只剩下一个数,分为了start和end两个数,因此要再判断一下那个是

第二境界:二分位置之OOXX
找数组中第一个或最后一个满足某个条件的位置 需要你能看清问题的本质是OOXX并且看到你的条件是什么即OO和XX的分界线在哪

第三境界:二分位置之half half
无法找到一个条件,形成 OOXX 的模型,但可以根据判断,保留下有解的那一半或者去掉无解的一半——二分的本质就是去掉一半
因为二分有点类似递归,所以每次划分之后的结构要保持和之前一致

由九章算法课程总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值