cogs 1500. 误差曲线
Posted 一蓑烟雨任生平
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cogs 1500. 误差曲线相关的知识,希望对你有一定的参考价值。
1500. 误差曲线
★★ 输入文件:errorcurves.in
输出文件:errorcurves.out
评测插件
时间限制:1 s 内存限制:256 MB
【题目描述】
Josephina是一名聪明的妹子,她最近痴迷于机器学习。她花费了大量精力学习线性判别分析,因为其中有不少有趣的性质。
为了测试算法的性能,她收集了许多数据。每组数据都分成两个部分:训练数据和测试数据。她在训练数据中解算模型的参数,并且在测试数据中测试这个模型。
令她惊讶的是,她发现每组数据的误差曲线都是一条抛物线。一条抛物线对应一个二次函数。在数学中,二次函数指形如f(x)=ax2+bx+c的多项式函数。如果a=0,二次函数就退化为线性函数。
如果只有一条误差曲线,那么计算最小的误差将非常简单。但这里有多组数据,这意味着Josephina将得到多组误差曲线。Josephina希望调整参数以更好地拟合所有数据。因此她必须统计所有的误差曲线。也就是说,她必须处理许多二次函数,并得出一条新的错误曲线来代表所有的错误。现在,她正关注一个与许多二次函数有关的函数的最小值。
这个新函数定义如下:
F(x)=max(Si(x)),i=1,2,...,n。x的范围是[0,1000]。Si(x)是一个二次函数。
Josephina希望知道F(x)的最小值。不幸的是,用代数方法求解过于复杂。作为一名机智的程序员,你能帮她解决这个问题吗?
【输入格式】
输入包含多组数据。
输入文件的第1行是1个正整数T(T<100),表示数据组数。
每组数据的第1行是一个正整数n(n<=10000)。
接下来的n行,每行有3个正整数a(0<=a<=100),b(|b|<=5000),c(|c|<=5000),描述一个二次方程的相应系数。
【输出格式】
对每组数据,输出一行一个实数,即答案。
【样例输入】
2
1
2 0 0
2
2 0 0
2 -4 2
【样例输出】
0.0000
0.5000
【提示】
答案允许有不超过0.01的误差。
【来源】
刘汝佳,《算法竞赛入门经典训练指南》表2-14
思路:
本题的难点在于读题。
读透了题目后,这个题就是三分的模板题。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 10100 #define eps 1e-7 using namespace std; int T,n; double ans; double a[MAXN],b[MAXN],c[MAXN],minn[MAXN]; double l,r,mid1,mid2; double f(double x){ ans=-0x7f7f7f7f; for(int i=1;i<=n;i++) ans=max(ans,x*x*a[i]+x*b[i]+c[i]); return ans; } int main(){ freopen("errorcurves.in","r",stdin); freopen("errorcurves.out","w",stdout); scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&a[i],&b[i],&c[i]); l=0;r=1000; while(r-l>eps){ mid1=(l+r)/2; mid2=(mid1+r)/2; if(f(mid1)>f(mid2)) l=mid1; else r=mid2; } printf("%.4lf\n",f(l)); } }
以上是关于cogs 1500. 误差曲线的主要内容,如果未能解决你的问题,请参考以下文章
使用 BP 神经网络进行深度学习时在训练时获得平坦的误差曲线
如何用python画深度学习训练图?比如误差,准确率变化曲线之类的
寻找模型最优参数多模型交叉验证可视化指标计算多模型对比可视化(系数图误差图混淆矩阵校正曲线ROC曲线AUCAccuracy特异度灵敏度PPVNPV)