二分(上)

二分是分治的一种,最常用的,也是最简单的。

一本通上给了一章分治,就是二分。

image图:分治算法,即二分

这是我基础算法的第二篇文章,基础算法似乎是我文章比较少的一个文集。

在日更时,顺便加加文章数。这应该也是我新专题的一部分。

(偷偷说一声,我准备把所有基础算法做一个专题,静等吧,还得半个月,甚至1个月。)

慢慢写,还有别的事干呢。


壹、简介

二分算法是把答案范围分成两个部分,取可能的一部分,再进行缩小范围。所以嘛,把答案的范围从1,变成总范围的1/2,再到1/4,一直到找到为止。这个时间总体为O(log n),挺快的。

二分又分二分查找和二分答案,二分查找是给一个排好序数列,找到你需要的数的位置;二分答案是给定范围,确定位置,缩小范围,直到找到符合的答案。


贰、二分查找

指,再有规律的数列内,知道排列顺序(即知道从小到大,或从大到小顺序)。在这个情况下,我们可以确定需查找数所在的范围,在缩小范围,最终找到这个数。

我们假设有这么一个数列:1、3、7、10、13、19、28、328、333、1928、1933(即一长串递增,上升的数列),要查找1928的位置,如果要用二分法查,那么会这么办——

一共11个数,取数11/2=6个,第六个数是19,那么范围分成了7-11;这5个数,再取中间的第10个数,答案是333,有点小;所以我们取范围11-12,取mid=23/2=11,即1928,正好是所找的数,所以1928是第11个。


叁、二分答案

确定答案范围(l[left],r[right]),取mid=(l+r)/2;如果mid是符合答案的范围,则更换区域,如l=mid,或r=mid+1……这些语句,视情况而定,总体是O(log n)的时间复杂度。


好勒,二分就到这,下一集我写二分题目,简单,再见。

~~日更完成~~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容