UVA - 1476 Error Curves (三分搜索)

Description


Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which has many interesting properties.

In order to test the algorithm‘s efficiency, she collects many datasets. What‘s more, each data is divided into two parts: training data and test data. She gets the parameters of the model on training data and test the model on test data.

To her surprise, she finds each dataset‘s test error curve is just a parabolic curve. A parabolic curve corresponds to a quadratic function. In mathematics, a quadratic function is a polynomial function of the formf(x) = ax2 + bx + c.
The quadratic will degrade to linear function ifa = 0.

It‘s very easy to calculate the minimal error if there is only one test error curve. However, there are several datasets, which means Josephina will obtain many parabolic curves. Josephina wants to get the tuned parameters that make the best performance
on all datasets. So she should take all error curves into account, i.e., she has to deal with many quadric functions and make a new error definition to represent the total error. Now, she focuses on the following new function‘s minimal which related to multiple
quadric functions.

The new function F(x) is defined as follow:

F(x) = max(Si(x)), i = 1...n. The domain ofx is [0, 1000].
Si(x) is a quadric function.

Josephina wonders the minimum of F(x). Unfortunately, it‘s too hard for her to solve this problem. As a super programmer, can you help her?

Input

The input contains multiple test cases. The first line is the number of cases
T
(T < 100). Each case begins with a number n(n ≤ 10000). Followingn lines, each line contains three integers
a (0 ≤ a ≤ 100),b (|b| ≤ 5000), c (|c| ≤ 5000), which mean the corresponding coefficients of a quadratic function.

Output

For each test case, output the answer in a line. Round to 4 digits after the decimal point.

Sample Input

2
1
2 0 0
2
2 0 0
2 -4 2

Sample Output

0.0000
0.5000
题意:已知n个二次曲线Si(x) = ai*x^2+bi*x+c(ai >= 0),定义F(x) = max(Si(x)),求出F(x)在[0, 1000]上的最小值
思路:三分求解,三分法不仅适用于凸函数,还适用于所有单峰函数 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 10010;

int n, a[maxn], b[maxn], c[maxn];

double F(double x) {
	double ans = a[0]*x*x + b[0]*x + c[0];
	for (int i = 1; i < n; i++)
		ans = max(ans, a[i]*x*x + b[i]*x + c[i]);
	return ans;
}

int main() {
	int t;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		for (int i = 0; i < n; i++)
			scanf("%d%d%d", &a[i], &b[i], &c[i]);

		double l = 0.0, r = 1000.0;
		for (int i = 0; i < 100; i++) {
			double m1 = l + (r - l) / 3;
			double m2 = r - (r - l) / 3;
			if (F(m1) < F(m2))
				r = m2;
			else l = m1;
		}

		printf("%.4lf\n", F(l));
	}
	return 0;
}

时间: 2024-12-29 05:33:52

UVA - 1476 Error Curves (三分搜索)的相关文章

UVA - 1476 Error Curves 三分

                                       Error Curves Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which has many interesting properties.In order to test

UVA 1476 - Error Curves(三分法)

UVA 1476 1476 - Error Curves 题目链接 题意:给几条下凹二次函数曲线,然后问[0,1000]所有位置中,每个位置的值为曲线中最大值的值,问所有位置的最小值是多少 思路:三分法,由于都是下凹函数,所以所有曲线合并起来,仍然是一个下凹函数,满足单峰,用三分求极值 代码: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using na

UVa 1476 - Error Curves

题目:给你n条开口向上的二次曲线Si(a>0),定义F(x) = max(Si(x)),求F(x)的最小值. 分析:三分.F(x)是一个单峰函数,先单调递减后单调递增,利用三分求最小值. 首先,证明两个二次函数构造的F2(x)为单峰函数: (如果不成立,则存在两个连续的波谷,交点处一个函数递增另一个递减,矛盾,不会取递减函数) 然后,用数学归纳法证明,Fi(x)为单峰函数,则Fi+1 = max(Fi(x),Si+1(x))也是单峰函数: (如果存在两个(或更多)连续的波谷,交点处一个函数递增另

uva 1476 Error Curves 题解

题意:给n个二次函数f(x),定义F(x)=max(f(x)),即n个二次函数中的最大值.求F(x)在区间[1,1000]内的最小值. 根据题意可以知道,F(x)是单峰函数.于是我们可以三分解决.对于区间[L,R],找它的三等分点M1,M2,如果F(M1)<F(M2),则答案在[L,M2],否则在[M1,R]. 精度最好高一点..只差一两个数量级是不行的,因为有函数会放大误差.. 1 #include<cstdio> 2 #include<algorithm> 3 const

UVALive 5009 Error Curves 三分

//#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #include<cmath> #include<climits

UVA 5009 Error Curves

Problem Description Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which has many interesting properties. In order to test the algorithm's efficiency, she

三分 HDOJ 3714 Error Curves

题目传送门 1 /* 2 三分:凹(凸)函数求极值 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <cmath> 8 using namespace std; 9 10 const int MAXN = 1e4 + 10; 11 const int INF = 0x3f3f3f3f; 12 const double EPS = 0.0000000

LA 5009 (HDU 3714) Error Curves (三分)

A - Error Curves Time Limit:3000MS    Memory Limit:0KB    64bit IO Format:%lld & %llu SubmitStatusPracticeUVALive 5009 Appoint description: Description Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a

hdu 3714 Error Curves(三分)

Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1198    Accepted Submission(s): 460 Problem Description Josephina is a clever girl and addicted to Machine Learning recently. She pa