美文网首页程序员
Hackrank 统计十日通(第一天) 标准差

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

作者: cfcodefans | 来源:发表于2017-04-05 17:59 被阅读0次

    来源 标准差 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,计算如下:

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


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

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


    其中xi是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 统计十日通(第一天) 标准差

        本文链接:https://www.haomeiwen.com/subject/hqptattx.html