二分是分治的一种,最常用的,也是最简单的。
一本通上给了一章分治,就是二分。
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)的时间复杂度。
好勒,二分就到这,下一集我写二分题目,简单,再见。
~~日更完成~~