当前位置: 首页 > article >正文

二值统计-原理和应用场景

二值统计-原理和应用场景二值统计概述二值统计通常涉及到将数据分为两个类别或状态比如成功与失败、是与非等并对这些类别进行计数和分析。这种统计方法在处理二分类问题时非常常见比如在质量控制、用户行为分析等领域。二值统计的4大类型类型 1计数器数组使用一个数组作为计数器数组的每个元素用于记录两种状态中的一种状态的数量。工作原理有一个数组countscounts[0]用于记录状态为 0 的元素数量counts[1]用于记录状态为 1 的元素数量当一个元素状态发生变化时相应的计数器就会增加或减少特点在简单的编程场景中比较直观适用于小规模的二值统计实现简单易于理解类型2位图Bitmap位图是一种简单直观的二值统计数据结构。它将每个元素对应到位图中的一个位位的值只能是 0 或 1分别代表两种状态。工作原理在统计用户是否登录的场景中将用户 ID 与位图中的位进行一一对应若用户已登录对应的位设为 1若未登录则设为 0通过对所有位进行扫描和计数可以快速统计出处于两种状态的元素数量特点内存效率高每个元素只需要1位存储空间查询速度快直接通过位操作实现适用于大规模数据的二值状态统计类型3布隆过滤器BloomFilter布隆过滤器底层使用一个初值全为0的bit数组和多个hash函数。工作原理添加数据时先对key经过所有的hash并对长度取模得到多个位置对每个位置设置为1查询数据时先对key经过所有的hash并对长度取模得到多个位置只要有一个为0则该key不存在如果所有位置都为1则key可能存在存在误判特点可以快速判断元素是否可能存在有误判率即可能将不存在的元素误判为存在不能删除数据空间效率高查询速度快误判原理布隆过滤器判存在的时候有误判即使是全为1时也不一定存在因为存在哈希冲突。类型4布谷鸟过滤器 CuckooFilter布谷鸟过滤器是布隆过滤器的增强版本解决了布隆过滤器不能删除数据的缺陷。工作原理使用指纹信息代替简单的位数组来存储数据每个元素通过哈希函数生成一个或多个指纹这些指纹被存储在过滤器中查询时只需检查对应位置上是否存在相应的指纹信息即可特点支持元素的动态添加和删除提供比传统布隆过滤器更高的查询效率空间利用率更高同样存有误判率算法实现更复杂与布隆过滤器的对比优势可以删除数据空间利用率更高劣势算法更复杂同样有误判率误判率控制布隆过滤器的误报率通过调整位数组的大小和哈希函数来控制而布谷鸟过滤器的误报率受指纹大小和桶大小控制二值统计的应用场景和案例二值统计的场景1设备状态监测在网络设备管理中用于统计设备的在线1和离线0状态。实际应用在一个数据中心有大量的服务器通过二值统计监控服务器的运行状态可以使用计数器数组每次服务器状态变化时更新相应的计数器当需要了解在线和离线服务器的数量时直接读取计数器的值即可便于及时发现设备故障和网络问题实现方式计数器数组简单直观适合小规模设备位图适合大规模设备节省内存空间布隆过滤器适合快速判断设备是否在线二值统计的场景2用户行为分析在互联网产品中统计用户对某个功能的使用情况。应用案例1推送通知功能统计场景描述以一款移动社交应用为例统计用户开启或关闭推送通知功能的比例。实现方法使用位图来记录每个用户的推送通知状态位为 1 表示开启推送通知位为 0 表示关闭推送通知数据分析通过统计位为 1开启和位为 0关闭的数量得到开启和关闭推送通知的用户比例帮助产品团队评估推送功能的受欢迎程度和对用户的干扰程度应用案例2电商用户签到记录场景描述电商用户签到功能就是二值统计的典型应用。实现方法基于bitmap二进制数组实现签到日历用bit统计一位用户用一个二进制bit位代表一天的签到状态业务价值记录用户的签到行为分析用户活跃度设计签到奖励机制提升用户参与度技术实现要点计数器数组的实现classBinaryCounter:def__init__(self):self.counts[0,0]# [count_0, count_1]defadd(self,value):ifvaluein[0,1]:self.counts[value]1defget_counts(self):returnself.countsdefget_total(self):returnsum(self.counts)位图的实现classBitmap:def__init__(self,size):self.sizesize self.bitmap0defset_bit(self,position,value):ifvalue1:self.bitmap|(1position)else:self.bitmap~(1position)defget_bit(self,position):return(self.bitmapposition)1defcount_ones(self):returnbin(self.bitmap).count(1)defcount_zeros(self):returnself.size-self.count_ones()布隆过滤器的实现要点classBloomFilter:def__init__(self,size,hash_count):self.sizesize self.hash_counthash_count self.bit_array[0]*sizedefadd(self,key):forseedinrange(self.hash_count):indexself._hash(key,seed)%self.size self.bit_array[index]1defmight_contain(self,key):forseedinrange(self.hash_count):indexself._hash(key,seed)%self.sizeifself.bit_array[index]0:returnFalsereturnTruedef_hash(self,key,seed):# 实现哈希函数pass性能对比特性计数器数组位图布隆过滤器布谷鸟过滤器内存占用O(n)O(n/8)O(n)O(n)查询速度O(1)O(1)O(k)O(1)支持删除是是否是误判率0%0%可配置可配置实现复杂度低低中高适用场景小规模统计大规模状态统计快速存在性检查需要删除的场景应用场景选择指南选择计数器数组的场景数据量较小几千个元素以内需要精确统计实现简单即可满足需求选择位图的场景需要大量二值状态存储内存受限环境需要快速状态查询选择布隆过滤器的场景需要快速判断元素是否存在可以接受一定误判率不需要删除操作内存空间有限选择布谷鸟过滤器的场景需要快速判断元素是否存在需要支持删除操作可以接受一定误判率对空间效率有较高要求总结二值统计是处理二元状态数据的核心统计方法根据具体需求选择合适的实现方式精确统计使用计数器数组或位图快速查询使用布隆过滤器或布谷鸟过滤器支持删除选择位图或布谷鸟过滤器空间优化选择位图或布隆过滤器性能要求根据查询速度和内存占用权衡选择不同的二值统计方法各有优劣需要根据具体的业务场景、数据规模和性能要求来选择最合适的实现方案。

相关文章:

二值统计-原理和应用场景

二值统计-原理和应用场景 二值统计概述 二值统计通常涉及到将数据分为两个类别或状态,比如成功与失败、是与非等,并对这些类别进行计数和分析。 这种统计方法在处理二分类问题时非常常见,比如在质量控制、用户行为分析等领域。 二值统计的4大…...

用Python和face3d库,5分钟搞定3DMM人脸重建(附完整代码)

用Python和face3d库5分钟实现3D人脸重建实战指南 在咖啡馆里,一位游戏开发者正对着笔记本电脑屏幕上的平面人像皱眉——他需要为角色创建3D模型,但传统建模软件需要数小时手工调整。此时,3D Morphable Model(3DMM)技术…...

使用gradient-cursor库为网页添加渐变动态光标效果

1. 项目概述:为你的网页注入灵魂光标 在网页设计的细节里,鼠标光标常常是被忽视的一环。默认的白色箭头或小手图标,虽然功能明确,但千篇一律,缺乏个性。你是否想过,当用户在你的个人作品集、创意网站或交互…...

基于LLM的AI安全助手:hackingBuddyGPT框架设计与实战

1. 项目概述:当安全研究员拥有一个AI助手如果你是一名网络安全从业者,或者对渗透测试、红队攻防感兴趣,那么你一定对日常工作中那些重复、繁琐但又至关重要的任务感到熟悉:一遍遍地扫描端口,手动测试各种漏洞利用链&am…...

SAP销售模块实战:三种业务场景下,如何精准抓取销售成本与收入数据(附SQL思路)

SAP销售模块实战:三种业务场景下精准抓取销售成本与收入数据的SQL实现 销售毛利分析是企业经营决策的核心依据,但在SAP系统中直接获取这些数据却充满挑战。作为经历过多个行业项目的实施顾问,我发现不同成本结转方式会导致数据分布在完全不同…...

基于MCP协议的Google AI工具集:简化AI智能体多模态能力集成

1. 项目概述:一个为AI智能体赋能的Google AI工具集 最近在折腾AI智能体(Agent)的开发,发现一个痛点:想让智能体具备“看”和“听”的能力,比如翻译一段外文、识别图片里的文字、或者分析一段话的情绪&…...

Cursor编辑器RTL文本修复:解决阿拉伯语等从右向左语言输入问题

1. 项目概述:一个为开发者解决RTL语言输入问题的Cursor插件如果你是一位使用阿拉伯语、希伯来语等从右向左(RTL)书写语言的开发者,并且正在使用Cursor——这款基于AI的智能代码编辑器,那么你很可能遇到过这样的困扰&am…...

打造高效终端工作流:multicli模块化命令行工具实战指南

1. 项目概述:一个终端里的“瑞士军刀”如果你和我一样,每天大部分时间都泡在终端里,那你肯定也经历过这种场景:想快速查看一下某个目录的Git状态,得敲git status;想看看当前目录的磁盘占用,得敲…...

告别‘炼丹炉’:用ncnn+ONNX把PyTorch模型轻松‘瘦身’部署到边缘设备

从PyTorch到边缘设备:ncnnONNX轻量化部署实战指南 边缘计算时代的模型部署挑战 当我们将训练好的PyTorch模型部署到边缘设备时,常常会遇到这样的困境:在开发机上运行流畅的模型,到了树莓派或移动设备上却变得异常缓慢&#xff0…...

基于RAG与代码向量化的智能开发助手:从原理到实践

1. 项目概述:当Claude遇上代码库,一个AI驱动的开发助手如何炼成最近在GitHub上看到一个挺有意思的项目,叫openclaw-claude-code-integration。光看名字,你大概能猜到这是个把Claude AI和代码库集成起来的工具。作为一个在开发一线…...

别再只会用机械按键了!手把手教你用STM32的TIM2输入捕获实现电容触摸按键(附完整代码)

基于STM32的电容触摸按键开发实战:从原理到抗干扰设计 在智能家居控制面板、工业HMI界面等场景中,传统机械按键存在易磨损、防水防尘性能差等痛点。而电容触摸技术通过非接触式检测,不仅能提升产品寿命,还能实现更简洁的外观设计。…...

别再傻傻分不清了!AMBA AHB2和AHB-Lite到底差在哪?给SoC新手的保姆级对比指南

AMBA AHB2与AHB-Lite协议深度对比:从设计哲学到芯片选型实战 在SoC设计的浩瀚宇宙中,总线协议如同连接各个功能模块的神经网络。当我第一次面对AMBA总线家族中这对"双胞胎"——AHB2和AHB-Lite时,那种困惑感至今记忆犹新。它们看似相…...

深入GLIP的“语言-视觉”对齐机制:从BERT分词到对比损失,看模型如何听懂你的话

解码GLIP的跨模态对齐技术:从文本分词到视觉定位的工程实现 当计算机视觉遇到自然语言处理,一场关于"理解"的革命正在悄然发生。GLIP(Grounded Language-Image Pretraining)作为这场革命的先锋,通过独特的跨…...

Zsh-Ask:在终端无缝集成ChatGPT的极简AI助手插件

1. 项目概述与核心价值 如果你和我一样,是个重度命令行用户,每天大部分时间都泡在终端里,那么你一定遇到过这样的场景:写脚本时卡在一个正则表达式上,想不起来某个命令的某个参数怎么用,或者突然想不起来某…...

基于本地AI与向量数据库的智能书签管理系统实战

1. 项目概述:当书签管理遇上AI智能如果你和我一样,是个重度网络冲浪者,或者从事需要大量信息检索的工作,浏览器收藏夹(书签)大概率已经成了一个“数字黑洞”。我敢打赌,你的书签栏里塞满了各种链…...

ChatGPTBox:浏览器AI侧边栏插件部署与效率提升实战指南

1. 项目概述与核心价值最近在折腾浏览器插件,发现一个叫 ChatGPTBox 的开源项目挺有意思。简单来说,它不是一个独立的聊天机器人,而是一个功能强大的浏览器侧边栏工具。你可以把它理解为一个“瑞士军刀”,把各种主流AI模型&#x…...

商业航天迎黄金时代,微纳星空冲刺IPO,中国商业航天进入产业兑现阶段?

商业航天迎来历史性拐点商业航天迎来黄金时代,中国商业航天从“烧钱讲故事”步入“排队进资本市场”阶段。2026年第一季度,全球商业航天产业出现历史性拐点,星链(Starlink)在轨卫星突破10000颗,马斯克计划以…...

STM32CubeMX + FreeRTOS 实战:从零到一,手把手教你为STM32F103C8T6搭建一个带LED、按键和串口打印的多任务系统

STM32CubeMX FreeRTOS 实战:构建智能设备控制台的多任务系统 1. 项目概述与硬件准备 想象一下,你正在开发一个智能家居控制器的原型系统。这个系统需要同时处理多个任务:实时监测用户按键输入、控制LED状态指示、通过串口与上位机通信。这正…...

SoC设计中时钟域交叉(CDC)验证的关键技术与实践

1. 时钟域交叉(CDC)验证的核心挑战与解决方案在现代SoC设计中,多时钟域架构已成为常态。根据行业数据,一个中等复杂度的SoC通常包含15-30个异步时钟域,而高端处理器可能超过50个。这种架构带来了一个关键验证难题&…...

别再让PostgreSQL连接数爆了!手把手教你用pgBouncer 1.24.1给数据库‘减负’(附日志自动清理脚本)

PostgreSQL连接池实战:用pgBouncer 1.24.1破解高并发瓶颈 当你的应用用户量突破十万级大关时,是否经常在凌晨被"too many connections"的告警惊醒?这就像高峰期的地铁站,每个乘客(客户端连接)都…...

Palot:轻量级自动化工具,提升开发与运维效率

1. 项目概述与核心价值最近在折腾个人服务器和自动化流程时,发现了一个挺有意思的项目,叫palot。这个项目在 GitHub 上由ItsWendell维护,乍一看名字可能有点摸不着头脑,但深入了解后,你会发现它是一个非常贴合当下开发…...

手机变身AI工作站:用Termux在安卓上跑通ChatGLM-6B模型(保姆级避坑指南)

手机变身AI工作站:用Termux在安卓上跑通ChatGLM-6B模型(保姆级避坑指南) 你是否想过,口袋里那台闲置的安卓手机,也能变身成为运行大语言模型的AI工作站?本文将带你用Termux这把"瑞士军刀"&#x…...

iTVBoxFast二开版深度体验:从用户视角看会员系统、积分商城与多线路切换到底好不好用

iTVBoxFast二开版深度体验:会员系统、积分商城与多线路切换实战评测 1. 产品定位与核心功能解析 iTVBoxFast作为TVBox生态中的二次开发版本,在保留原有开源框架优势的基础上,针对商业化运营需求进行了深度定制。从终端用户视角来看&#xff0…...

给车机开发者的CarPlay有线连接避坑指南:从USB枚举到NCM激活的完整流程解析

给车机开发者的CarPlay有线连接避坑指南:从USB枚举到NCM激活的完整流程解析 CarPlay作为苹果生态在车载场景的重要延伸,其有线连接方案在稳定性与延迟表现上仍具不可替代性。但实际开发中,从USB协议栈配置到NCM网络通道建立的全链路&#xff…...

Allwinner A523处理器解析:跨界SoC的性能与应用

1. Allwinner A523处理器深度解析:一款面向平板与嵌入式设备的全能型SoC Allwinner A523这颗八核Cortex-A55处理器最近在嵌入式圈子里引发了广泛讨论。作为深耕ARM架构开发多年的工程师,我认为这款SoC的定位非常巧妙——它既延续了全志在平板电脑市场的传…...

SRCT模型:随机共振耦合阈值原理与应用解析

1. SRCT模型基础解析 SRCT(Stochastic Resonance Coupled Threshold)模型是近年来非线性动力学领域的重要研究方向,它通过引入随机激励与阈值耦合机制,为复杂系统的临界行为分析提供了新的数学工具。我在研究电网稳定性问题时首次…...

ENVI Classic 裁剪避坑指南:别再让.shp文件只裁出个矩形框了!

ENVI Classic影像裁剪进阶指南:突破矩形框限制的实战技巧 引言 当你第一次使用ENVI Classic进行影像裁剪时,是否遇到过这样的困惑:明明已经导入了精细的.shp矢量边界文件,最终输出的结果却仍然是一个粗糙的矩形框?这种…...

QT开发实战:用QFileDialog搞定.dat文件解析与导出(附完整源码)

QT实战:从零构建.dat文件解析工具(QFileDialog深度应用) 在桌面应用开发中,文件操作是最基础也最频繁的需求之一。想象一下这样的场景:你手头有一批来自硬件设备的.dat格式原始数据文件,需要快速查看每个字…...

MCEL:提升量化神经网络容错性的边界优化方法

1. 量化神经网络容错性挑战与MCEL解决方案在边缘计算和物联网设备爆炸式增长的今天,量化神经网络(QNN)因其高效的计算特性和低内存占用,已成为嵌入式AI系统的首选方案。然而,这些设备常采用近似计算技术和低功耗内存,不可避免地会…...

告别格式工厂!用Python脚本一键批量转换微信silk语音为mp3(附源码)

用Python脚本一键批量转换微信silk语音为mp3 微信语音消息默认采用silk格式存储,这种专有编码在跨平台播放时常常遇到兼容性问题。传统解决方案依赖图形界面工具如格式工厂,不仅操作繁琐,批量处理时更是效率低下。本文将介绍如何用Python脚本…...