当前位置:网站首页>2022 Nioke Multi-School Training Session 2 J Question Link with Arithmetic Progression
2022 Nioke Multi-School Training Session 2 J Question Link with Arithmetic Progression
2022-08-05 00:21:00 【Rain Sure】
题目链接
Link with Arithmetic Progression
题目大意
给定一个数组,Let's find a straight line that fits it,Minimum mean squared error is required.I believe that everyone has learned related knowledge in mathematics class or machine learning class.
题解
T a r g e t = m i n ( ∑ i = 1 n [ a 1 + ( i − 1 ) × d − a i ] 2 ) Target = min(\sum^{n}_{i = 1} [a_1 + (i - 1) \times d - a_i]^2) Target=min(i=1∑n[a1+(i−1)×d−ai]2)
This is the value we are asking for,We need to keep it minimal,We can think about it first a 1 a_1 a1求出来,很明显,随着 a 1 a_1 a1from negative infinity to positive infinity,TargetThe value first falls and then rises,也就是说 a 1 a_1 a1是一个凹函数,Therefore, we can consider using three points a 1 a_1 a1,and then considering a 1 a_1 a1确定的情况下,如何确定 d d d.
We deform the formula:
= [ a 1 + ( i − 1 ) × d ] 2 − 2 × [ a 1 + ( i − 1 ) × d ] × a i + a i 2 = [a_1 + (i - 1)\times d]^2 - 2 \times [a_1 + (i - 1) \times d] \times a_i + {a_i}^2 =[a1+(i−1)×d]2−2×[a1+(i−1)×d]×ai+ai2
然后,将带有 d d d的合并同类项.
= ( i − 1 ) 2 × d 2 + 2 × ( i − 1 ) × ( a 1 − a i ) × d + a 1 2 + a i 2 = (i - 1) ^2 \times d^2 + 2 \times (i - 1) \times (a_1 - a_i) \times d + {a_1}^2 + {a_i}^2 =(i−1)2×d2+2×(i−1)×(a1−ai)×d+a12+ai2
According to the knowledge of quadratic functions,我们可以很轻松的确定 d = − b 2 ∗ ( i − 1 ) 2 d = \frac {-b} {2 * (i - 1) ^ 2} d=2∗(i−1)2−b
然后,就可以进行计算了.
话不多说,上代码:
代码
#include<iostream>
#include<cstring>
#include <cstdio>
#include <cctype>
using namespace std;
#define int long long
#define double long double
const int maxn = 100010;
int w[maxn];
int n;
namespace GTI
{
char gc(void)
{
const int S = 1 << 16;
static char buf[S], *s = buf, *t = buf;
if (s == t) t = buf + fread(s = buf, 1, S, stdin);
if (s == t) return EOF;
return *s++;
}
int gti(void)
{
int a = 0, b = 1, c = gc();
for (; !isdigit(c); c = gc()) b ^= (c == '-');
for (; isdigit(c); c = gc()) a = a * 10 + c - '0';
return b ? a : -a;
}
}
using GTI::gti;
double check(double a1)
{
double a = 0, b = 0;
for(int i = 1; i <= n; i ++){
a += (i - 1) * (i - 1);
b += 2 * (i - 1) * (a1 - w[i]);
}
double d = - b / (2 * a);
double res = 0;
for(int i = 1; i <= n; i ++){
res += (a1 + (i - 1) * d - w[i]) * (a1 + (i - 1) * d - w[i]);
}
return res;
}
signed main()
{
int t; t = gti();
while(t --)
{
n = gti();
for(int i = 1; i <= n; i ++) w[i] = gti();
double l = -1e10, r = 1e10;
while(r - l > 1e-5) {
double len = r - l;
double mid_l = l + len / 3, mid_r = r - len / 3;
if(check(mid_l) >= check(mid_r)) l = mid_l;
else r = mid_r;
}
printf("%.10Lf\n", check(r));
}
return 0;
}
边栏推荐
- 导入JankStats检测卡帧库遇到问题记录
- could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
- 软件测试面试题:软件都有多少种分类?
- leetcode: 269. The Martian Dictionary
- MongoDB permission verification is turned on and mongoose database configuration
- typeScript - Partially apply a function
- 翁恺C语言程序设计网课笔记合集
- 软件测试面试题:系统测试的策略有?
- 性能测试如何准备测试数据
- #yyds dry goods inventory #Switching equipment serious packet loss troubleshooting
猜你喜欢

Statistical words (DAY 101) Huazhong University of Science and Technology postgraduate examination questions

How to automatically push my new articles to my fans (very simple, can't learn to hit me)

【LeetCode】图解 904. 水果成篮

SQL association table update

Cloud native - Kubernetes 】 【 scheduling constraints

图解 Canvas 入门

Essential knowledge for entry-level 3D game modelers

redis可视化管理软件Redis Desktop Manager2022

matlab中rcosdesign函数升余弦滚降成型滤波器

QSunSync Qiniu cloud file synchronization tool, batch upload
随机推荐
标识符、关键字、常量 和变量(C语言)
2022杭电多校训练第三场 1009 Package Delivery
Couple Holding Hands [Greedy & Abstract]
软件测试面试题:软件都有多少种分类?
canvas 高斯模糊效果
E - Many Operations (按位考虑 + dp思想记录操作后的结果
【无标题】
3. Actual combat---crawl the result page corresponding to Baidu's specified entry (a simple page collector)
node uses redis
KT6368A Bluetooth certification problem_FCC and BQB_CE_KC certification or other instructions
D - I Hate Non-integer Number (选数的计数dp
2022牛客多校训练第二场 J题 Link with Arithmetic Progression
怎样进行在不改变主线程执行的时候,进行日志的记录
软件测试面试题:测试生命周期,测试过程分为几个阶段,以及各阶段的含义及使用的方法?
2022牛客多校训练第二场 L题 Link with Level Editor I
First, the basic concept of reptiles
lua 如何 实现一个unity协程的工具
【云原生--Kubernetes】Pod控制器
动态上传jar包热部署
仿网易云音乐小程序-uniapp