• 算法理解——再解二分


      刷书ing……

      今天仔细研读了一下二分章节,并刷完了该章节的两个问题,对二分答案认识加深。

    观察二分答案模板:

    while(l<r)
    {
        int mid=(l+r)/2;
        if(check(mid))r=mid;
        l=mid+1;
    }
    return r;
    
    while(l<r)
    {
        int mid=(l+r-1)/2;
        if(check(mid))l=mid;
        r=mid-1;
    }
    return r;

      (最后的return建议用r,l容易造成视觉混淆是一方面,另一方面是实数域二分时精度问题上一般用r更准确(实践得之,血泪教训))

      对于二分的mid进行check,即判定是否满足条件。

      若满足,则l=mid或r=mid

      l=mid,实际上是将区间缩放到右边部分,最终求解的结果必然是满足check条件的最小者。

      r=mid,则也就是将区间缩放到左边部分,最终求解的结果必然是满足check条件的最大者。

      而l=mid与r=mid-1配套,r=mid与l=mid+1配套。

      这两套模板内部,二者先后顺序无妨,判定条件取非的区别。

      即if(check)l=mid……与if(!check)r=mid-1等价。

      而为何可以l=mid或者r=mid,也就是问为何l和r可以包含到缩放后的区间中去。实际上是因为mid可能是所要求的解。

      说明mid是满足check条件的,其有可能作为最终解。

  • 相关阅读:
    Django使用xadmin集成富文本编辑器Ueditor(方法二)
    Django-xadmin后台配置富文本编辑器(方法一)
    求解函数不等式[给定具体函数]
    区间断想
    函数方程和函数不等式
    对函数的再理解
    多题一解
    破解函数性质中的表达难点
    [数学模型]应用举例
    函数的迭代
  • 原文地址:https://www.cnblogs.com/ninedream/p/11963739.html
Copyright © 2020-2023  润新知