• 三分法


    二分法适用于在单调函数上通过不断逼近的方式寻找答案,一般用于“判定性问题”

    而三分法则用于凹凸函数,寻找其凹点和凸点

    例如上图的函数是个凸函数,蓝色点便是凸点

    三分的基本步骤就是先将 [ L, R ] 分为 [ L, mid ] && [ mid, R ] 中点为 mid

    然后将 [ mid, R ] 再二分一次分为 [ mid, mmid ] && [ mmid, R ]

    如果函数值 f(mid) > f(mmid) 那么 mmid 一定在凸点的右边,所以执行 R = mmid

    否则反之 L = mid,直到找到凸点

    凹点的查找结论就和凸点相反了

    ///找凸点
    int Three_Devide(int L,int R)
    {
        while(L < R-1){
            int mid  = (L + R)/2;
            int mmid = (mid + R)/2;
            if( f(mid) > f(mmid) )  R = mmid;
            else  L = mid;
        }
        return f(L) > f(R) ? L : R;
    }
    
    double Three_Devide(double low,double up)
    {
        double m1,m2;
        while(up-low>=eps){
            m1=low+(up-low)/3;
            m2=up-(up-low)/3;
            if(f(m1)<=f(m2)) low=m1;
            else up=m2;
        }
        return (m1+m2)/2;
    }
    凸点
    ///找凹点
    int Three_Devide(int L,int R)
    {
        while(L < R-1){
            int mid  = (L + R)/2;
            int mmid = (mid + R)/2;
            if( f(mid) > f(mmid) )  L = mmid;
            else  R = mid;
        }
        return f(L) > f(R) ? R : L;
    }
    
    double Three_Devide(double low,double up)
    {
        double m1,m2;
        while(up-low>=eps)
        {
            m1=low+(up-low)/3;
            m2=up-(up-low)/3;
            if(f(m1)<=f(m2))
                up=m2;
            else
                low=m1;
        }
        return (m1+m2)/2;
    }
    凹点
  • 相关阅读:
    地图校正方法心得
    投影的心得点滴
    android 打包 apk keystore
    scp命令详解
    ubuntu11.10真机调试nopermissions
    android adb server is out of date
    ubuntu删除默认jdk
    android 运行 错误 总结
    android file .apk is not a valid zip file adb install
    ubuntu系统目录结构
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/8557737.html
Copyright © 2020-2023  润新知