Java HdrHistogram依赖 直方图统计算法

HdrHistogram是一种用于高效统计计算的算法,尤其适合大数据量且大部分数据集中在低端的情况。它通过桶和子桶的分桶策略,结合压缩存储,能够在不精确存储所有数据的情况下进行平均值、中位数等统计计算。算法主要包括桶的拆分、压缩存储和迭代计算三个步骤。在Java中,可以通过添加HdrHistogram依赖来使用此算法。其特点是节省内存,但结果可能有轻微误差,可通过调整子桶大小平衡精度和内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java HdrHistogram依赖 直方图统计算法

介绍

HdrHistogram 可以用较少的资源计算平均值、中位数等各类统计值
源码地址,包含多种语言

https://github.com/HdrHistogram

Java使用方法

依赖

        <dependency>
            <groupId>org.hdrhistogram</groupId>
            <artifactId>HdrHistogram</artifactId>
            <version>1.2.1</version>
        </dependency>

public class Test {
    public static void main(String[] args) {
    	// 需指定预估的最大值
        Histogram histogram = new Histogram(5400000000000L, 4);
        for(int i = 1; i < 10000000; i = i * 2) {
        	// 塞入需要计算的值
            histogram.recordValue(i);
        }
        long t1 = System.nanoTime();
        // 求出平均值
        double a = histogram.getMean();
        long t2 = System.nanoTime();
        System.out.println(a + " " + (t2 - t1) + "ns");
    }
}

算法

HdrHistogram采用的是分桶的方式进行实现。
不需要将每个值都存下来,而是通过压缩存储,但结果也不是精确解。
在舍弃一点点精度的情况下省下大量内存。
接下来先来了解这个算法关键的三个步骤

  • 桶的拆分
  • 压缩存储
  • 迭代计算

桶的拆分

该算法用桶和子桶来表示被计算的数
被计算的数: 比如一个数列需要求平均值,指数列中的每一个值
桶: 代表二进制的1位
子桶: 每个桶下面都有定量的子桶(后面会慢慢清晰)

被计算的数如何拆分成桶和子桶:
在这里插入图片描述

压缩存储

将上面计算得到的桶号和子桶号,再求出新的值,进行压缩存储
压缩数组: 存储长度为桶*子桶
整体流程是:

  • 原始数据分解为桶与子桶
  • 通过桶与子桶计算出新值
  • 在压缩数组中将该新值对应的下标数量累计
  • 压缩数组的每一格可对应一个近似原始数据
    在这里插入图片描述
    各个原始数据在压缩数组中的什么位置:
    在这里插入图片描述
    压缩数组中各个位置对应的值:
    在这里插入图片描述

迭代计算

比如求平均值则会迭代上述压缩数组进行求值
在这里插入图片描述
压缩数组中记录原始数据的数量:
在这里插入图片描述
计算:
在这里插入图片描述

特点

HdrHistogram算法适用于数据量大,且大部分数据集中在第一个桶中,此时该计算结果更接近真实值。
子桶的大小可以根据实际情况设置,让大部分数值处于第一个子桶。
子桶容量越大结果越精确,但需要的内存越多,可适当调整大小。

使用Armbian安装OpenWrt是可能的,但需要一些额外的步骤和准备工作。 首先,确保你的设备兼容ArmbianOpenWrtArmbian是一个适用于ARM架构的开源操作系统,OpenWrt是一种支持嵌入式设备的Linux操作系统。你需要在设备的官方网站上查找信息,确认是否有ArmbianOpenWrt的支持。 一旦确认设备兼容,你可以开始准备安装。首先,下载Armbian操作系统的最新版本,并将其写入SD卡或USB设备中。接下来,将SD卡或USB设备插入到你的设备上,并启动设备。 一旦设备启动,你需要登录到Armbian系统中。你可以使用SSH等工具登录到设备的控制台。 在控制台上,你需要下载OpenWrt安装包。你可以在OpenWrt官方网站上找到最新的可用版本。确保选择与你的设备相匹配的安装包。 下载安装包后,你需要将其上传到你的设备中。可以使用SCP等工具来进行上传。 一旦安装包上传完成,你需要解压安装包并运行安装命令。不同的设备可能会有不同的安装命令,所以你可能需要查阅OpenWrt文档或设备的官方网站来获取准确的安装步骤。 安装过程完成后,你应该能够在Armbian中看到OpenWrt的界面。你现在可以通过浏览器登录到OpenWrt,并进行相应的设置和配置。 需要注意的是,安装过程可能会有一些具体的差异,具体取决于你使用的设备和版本。在进行任何操作之前,最好先查阅相关的文档和指南,以确保正确和顺利地完成安装过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值