三分算法及利用三分算法求解二次函数问题

再说三分搜索之前当然要提提二分算法为什么有局限性了。

二分搜索是最长用的,但是它只适用于 函数在自变量区间是单调的,也就是函数图像无极值。对于类似二次型的函数问题(下面会举个例子)

就需要用三分搜索了。


先讲解一下算法吧( 参考资料

举个具体的例子,3分 查找一个区间内[a,b]函数f(x)的最小值,假设函数是先减后增的
大致的流程是,开始l=a,h=b;
令 m1=l+(h-l)/3 ,m2=l+2*(h-l)/3 ,即3等分(l,h)  (这个可以随意不必要等分)
如果f(m1)<f(m2)的话,证明m2一定在最小值的右边(否则在(m1,m2)区间的单调递减的),这样就可以令h=m2,新的(l,h)同样包含最小值点
同理f(m1)>=f(m2) 证明m1一定在最小值的左边 (否则在(m1,m2)区间的单调递增的),,这样就可以令l=m1, 新的(l,h)同样包含最小值点
得到新的(l,h)之后重复上述步骤,直到l与h相差很小

代码的表示如下:

  
        while(ri-le>eps)  
        {  
            double mid=(le+ri)/2;  
            double miid=(mid+ri)/2;  
            double an1=find(mid);  
            double an2=find(miid);  
            if(an1<an2)  
                ri=miid;  
            else  
                le=mid;  
        }  

其中的find可以看做一个函数(具有最小值的)


总结一下:求最小值,每次选大的作为新边界,求最大值,每次选小的作为新的边界。

(如果自己画一下图很容易明白为什么)


下面说一个实际的例子。

空间内有很多点(坐标已知),求空间内一点使其到空间中其余点距离之和最短。

如果求曼哈顿距离,那门很简单,分别暴力加二分求出x,y的最小值就可以了,但是如果求几何距离就比较麻烦了。其实我也不知道如果不给出那一点的某个坐标改怎么求,

但是如果它给出了其中一个坐标那门这个问题就明显是二次函数的问题了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值