三分初体验

来源:互联网 发布:java log4j 实例 编辑:程序博客网 时间:2024/05/24 06:34

[特点]
三分法就是用来求单峰函数的极值
二分查找所面向的搜索序列的要求是:
具有单调性(不一定严格单调);
没有单调性的序列不能使用二分查找。
与二分查找不同的是,三分法所面向的搜索序列的要求是:
序列为一个凸(凹)型函数。通俗来讲,就是该序列必须有一个最大值(或最小值),在最大值(最小值)的左侧序列,必须满足不严格单调递增(递减),右侧序列必须满足不严格单调递减(递增)。

[思想]
类似二分的定义Left和Right
mid = (Left + Right) / 2
midmid = (mid + Right) / 2;
如果mid靠近极值点,则Right = midmid;
否则(即midmid靠近极值点),则Left = mid;
这里写图片描述

[代码]

 double cal(double x) {     //这里放要求的函数;     }double mid, midmid;while ( low + eps < high ){    mid = (low + high) / 2;    midmid = (mid + high ) / 2;    double cmid = cal(mid);    double cmidmid = cal(midmid);    if ( cmid < cmidmid )             high = midmid;    else         low = mid;}
原创粉丝点击