Hackrank 统计十日通(第一天) 标准差

来源 标准差 Standard Deviation

期望值 Expected Values: 一个离散随机变量X的期望值,基本上就是平均值(μ). 我们也可以称这是X的数学期望(或简称期望).

感觉他说得不对,期望是各个可能出现的结果乘以对于的概率的值的和.
基本上hackerrank这里写得不能再模糊了,我完全不明白
"The expected value of a discrete random variable, , is more or less another way of referring to the mean (). We can also refer to this as the mathematical expectation (or just the expectation) of . "
查了维基, 大概有点概念
"是试验中每次可能的结果乘以其结果概率的总和"
例如,掷一枚公平的六面骰子,其每次“点数”的期望值是3.5,计算如下:

Hackrank 统计十日通(第一天) 标准差_第1张图片

方差 Variance δ2: 方差是从离散随机变量X的期望μ中得到的X的值波动程度的一种平均度量. 你可以认为它是随机变量值和平均值的差的期望(求平均值).给定一个n个元素的数据集X:


其中x i是S的第i个元素而μ是S所有元素的平均值.

标准差 δ
标准差量化一个数据集中变化波动的总和, 给定一个n元素的数据集X:


其中x i是S的第i个元素而μ是S所有元素的平均值.

目标

给定一个含N个整数的数组X, 计算和打印出其标准差, 你的答案应该精确到小数点后一位(例如,12.3). 标准差的允许误差(error)在±0.1之间.

输入格式

第一行是一个整数N,表示输入数组的元素数量.
第二行包含N个空格分隔的整数,表示数组中的各个元素

约束条件

  • 5 <= N <= 100
  • 0 < xi <= 105, xi是数组X中第i个元素.

输出格式

输出标准差到新的一行中, 精确到小数点后一位(例如:12.3)

示例输入

5
10 40 30 50 20

示例输出

14.1

示例解析

第一, 我们找到平均值

  1. (x0 - μ)2 = (10 - 30)2 = 400
  2. (x1 - μ)2 = (40 - 30)2 = 100
  3. (x2 - μ)2 = (30 - 30)2 = 0
  4. (x3 - μ)2 = (50 - 30)2 = 400
  5. (x4 - μ)2 = (20 - 30)2 = 100

现在我们计算方差∑N-1i=0(xi - μ)2 = 400 + 100 + 0 + 400 + 100 = 1000, so:


最后舍入到小数点后一位, 答案是14.1

python

def standard_deviation():
    n = int(input())
    X = [int(x) for x in input().split(" ")]
    mean = sum(X) / n
    print("{0:.1f}".format(sqrt(sum([(x - mean) ** 2 for x in X]) / n)))


if __name__ == '__main__':
    standard_deviation()

java

import java.io.*;
import java.util.*;
import java.util.stream.*;

public class Solution {

    public static void main(String[] args) {
        try (Scanner scan = new Scanner(System.in)) {
            int n = scan.nextInt();
            scan.nextLine();
            int[] X = Stream.of(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            final double mean = IntStream.of(X).average().getAsDouble();
            System.out.printf("%.1f\n", Math.sqrt(IntStream.of(X).mapToDouble(i -> (i - mean) * (i - mean)).sum() / (double) X.length));
        }
    }
}

scala

object Solution {

    def main(args: Array[String]) {
        import java.util.Scanner
        val scan: Scanner = new Scanner(System.in)
        try {
            val n: Int = scan.nextInt
            scan.nextLine()
            val X: Array[Int] = scan.nextLine().split(" ").map(_.toInt).toArray
            val mean: Double = X.sum / X.length.toDouble
            printf("%.1f\n", Math.sqrt(X.map(x => (x - mean) * (x - mean)).sum / X.length))
        } finally {
            scan.close()
        }
    }
}

你可能感兴趣的:(Hackrank 统计十日通(第一天) 标准差)