西电期末1002.异常点检测

一.题目

西电期末1002.异常点检测_第1张图片

二.分析与思路

根据题目按部就班即可,不难发现西电的题目大多都是以一个简单的背景稍作嵌套命题的,主要考察基础知识点的嵌套,本题先计算平均值,再根据给出的公式计算方差,最后遍历所有数据进行判断。主要考察的点在于数据类型的选择和处理,由于开方和除法的操作,很多变量比如总数,均值,方差都使用了double类型,此外,由于样本个数为整形,还涉及类型转换。

三.代码实现

#include//万能头文件
int main()
{
    int n;//个数为整形
    scanf("%d",&n);
    double num[n];//数据为双精度浮点型
    double E_x=0;//期望
    for(int i=0;iE_x+3*SD_x)ans++;
    }//判断是否符合条件
    printf("%.4lf %d",SD_x,ans);//打印答案,注意中间空格隔开,标准差保留4位小数
    return 0;
}

四.评价

其实我一开始用的不是这种方法,在概率论中方差和均值有关系的(高中数学也应该见到过):

 D[X]=E[X^{2}]-E[X]^{2}\\\\

推导如下:

西电期末1002.异常点检测_第2张图片

所以代码就是:

#include
int main()
{
    int n;
    scanf("%d",&n);
    double num[n];
    double E_x=0;
    double E_x_square=0;
    for(int i=0;iE_x+3*SD_x)ans++;
    }
    printf("%.4lf %d",SD_x,ans);
    return 0;
}

但是示例的运行结果不对,我百思不得其解,最后发现题目中给的方差公式分母是n-1,把源代码计算方差的分母的n_{0}-1改成n_{0},得出了和新代码一样的运行结果,我不知道是题目有一些问题还是这题目本身处理时有自己的公式,与纯数学的标准差公式有区别,但是题总归是切掉了,于是我查了一下,发现标准差其实有两种:

西电期末1002.异常点检测_第3张图片

西电期末1002.异常点检测_第4张图片

题目中叫样本标准差,我们所熟知的叫对象总体标准差,学习一下总归是好的。

你可能感兴趣的:(算法)