二分+三分模板
2016-08-01 20:44
246 查看
二分
适用于单调函数(单调增或单调减)。
基本思想
{ 1, 2, 4, 5, 7, 9, 13,25, 37 }
给定9个数,由小到大排列,从这9个数中找出某一个确切的数(比如4)
伪代码
int binary_sreach(int a[], int left, int right, int x) { left = 0, right = n - 1; /*左闭右开*/ while(left +1< right) { int mid = (left + right) / 2; if(a[mid] <= x) left = mid ; else right = mid; } if (a[left]==x) return left; return -1; }
例题
给你三个数组A, B, C,并给出一个X,是否能从这三个数组中找出Ai, Bj, Ck三个数,使得满足Ai + Bj + Ck = X。1<= A, B, C数组的大小 <=500遍历时间复杂度是O(n^3),但先暴力求解出所有 Ai + Bj,然后二分查找 X – Ck 时间复杂度就是O(n^2logn)。
三分
适用于单峰凸性函数,如二次函数
伪代码
while (right – left > exp) { mid1 = left + (right - left) / 3; mid2 = right - (right - left) / 3; ans1 = cal(mid1); ans2 = cal(mid2); if (ans1 < ans2) left = mid1; else right = mid2; }
重点:
比较mid1和mid2谁更靠近极值,如果mid1更靠近极值,右区间改为mid2,否则左区间改为mid1
推荐一篇博客
相关文章推荐
- 洛谷 P3382 【模板】三分法(三分 二分)
- 二分查找、三分查找求极点、二分求等比数列【模板】
- 二分+三分模板
- 二分、三分查找算法模板
- 二分和三分模板
- 二分查找模板
- 搜索—二分三分搜索—1004
- HDU 2298 Toxophily(公式/三分+二分)
- 三分模板
- ACM-二分-三分查找笔记
- ACM之路(1)——对二分及三分的研究
- 二分查找 三分查找
- 二分查找 模板(升序数组)
- 分治与二分三分用法介绍
- 二分三分总结(需要注意点)
- 2014年暑假培训 - 二分三分
- 【POJ2289】【多重匹配】【二分】【模板】
- CF 8D Two Friends 【二分+三分】
- HDU 1533 Going Home 最小费用最大流(入门)(模板)或者 二分匹配
- 二分多重匹配模板