二分搜索——不光是查找值

 

摘要:

  本文主要讲述了二分搜索算法的基本思想和实现原理,着重讲解了二分搜索法在编程竞赛中的一些典型应用。

  • 基本思想
  • 实现原理
  • 典型应用
  • 例题解析

 

   基本思想

  二分搜索法的基本思想是通过不断的缩小解可能存在的范围,从而求得问题最优解的方法。比如一个直观的问题是在一个由小到大的数列a中找到一个数ai,使得ai满足ai>=k的同时,i最小。由于此数列是有序的,所以找到中间位置的数amid和k比较,如果k<=amid,证明k在左半区域,区间左边界变为mid,否则在右半区域,区间右边界变为mid。如此下来,直至区间长度小于1,结束循环,最小的i就是右边界的值。

  二分搜索的优势在于时间上的高效,每次去掉一半的搜索区间,可以在O(logn)的时间复杂度求得最终的解。但是这种高效是建立在事先将数排好序的基础上的。

   实现原理

  反复与区间的中点进行比较,不断的将解的范围缩小到原来的一半,直至满足一定的条件后结束算法。简单起见,直接看一道VJudge上的例题

 1 #include <cstdio> 2  3 const int maxn = 100000 + 10;  4 int a[maxn];  5 int n, q;  6  7 void query(int k) {  8     int lb = -1, ub = n;//初始化区间短点  9     while(ub - lb > 1) {//结束条件是当区间的长度小于1的时候 10         int mid = (ub + lb) / 2; 11         //通过判断缩小区间为原来的一半 12         if(a[mid] >= k) 13             ub = mid; 14         else15             lb = mid; 16     } 17     18     printf("%d\n", ub); 19 } 20 21 int main() 22 { 23     while(scanf("%d", &n) != EOF) { 24         for(int i = 0; i < n; i++) { 25             scanf(
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信