累加器抽象数据类型

你。 提交于 2020-01-12 11:50:27

一 累加器抽象数据类型API

public class Accumulator

Accumulator()

创建一个累加器

public void addDataValue(double x)

添加一个新的数据值

public double mean()

所有数据的平均值

public String toString()

对象的字符串表示

二 典型用例

package MyAccumulator;

import common.Accumulator;
import common.StdOut;
import common.StdRandom;

/**
* Copyright (C), 2020-2020, XXX有限公司
* FileName: MyAccumulator
* Author:   cakin
* Date:     2020/1/11
* Description: 累加器测试
*/
public class MyAccumulator {
    public static void main( String[] args ) {
        int T = Integer.parseInt(args[0]);
        Accumulator a = new Accumulator();
        for(int t = 0;t<T;t++){
            a.addDataValue(StdRandom.uniform());
        }
        StdOut.println(a);
    }
}

三 测试结果

F:\Algorithm\target\classes>java MyAccumulator.MyAccumulator 1000
n = 1000, mean = 0.501307867820307, stddev = 0.2897746380529854

四 数据类型的实现

package common;

public class Accumulator {
    private int n = 0;          // number of data values
    private double sum = 0.0;   // sample variance * (n-1)
    private double mu = 0.0;    // sample mean

    public Accumulator() {
    }

    public void addDataValue(double x) {
        n++;
        double delta = x - mu;
        mu  += delta / n;
        sum += (double) (n - 1) / n * delta * delta;
    }

    public double mean() {
        return mu;
    }

    public double var() {
        if (n <= 1) return Double.NaN;
        return sum / (n - 1);
    }

    public double stddev() {
        return Math.sqrt(this.var());
    }

    public int count() {
        return n;
    }

    public String toString() {
        return "n = " + n + ", mean = " + mean() + ", stddev = " + stddev();
    }
}

五 参考代码

https://gitee.com/cakin24/Algorithm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!