三分查找
来源:互联网 发布:吉林大学网络教学平台 编辑:程序博客网 时间:2024/05/11 03:26
一 问题
在一个平面上有N个点,每个点的坐标已经给出,现在要求在X轴上找一个点,使得这个点到所有点中最大的距离最小。
二 分析
不知道是否有基于策略选择的算法,也许是DP也许是Greedy。本文通过数值计算来解决此问题。
问题抽象:
设f(x) = max(node1_distance, node2_distance, ……nodeN_distance), a<=x<=b;
求x*使min(f(x)) = f(x*),a<=x*<=b;
如果存在x*使目标函数极小,那么对任意的a<=x1<x2<=b,当x2<=x*时,f(x1)>f(x2);当x1>=x*时,f(x1)<f(x2). 也就是f(x)是一个单峰函数。
问题就转化为求单峰函数的极值。
三 算法
网上主要有两种搜索算法,虽然都称之为三分搜索(或称查找)。核心思想都是通过“去坏留好”的原则不断压缩解空间来求极值。
流传算法1:
void Solve(void){ double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = MIN; Right = MAX; while (Left + EPS < Right) { mid = (Left + Right) / 2; midmid = (mid + Right) / 2; mid_area = Calc(mid); midmid_area = Calc(midmid); // 假设求解最小极值. if (mid_area >= midmid_area) Left = mid; else Right = midmid; }}流传算法2:
double ternary_search(double l,double r){ //三分查找求最小值while(l + EPS < r){double left = (2*l + r)/3;double right = (2*r + l)/3;double tmp1 = cal(left);double tmp2 = cal(right);if(tmp1 > tmp2) l = left;else r = right;}return l;}
0 0
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- 三分查找
- [二维线段树] BZOJ 1513 [POI2006]Tet-Tetris 3D
- Matlab 内存管理
- 一种自动反射消息类型的 Google Protobuf 网络传输方案
- 网络流二十四题之十 —— 餐巾计划问题(NAPK)
- Android 动画详解
- 三分查找
- bzoj 1283(线性规划)
- HDU 2586 How far away ? 离线LCA
- ListView常用技巧及优化
- uva 10902 Pick-up Sticks
- 虚拟机的网络连接
- 用protobuf定义消息及处理
- 美团面试总结
- Java中的反射机制复习