均方差

AcWing 321 棋盘分割

谁都会走 提交于 2020-02-19 13:33:00
题目描述: 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。 现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的均方差最小。 均方差 ,其中平均值 ,xixi为第 i 块矩形棋盘的总分。 请编程对给出的棋盘及n,求出均方差的最小值。 输入格式 第1行为一个整数n。 第2行至第9行每行为8个小于100的非负整数,表示棋盘上相应格子的分值。每行相邻两数之间用一个空格分隔。 输出格式 输出最小均方差值(四舍五入精确到小数点后三位)。 数据范围 1<n<15 输入样例: 3 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 3 输出样例: 1.633 分析: 本题是二维区间DP问题。应该说本题的题意表述不太清楚,只能沿着棋盘格子的边进行切割这句话太抽象,题目想要表达的意思是对8*8的棋盘,横着切一刀或者竖着切一刀,切完后选择留其中的一块继续切割

基础实验2-2.2 求集合数据的均方差 (15分)

一曲冷凌霜 提交于 2020-02-05 13:43:46
设计函数求 N 个给定整数的均方差。若将 N 个数 A[ ] 的平均值记为 Avg,则均方差计算公式为: √ ​ [ ( A ​ 1 ​​ − A v g ) ​ 2 ​​ + ( A ​ 2 ​​ − A v g ) ​ 2 ​​ + ⋯ + ( A ​ N ​​ − A v g ) ​ 2 ​​ ] / N ​ ​​。 输入格式: 输入首先在第一行给出一个正整数 N( ≤),随后一行给出 N 个正整数。所有数字都不超过 1000,同行数字以空格分隔。 输出格式: 输出这N个数的均方差,要求固定精度输出小数点后5位。 输入样例 1: 10 6 3 7 1 4 8 2 9 11 5 输出样例 1: 3.03974 输入样例 2: 1 2 输出样例 2: 0.00000AC代码如下 #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main() { int n; scanf("%d",&n); double sum=0; int a[n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } double avg = sum / n; double sum3=0; for(int i=0;i<n;i++) sum3+=pow

7-6 求集合数据的均方差 (15分)

北慕城南 提交于 2019-12-26 10:04:41
设计函数求 N 个给定整数的均方差。若将 N 个数 A[ ] 的平均值记为 Avg,则均方差计算公式为: √​[(A​1​​ −Avg)2+(A​2​​ −Avg)​2​​ +⋯+(A​N​​ −Avg)​2​​ ]/N​​​ 。 输入格式: 输入首先在第一行给出一个正整数 N(≤10 ​4 ​​ ),随后一行给出 N 个正整数。所有数字都不超过 1000,同行数字以空格分隔。 输出格式: 输出这N个数的均方差,要求固定精度输出小数点后5位。 输入样例 1: 10 6 3 7 1 4 8 2 9 11 5 输出样例 1: 3.03974 输入样例 2: 1 2 输出样例 2: 0.00000 # include <stdio.h> # include <stdlib.h> # include <math.h> //因为要调用pow函数,所以引用math函数库; int main ( ) { int n , i , a [ 10000 ] ; double avage , sum = 0 ; scanf ( "%d" , & n ) ; for ( i = 0 ; i < n ; i ++ ) { scanf ( "%d" , & a [ i ] ) ; sum + = a [ i ] ; } avage = sum / n ; sum = 0 ; for ( i = 0 ; i <

[HAOI2006]均分数据

六眼飞鱼酱① 提交于 2019-12-01 08:00:50
洛咕 题意:已知 \(n(n<=20)\) 个正整数: \(a_1,a_2,……,a_n\) .今要将它们分成 \(m(2<=m<=6)\) 组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 分析:首先根据公式各组数据和的平均值是 \(ave\) 已知的,即 \((\sum_{i=1}^na[i])/m\) ,所以要最小化均方差,我们只需要最小化 \(\sum_{i=1}^m(sum_i-ave)^2\) 就好了,其中 \(sum_i\) 表示分成的第i段的和,这个显然是可以 \(dp\) 求的.设 \(f[i][j]\) 表示将序列前i个数分成j段, \(\sum_{i=1}^j(sum_i-ave)^2\) 的最小值.那么 \(f[i][j]=min(f[i][j],f[k][j-1]+(s[i]-s[k]-avs)^2)\) ,其中 \(s[]\) 表示序列的前缀和. 那么现在的问题就是如何找到"序列"呢?因为根据题意这n个正整数是可以任意排列的.所以就要用到模拟退火来随机出排列. 这道题的各种参数还比较好调,一下就过去了. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include

3D机器学习(5):梯度下降法学习

跟風遠走 提交于 2019-11-29 16:28:15
1.三种激活函数 torch.sigmoi=F.sigmoid torch.tannh=F.tanh torch.relu=Frelu 2.典型的loss函数:mean squire error MSE=mean squire error=均方差:∑(y-y预测 )^2,这里norm会开根号,所以需要平方回去。F.mse_loss(y,y预测)函数可建立此类loss函数。 当需要求导时,需要提前对变量申明,因为默认是无需求导的,否则会报错:reuqire_gred=true 上图表示对loss函数mse求w的偏导,输出结果是一个数:2 3.梯度下降法公式推倒 Softmax激活函数,归一化,适用于多分类问题。并不是按比例缩放,而是会把原来大的放的更大, 对softmax函数求导 1层单输出感知机的梯度推倒 其中E=error=loss函数,使用的均方差方法计算。 σ表示sigma激活函数,求和输出的x需要乘上σ才表示预测值,这里把x*σ=O。 t表示target,是实际值,因此E=(o-t)^2,这里的1/2可以忽略,仅仅是为了消去求导后增加的2倍。 对E求单个权值w的梯度,结果=(o-t)O(1-o)x,可以看出,求出的梯度形式非常简单。 推导出梯度后,使用更新公式,就可以更新w权值了。 N输出单层感知机的梯度推倒 E=error=loss函数,继续使用的均方差方法计算。

java计算方差、标准差(均方差)

半腔热情 提交于 2019-11-28 17:45:11
java计算标准差思路 //方差s 2 =[(x1-x) 2 +...(xn-x) 2 ]/n 或者 public static double Variance(double[] x) { int m=x.length; double sum=0; for(int i=0;i<m;i++){//求和 sum+=x[i]; } double dAve=sum/m;//求平均值 double dVar=0; for(int i=0;i<m;i++){//求方差 dVar+=(x[i]-dAve)*(x[i]-dAve); } return dVar/m; } //标准差σ=sqrt(s^2) public static double StandardDiviation(double[] x) { int m=x.length; double sum=0; for(int i=0;i<m;i++){//求和 sum+=x[i]; } double dAve=sum/m;//求平均值 double dVar=0; for(int i=0;i<m;i++){//求方差 dVar+=(x[i]-dAve)*(x[i]-dAve); } //reture Math.sqrt(dVar/(m-1)); return Math.sqrt(dVar/m); }    来源: https://www