该题目来源于Robert Sedgewick 的《算法》。

1.1.32 Histogram. Suppose that the standard input stream is a sequence of double values. Write a program that takes an integer N and two double values l and r from the command line and uses StdDraw to plot a histogram of the count of numbers in the standard input stream that fall in each of the N intervals defined by dividing (l, r) into N equal-sized intervals.

1.1.32 直方图。 假设标准输入流中是一系列double值。写一个程序从命令行接受一个整数 N 和两个double值 l 和 r ,将(l,r) 分成N段,并使用StdDraw画出输入流的值落入每段的数量的直方图。

在统计学中,直方图是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。 直方图是品质管理七大工具之一。【来源于维基百科】

首先做一个柱状图,了解一下 StdDraw类中filledRectangle的方法:

    /*** bar chart example*/public static void barChart(){int N = 5;double[] a = new double[N];for (int i = 0; i < N; i++) {a[i] = StdRandom.random();}for (int i = 0; i < N; i++) {//矩形一半的宽double rw = 0.5 / N;// 矩形一半的高double rh = a[i] /2.0;//矩形中心点x轴的坐标double x = 1.0 * i / N + 1.0 / N / 2;// 矩形中心点y轴的坐标double y = rh;System.out.println("x=" + x + ",y=" + y + ",rw=" + rw + ",rh=" + rh);StdDraw.filledRectangle(x, y, rw, rh);}}

在main方法中调用上面的方法,会展示下面的视图:

本道题的解决如下:

    /*** solution * @param N the numbers of intervals * @param l interval left value* @param r interval right value* @param a double stream*/public static void histogramSolution(int N, double l, double r, double[] a){// double stream的组距Arrays.sort(a);double interval = (r -l) / N;// histogram 的组距double histogramInterval = 1.0 / N;for (int i = 0; i < N; i++) {// double stream 组距左边的值double dsLeft = interval * i + l;// double stream 组距右边的值double dsRight = interval * (i+1) + l;// 矩形中心位置x轴的坐标double x = histogramInterval *i +histogramInterval / 2;// 频次,代表直方图的高int countTemp = 0;for (int j = 0; j < a.length; j++) {// 频次if (a[j] > dsLeft && a[j] < dsRight ) {countTemp ++;}}double p = (countTemp * 1.0) / a.length;//double p = (countTemp * 1.0) / N;// 矩形中心位置y周的坐标double y = p / 2;StdDraw.filledRectangle(x, y, histogramInterval / 2, y);}}

比如,用main方法模拟调用:

    public static void main(String[] args) {//barChart();// represent argument Nint N = 3;// represent argument l// represent argument rdouble l = 1.09;double r = 23.32;// represent double streamdouble[] a = {1.08, 1.21, 2.33, 3.35, 8.78, 6.98, 7.99, 10.21, 15.22, 21.23, 14.51, 16.77, 18.23};histogramSolution(N, l, r, a);}

展示的结果如下:

1.1.32 Histogram 直方图相关推荐

  1. python——np.histogram()直方图生成函数

    直方图 直方图定义 在统计学中,直方图是一种对数据分布情况的图形表示,是一种二维统计图表,他的两个坐标分别是统计样本(图像.视频帧)和样本的某种属性(亮度,像素值,梯度,方向,色彩等等任何特征) 直方 ...

  2. 5 种方法教你用Python玩转histogram直方图

    直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是 matplotlib,seaborn 等高级封装的库包,类似以下这样的绘图. 本篇博主将要总 ...

  3. python 条形图填充疏密_教你利用Python玩转histogram直方图的五种方法

    直方图 直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是 matplotlib,seaborn 等高级封装的库包,类似以下这样的绘图. 本篇博 ...

  4. 用python构建多只股票日收益率直方图_5种方法教你用Python玩转histogram直方图

    作者:xiaoyu 微信公众号:Python数据科学 直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是 matplotlib,seaborn ...

  5. python直方图分箱_5种方法教你用Python玩转histogram直方图

    作者:xiaoyu 微信公众号:Python数据科学 直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是matplotlib,seaborn 等 ...

  6. elasticsearch 之 histogram 直方图聚合

    1. 简介 直方图聚合是一种基于多桶值聚合,可从文档中提取的数值或数值范围值来进行聚合.它可以对参与聚合的值来动态的生成固定大小的桶. 2. bucket_key如何计算 假设我们有一个值是32,并且 ...

  7. np.histogram()直方图分布

    np.histogram()是一个生成直方图的函数 示例如下: 首先生成了500个拉普拉斯分布随机数并且取了前10个数 >>>d = np.random.laplace(loc=15 ...

  8. python 直方图的绘制方法全解_教你利用Python玩转histogram直方图的五种方法

    直方图 直方图是一个可以快速展示数据概率分布的工具,直观易于理解,并深受数据爱好者的喜爱.大家平时可能见到最多就是 matplotlib,seaborn 等高级封装的库包,类似以下这样的绘图. 本篇博 ...

  9. 【转载】matlab histogram直方图设置

    转自百度经验,原地址:https://jingyan.baidu.com/article/4f7d5712dd9e101a201927ec.html 转载图片不完整,去原地址学习吧·~ 这里介绍使用M ...

  10. python matplotlib plt bins histogram 直方图

    直方图 import matplotlib.pyplot as pltplt.hist(x = '需要处理的数据',bins = '需要分割的精度') plt.xlabel('x轴标签') plt.y ...

最新文章

  1. [置顶] 安卓高手之路之ClassLoader(二)
  2. 如何在ubuntu上搭建hustoj?
  3. iOS之获取手机的系统信息
  4. 剥开比原看代码(八):比原的Dashboard是怎么做出来的?
  5. python解释器的提示符是shell嘛_python解释器怎么运行
  6. 2015年,大数据将改变客户关系
  7. [HEOI2016/TJOI2016]求和(第二类斯特林数)
  8. 【js】【前台输入效验】【validate插件的使用】 前端
  9. hdu1002——A + B Problem II
  10. maven指定配置文件
  11. 云网融合:中国电信国际公司的海外野心
  12. 情感驿站005:为什么大多数人永远不会真正成功?
  13. ajax方法参数详解,$.ajax()方法参数详解
  14. JavaScript事件与JQuery事件
  15. Unity3D自带案例AngryBots分析(二)——人物动作控制逻辑
  16. 基于BLE + LoRa人员定位技术下的室内定位-Lora人员定位-新导智能
  17. Latex中如何使用中文?
  18. Android高德地图的定位
  19. 如何用MCU来控制21489调音?
  20. 《科技创业启示录》一第3章 拉尔斯·欣里希斯

热门文章

  1. 免费软件不比付费软件逊色半分之94款免费软件
  2. 全球十大管理咨询公司的排名
  3. IO流---Reader和Writer
  4. 湿气重怎么办?湿气有哪些危害?祛湿建议首选云植祛湿颗粒
  5. 他们都说springboot是懒人神器,你觉得呢?
  6. 扁豆凝集素LCA/LcH填料/小扁豆凝集素-琼脂糖凝胶/双花扁豆凝集素DBA/黑皮扁豆凝集素
  7. python裁剪图片并保存
  8. 裸机服务器装系统步骤,组装裸机如何装系统?
  9. 工业镜头与普通镜头有什么区别?
  10. Unbuntu下U盘突然权限只读,无法重命名和复制粘贴文件的问题修复