题目:

题目要我们,在m个数中,选取n个数,求出这n个数的方差,求方差的最小值。

1.我们知道,方差是描述稳定程度的,所以肯定是着n个数越密集,方差越小。

  所以我们给这m个数排个序,从连续的n个数中找。

2.方差公式D(x^2) = E(x^2)- E(x)^2;

  E(x) = x*f(x) dx (从负无穷到正无穷积分)

  E (x^2) = x^2*f(x) dx (从负无穷到正无穷积分)

3.对于这道题,相当于每个数的权值相同,也就是f(x)相同,都等于1/n。(可以理解f(x)表示概率)

4.我们可以用前缀和来减少时间复杂度。

  sum1[i]表示前 i 项的和,方便算出E(x)^2

  sum2[i]表示前 i 项平方和 ,方便算出E(x^2)

 当我们要算第 i 项到第 j 项共 j-i+1 项的方差的时候我们只用这样写:
 

ll k1 = sum1[j]-sum1[i-1];   // 第i项到第j项的和
double s1 = 1.0*k1/n*k1/n;  // k1/n表示平均数E(x), s1表示E(x)^2
ll k2 = sum2[j]-sum2[i-1];   // 第i项到第j项的平方和
double s2 = 1.0*k2/n;         // s2 和 k2/n 表示E(x^2)

  第 i 项到第 j 项的方差就等于 s2-s1 了。

5.我们可以得到大致代码,当然现在就可以直接开始敲了,如果看懂了的话。

    double mn = 2e18;for(int i = n;i <= m; i++){ll k1 = sum1[i]-sum1[i-n];double s1 = 1.0*k1/n*k1/n;ll k2 = sum2[i]-sum2[i-n];double s2 = 1.0*k2/n;mn = min(s2-s1,mn);}

6.我们要注意一下精度问题,我的做法是给mn += 1e-8。

代码:

#include <bits\stdc++.h>
using namespace std;
typedef long long ll;int a[10010];
ll sum1[10010];  //sum1[i]表示前i项和
ll sum2[10010];  //sum2[i]表示前i项平方和
int main() {ll m,n;cin >> m >> n;for(int i = 1;i <= m; i++){cin >> a[i];}sort(a+1,a+1+m);  // 排个序,让数字变得紧凑 for(int i = 1;i <= m; i++){sum1[i] = sum1[i-1] + a[i];sum2[i] = sum2[i-1] + a[i]*a[i];}double mn = 2e18;      //存最小的方差 for(int i = n;i <= m; i++){ll k1 = sum1[i]-sum1[i-n];  // 第 i-n+1 项到第 i项共 n 项的和。 double s1 = 1.0*k1/n*k1/n;  // k1/n表示平均数E(x),s1表示 E(x)^2 ll k2 = sum2[i]-sum2[i-n];  // 第 i-n+1 项到第 i项共 n 项的和。double s2 = 1.0*k2/n;       // k2/n表示E(x^2) mn = min(s2-s1,mn);    }// 如果不加这个可能会出问题,因为cout  double用的是科学记数法,需要消除误差。mn += 1e-8;     cout << (ll)(mn*n) << endl;return 0;
}
//  writen by zhangjiuding 

51nod 1098 最小方差 排序+前缀和+期望方差公式相关推荐

  1. 几何分布的期望和方差公式推导_数学期望、方差、协方差

    概论: 一维随机变量期望与方差 二维随机变量期望与方差 协方差 1.一维随机变量期望与方差: 公式: 离散型: E(X)=∑i=1->nXiPi Y=g(x) E(Y)=∑i=1->ng( ...

  2. 期望方差和贝叶斯概率

    期望(expectation)就是平均权重,用E(f)表示,连续型的期望如下: 给出有限的 N 个点期望可以如下表示: 当 N趋向于无穷大的时候上式会非常准确,上式在抽样方法里面会广泛使用. 多个变量 ...

  3. 概率统计极简入门:通俗理解微积分/期望方差/正态分布前世今生(23修订版)

    原标题:数据挖掘中所需的概率论与数理统计知识(12年首次发布,23年重编公式且反复改进) 修订背景 本文初稿发布于12年年底,十年后的22年底/23年初ChatGPT大火,在写ChatGPT通俗笔记的 ...

  4. 【51nod】 最小约数 V2

    [51nod] 最小约数 V2 题目 解题思路 用vector,防止爆数组 先将所有数排序,满足输出要从小到大 然后求出每个数除1外的最小约数 最后输出答案 代码 #include<algori ...

  5. java算法----排序----(6)希尔排序(最小增量排序)

    1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...

  6. 最小成本排序:两种情况

    最小成本排序:两个数交换,这两个数相加,一组数全部交换成有序之后,累加和就是成本. 如何求出最小的成本,有一点难度,主要在于有两种情况的分析,一种是每个元素交换到正确位置(会形成一些闭合的圆),进行计 ...

  7. 利用级数求和推导泊松分布的期望方差

    利用级数求和推导泊松分布的期望方差 @(概率论) 闲来无事,动手推导一个常见的泊松分布的表达式相关的数字特征: EX,DX.并通过这个过程思考级数求和的注意事项. 回顾泊松分布: 设变量X服从λ\la ...

  8. 二项分布的期望方差证明

    二项分布的期望方差证明 P(X=k)=(nk)pkqn−k,k=0,1,2,..,n,q=1−pEX=∑k=0nk(nk)pkqn−k=∑k=1nk(nk)pkqn−k=∑k=1nkn!k!(n−k) ...

  9. 分段函数的期望和方差_导数排列组合期望方差.doc

    每日练习 导数大题 证明 期望方差 1.已知函数,. (1)当时,求函数的最大值: (2)若,且对任意的恒成立,求实数的取值范围. 2.已知函数f(x)=,g(x)=ex+m,其中e=2.718-. ...

最新文章

  1. 用Transformer定义所有AI模型!特斯拉AI总监Karpathy发推感叹AI融合趋势
  2. 计算多卷积核神经网络迭代次数---分类0,6
  3. php对话框制作,js制作一个简单的对话框教程
  4. SEO:如何做好软文推广
  5. Visual Studio 2017 RC3支持.NET Core,延迟对Python的支持
  6. 激光炸弹(二维前缀和问题)
  7. 《金色梦乡》金句摘抄(二)
  8. 新唐M0 KEIL环境搭建,找不到device不识别,关键:Nu-Link_Keil_Driver
  9. 绕开登录进行爬虫_爬虫小偏方:绕开登陆和访问频率控制
  10. 5-6pooling层
  11. Windows远程访问Linux (Ubuntu)服务器
  12. ce标志cad_CAD标识
  13. 1446. 连续字符【我亦无他唯手熟尔】
  14. 最近美团前端面试题目整理
  15. 3dmax室内灯光强度一般打多少才合适
  16. 参数服务器——分布式机器学习的新杀器
  17. Java面试宝典最新整理 下篇(持续更新中)
  18. 即时通讯(四)---初始化融云
  19. 商品国标码的SQLSERVER SQL 校验位 实现:
  20. 软考复习笔记、项目论证与评估与项目招投标流程及管理,建议收藏

热门文章

  1. 每日程序C语言49-猴子分桃子问题
  2. java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...
  3. 刷圈兔下载_刷圈兔app
  4. python 语音识别机器人控制系统_python人脸识别+语音识别 的监控系统
  5. SQLserver查看某个视图的创建语句
  6. python爬虫(4)--Cookie的使用
  7. 理解JavaScript的运行
  8. HTML5 Audio标签API整理(三)
  9. solaris 源代码
  10. [置顶]信息发布系统 Jquery+MVC架构开发(4)Model 层