• 从二分看算法严谨性


    考虑以下二分查找的代码:
    #include <stdio.h>
    intbsearch(intarray[], intn, intv)
    {
        intleft, right, middle;
        left = 0, right = n - 1;
        while(left <= right) {
            middle = left + (right - left) / 2;
            if(array[middle] > v ) {
                right = middle;
            } elseif (array[middle] < v) {
                left = middle;
            } else{
                returnmiddle;
            }
      } 
        return-1;
    }
    对于输入array为:{2, 6, 8, 10, 13, 25, 36, 45, 53, 76, 88, 100, 127}, n = 13, v = 127时,
    运行bsearch函数,while循环调用的次数为____。
    1.middle = (0+12)/2=6
    2.middle = (6+12)/2=9
    3.middle = (9+12)/2=10
    4.middle =(10+12)/2=11
    5.middle = (11+12)/11....循环无数次!!!
    
    #include <stdio.h>
    intbsearch(intarray[], intn, intv)
    {
        intleft, right, middle;
        left = 0, right = n - 1;
        while(left <= right) {
            middle = left + (right - left) / 2;
            if(array[middle] > v ) {
                right = middle-1;
            } elseif (array[middle] < v) {
                left = middle+1;
            } else{
                returnmiddle;
            }
      } 
        return-1;
    }
    1. middle = 6;
    2.middle=(7+12)/2=9;
    3.middle=(10+12)/2=11
    4.middle=(12+12)/2=12....bingo
    原因:第一个代码在最后两个数的时候收敛了到了前一个数,不能向前推进使得
    达到循环结束条件,如果保证leftright以最小区间去逼近,才能够绝对收敛或
    使得循环条件终止
  • 相关阅读:
    Django_redis_session
    python_redis操作
    Django_url反向解析
    Django_分页
    Django_cookie与sesstion
    Django 自定义错误页面 403 404...
    Django_设置静态文件、上传文件
    Django设置子路由
    nginx、uwsgi
    CentOS安装MySQL
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482990.html
Copyright © 2020-2023  润新知