分治 —— 三分法

【概述】

三分法是二分法的扩展,其用于求凸性或凹形函数的极值,当通过函数本身表达式并不容易求解时,就可以用三分查找来不断逼近求解。

其原理为:函数中存在一个点 x 是最值,对于 x 的左边,满足单调上升(下降),右边满足单调下降(上升),然后进行两次二分,使得不断的逼近这个 x 点,最后求得答案。

【基本思想】

类似二分的定义 Left 和 Right,对于 [L,R],先找出 lmid,紧接着再找出 rmid,然后比较两者谁更优,然后舍去不优的。

  • mid=Left+(Left-Right)/3
  • mid_mid=Right-(Right-Left)/3

若 lmid 靠近极值点,则 Right=rmid,若 rmid 靠近极值点,则 Left=lmid;

要注意的是,若在三分过程中,遇到 f(lmid)=f(rmid) 时,若函数严格单调,那么令 left=lmid 或令 right=rmid 均可,若函数不严格单调,即在函数中存在一段函数值相等的区间,将无法判断定义域左右边界该如何缩小,三分法也就不再适用。

【查找连续函数的写法】

/*查找函数最大值*/
int BinarySearch(double low,double high){//low为区间下界,high为区间上界  
    double left,right,mid;
    left=low;//设置当前查找区间上界的初值  
    right=high;//设置当前查找区间下界的初值  
    while(right-left>1.0e-6)  {  
		mid=(max+min)/2;//设置中值
		mid_mid=(mid+max)/2;//设置中值
        
        if(Caculate(mid)<Caculate(mid_mid))//若函数结果左值小于右值  
            left=mid;//调整集合下界  
        else//否则  
            right=mid_mid;//调整集合上界  
    }  
    return Caculate(mid);  
}

【例题】

  1. Strange fuction(HDU-2899):点击这里
  2. Error Curves(HDU-3714):点击这里
  3. 曲线(信息学奥赛一本通-T1435):点击这里
  4. Line Belt(HDU-3400)(三分两次找点)点击这里
  5. Toxophily(HDU-2298)(三分+二分)点击这里
  6. Turn the corner(HDU-2438)(三分+数学推导)点击这里
  7. Light Bulb(ZOJ-3203)(三分+数学推导)点击这里
    同题:灯泡(信息学奥赛一本通-T1438):点击这里
  8. 传送带(洛谷-P2571)(三分套三分)点击这里
    同题:传送带(信息学奥赛一本通-T1439):点击这里
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值