算法(4th ed)(95):基础——数据抽象 4.4.4

阅读数:9 2019 年 11 月 2 日 12:14

算法(4th ed)(95):基础——数据抽象 4.4.4

(更多抽象数据类型的实现:可视化的累加器)

表 1.2.14 所示的可视化累加器的实现继承了 Accumulator 类并展示了一种实用的副作用:它用 StdDraw 画出了所有数据(灰色)和实时的平均值(红色),见图 1.2.8。完成这项任务最简单的办法是添加一个构造函数来指定需要绘出的点数和它们的最大值(用于调整图像的比例)。严格说来,VisualAccumulator 并不是 Accumulator 的 API 的实现(它的构造函数的签名不同且产生了一种不同的副作用)。一般来说,我们会仔细而完整地设计 API,并且一旦定型就不愿再对它做任何改动,因为这有可能会涉及修改无数用例(和实现)的代码。但添加一个构造函数来取得某些功能有时能够获得通过,因为它对用例的影响和改变类名所产生的变化相同。在本例中,如果已经开发了一个使用Accumulator 的用例并大量调用了 addDataValue()mean(),只需改变用例的一行代码就能享受到VisualAccumulator 的优势。

图 1.2.8 可视化累加器图像

表 1.2.14 一种能够累加数据的抽象数据类型

APIpublic class VisualAccumulator
             VisualAccumulator(int trials, double max)
       void  addDataValue(double val)添加一个新的数据值
     double  mean()所有数据的平均值
     String  toString()对象的字符串表示
典型的用例
public class TestVisualAccumulator
{
   public static void main(String[] args)
   {
      int T = Integer.parseInt(args[0]);
      VisualAccumulator a = new VisualAccumulator(T, 1.0);
      for (int t = 0; t < T; t++)
         a.addDataValue(StdRandom.random());
      StdOut.println(a);
   }
}

数据类型的实现

评论

发布