一. 概念
二、算法过程
- mid = (left + right) / 2;
- midmid=(mid+right)/2;
(3)、我们mid比midmid更靠近最值,我们就舍弃右区间,否则我们舍弃左区间?。
- if (cal(mid) > cal(midmid))
- right = midmid; //mid大,则一定要选择包含mid区间的
- else
- left = mid; //midmid大,则选择的区间要包含midmid
三、具体实现
- const double EPS = 1e-10;
- double calc(double x)
- {
- // f(x) = -(x-3)^2 + 2;
- return -(x-3.0)*(x-3.0) + 2;
- }
- double ternarySearch(double low, double high)
- {
- double mid, midmid;
- while (low + EPS < high)
- {
- mid = (low + high) / 2;
- midmid = (mid + high) / 2;
- double mid_value = calc(mid);
- double midmid_value = calc(midmid);
- if (mid_value > midmid_value)
- high = midmid;
- else
- low = mid;
- }
- return low;
- }
1279



被折叠的 条评论
为什么被折叠?



