Algorithms: Bitmap算法

BNDM模式匹配算法 Backward Nondeterministic Dawg Matching algorithm 立即下载

基本概念

位图看名字像是一种数据结构,其实严格来说是解决问题的一种方式,用每一位代表一个数字,极大的减少了内存占用,位图算法在海量数据的处理中有较多的应用,比如海量数据查重、判断海量数据中个别元素是否存在等问题。

应用场景

以参考链接[1]中的问题为例:判断一个int型数据是否存在于40亿个不重复且无序的数据中,要求在占用内存不超过2G。
常规想法是将40亿个int数据存储下来,这样占用内存 4∗109∗4/1024/1024/1024=14.9G 。2G内存显然放不下,有人可能会想到将内存中数据存储到磁盘中分段读取判断,这不失为一个解决办法,但是众所周知磁盘I/O速度很慢。
这里可以应用位图算法的思想来解决,用1位代表一个数,这样一个int可以代表32个数,占用空间降为 4∗109/8/1024/1024=476.8M=14.9G/32 。易知,一个int型数组中,原本一个int元素(4个字节)只能代表一个数,用bitmap算法后一个int元素可以代表32个数,占用内存降为原来的 1/32 。完全符合题目要求,可在2G内存中完成数据的查找。
具体操作上,如何将一个十进制数映射到二进制bitmap上呢?
假如要存储的数字为n,可以开辟一个大小为int arr[1+n/32]的数组。数组每个元素表示:
arr[0]:0~31
arr[1]:32~63
……
相当于将N个数按照32为单位进行分段(每个元素即代表一段)存储,确定数字m存储在哪个元素:m/32,确定数字m存储在相应元素的哪个位置:m%32。

具体实现中涉及很多的位运算,这些位运算操作在以前的嵌入式C语言编程中操作寄存器时经常使用,比如讲某位清零、置一、左移右移等操作。

jdk中有相关的api类图可供直接调用。

参考资料:
1. http://blog.51cto.com/zengzhaozheng/1404108
2. http://blog.youkuaiyun.com/hguisu/article/details/7880288

IPMI的SOL (Serial Over LAN) 和 UART UART全名是Universal Asynchronous Receiver/Transmitter(通用異步接收/发送器),它是一个常用的異步串行传输协议。透过UART传输前,接收方须要先知道传输方的鲍率(Baud rate):单位时间内,讯号状态变化的次数。例如 115200 bps,表示每秒会传送115200个bits--> 因此读取率就是 1/115200=8.6微秒读取一次讯号。封包内的资料长度:通常是 8bits。 阅读详情

相关推荐

从零手写神经网络:用NumPy实现全连接网络与反向传播

神经网络本质上是可微分的函数复合体,其核心在于仿射变换与非线性激活的交替堆叠,以及基于链式法则的自动微分实现。理解前向传播的矩阵运算逻辑和反向传播的梯度流动机制,是掌握深度学习底层原理的关键路径。权重初始化(如He/Xavier)、激活函数选择(ReLU/Sigmoid)与数值稳定性处理(如1e-8防下溢)共同决定了训练的收敛性与鲁棒性。这些基础要素不仅支撑学术推导,更直接影响工业场景中的模型调试、FPGA部署及梯度异常定位。本文以纯NumPy实现三层全连接网络为载体,聚焦‘From Scratch’过程中

weixin_32495691的博客 286

海量数据处理算法—Bit-Map

1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些...

云计算? 633

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5345

BitMap算法

海量数据处理-BitMap算法 一、概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如BitMap解决海量数据寻找重复、判断个别元素是否在海量数据当中等问题.最后说说BitMap的特点已经在各个场景的使用性。 二、Bit-Map算法 先看看这样的一个场景:给一台普通PC,2G内存,要求处理一个包含40亿个不重复并且没有排过序的无符号的int整数,给出一个整数,问如果快速地判断这个整数是否在文件40亿个数据当中? 问题思考: 40亿个int占(40亿4)/1024/1024/

qq_40383147的博客 820

具身智能中的运动控制如何入门?

本文提出计算机视觉(CV)与强化学习(RL)结合的机器人运动控制学习路径。强调工程实践导向,建议采用"算法-机器人-工程"三阶段学习法:基础阶段掌握RL核心算法(PPO/SAC)和机器人动力学;进阶阶段聚焦Sim2Real技术(域随机化、模仿学习)和仿真环境搭建;深耕阶段结合CV优势开发视觉闭环控制等创新方向。特别指出应避免纯理论学习,提倡"最小知识原则"的实践模式,通过具体项目(如四足机器人控制)串联知识体系。推荐以《现代机器人学》等工具书为参考,配合开源框架(Pi

CyberSoma的博客 321

PyTorch深度学习实战(7)——批大小对神经网络训练的影响

在神经网络中,批( batch )是指一次输入网络进行训练或推断的一组样本。批处理( batch processing )是指将这一组样本同时输入网络进行计算的操作。本节中首先介绍批( Batch )的基本概念,并且介绍批大小在神经网络训练过程中的影响。

盼小辉丶的博客 1万+

字符串匹配常用算法

字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括暴力搜索(Brute force),KMP, BM(Boyer Moore), sunday, robin-karp 以及 bitap。下面分析这几种方法并给出其实现。假设原字符串长度M,字串长度为N。1. Brute force.该方法又称暴力搜索,也是最容易想到的方法。预处理时间 O(0)匹配

meixr的专栏 7535

Python全栈入门到实战【基础篇 19】函数进阶:默认参数、递归函数与偏函数应用

本文深入探讨Python函数进阶的三大核心知识:默认参数、递归函数与偏函数。针对默认参数,揭示了可变对象作为默认值的陷阱,提出使用None替代的方案;解析递归函数的三大要素(终止条件、递归调用、问题拆解),并通过阶乘和斐波那契数列示例演示实现方法,同时给出尾递归和缓存装饰器两种优化策略;最后介绍偏函数如何通过functools.partial固化参数简化调用。这些技巧能显著提升函数在复杂场景下的灵活性与复用性,帮助开发者编写更高效的Python代码。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3864

什么是字符串匹配算法?常见的字符串匹配算法有哪些?

字符串匹配算法是用于在一个文本字符串中查找特定模式字符串的算法。这些算法在计算机科学中具有广泛的应用,包括文本搜索、信息检索、数据处理、编译器和字符串处理等领域。其基本问题可以形式化为:给定一个文本字符串 TT 和一个模式字符串 PP,要找到 PP 在 TT 中的所有匹配位置或找到第一个匹配位置。:这是最简单的字符串匹配算法,通过逐个字符比较来查找模式串在文本中的位置。时间复杂度为 O(mn)O(mn),其中 mm 是模式串长度,nn 是文本串长度。

破损的天堂鸟博客 1070

Transformer 面试题及详细答案120道(1-10)-- 基础概念

本文总结了Transformer模型的10个常见面试问题及答案,涵盖了其核心结构、创新点、工作机制等关键知识点。主要内容包括:Transformer的自注意力机制和多头注意力机制创新点,相比RNN/CNN的优势,模型在《Attention Is All You Need》论文中的提出背景,以及Encoder-Decoder协同工作流程等。重点解析了位置编码的作用、长距离依赖处理能力、与传统注意力机制的区别等核心问题。每个问题都给出了简明扼要的专业解答,适合作为Transformer相关面试准备的参考资料。

大剑师兰特的GIS世界 849

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1359

开源项目实战指南:Diff-Match-Patch简易安装与配置

开源项目实战指南:Diff-Match-Patch简易安装与配置 项目基础介绍与编程语言 项目名称: Diff-Match-Patch 编程语言: 主要实现包括JavaScript在内的多种语言版本(如C++, C#, Dart, Java, Lua, Objective-C, Python等)。本指南以JavaScript为例进行说明,适合网页开发者或Node.js环境使用者。 项目简介: Di...

gitblog_07013的博客 946

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

Algorithms_算法专项_Bitmap原理及应用

文章目录引导案例bitmap 引导案例 Q: 如何在3亿个整数, 每个整数的范围是 0到2亿,判断一个数是否存在。 要求内存使用在500M以内,一台主机。 思考下… 数组? hash ? 分治? bitmap ? 布隆过滤器 ? 用数组的话 , 开辟个data[2亿]长度的数组, data[1]=1 表示存在,data[2]=0表示不存在。 理论上可行,但是内存肯定超过了500M, 不...

小工匠 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Learn-Algorithms 之 Bitmap 位图法:用 1 个 bit 解决海量数据的去重、存在性判断与排序

在 Learn-Algorithms 仓库的「91 Algorithms In Big Data」目录中,[Bitmap.md](https://link.gitcode.com/i/4811657af756781009755d467d33eca0) 记录了海量数据处理中最基础也最实用的一类技巧——位图法(Bitmap):用 1 个(或几个)bit 位来标记某个元素对应的 value,从而以极小内

gitblog_00005的博客 478

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

基数估计算法(一):Flajolet-Martin算法

写作不易,转载请注明出处: http://blog.youkuaiyun.com/wbin233/article/details/78730977 简介说起基数估计算法的始祖,或许就是由Flajolet和Martin大佬发表的论文《 Probabilistic counting algorithms for data base applications 》开始的吧。他们提出在大数据中基于概率来估计基数的算法,江湖人称FM算法。

wbin233的博客 8691

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Learn-Algorithms 算法学习笔记:从基础数据结构到面试刷题的完整学习路线

本仓库是一份以"亲手实现 + 源码印证 + 持续刷题"为主线的算法学习笔记合集,覆盖链表、树、图、排序、查找等基础数据结构,以及递归、分治、动态规划等算法设计思想,并延伸至面试真题、海量数据处理与开源项目中的算法应用。读完本文,你将掌握本仓库的目录脉络、每个模块的核心知识点与对应源码位置,并可直接按此路线规划自己的算法学习与面试准备。 ## 学习方法:把算法"写"出来而不是"看"出来 仓库在

gitblog_00058的博客 260

Hash映射与分而治之:Learn-Algorithms 中海量数据拆分的核心算法笔记

在数据量远超内存承载能力时,"大而化小、分而治之"是唯一的空间破解之道,而 **Hash 映射**正是实现这一拆分的关键工具。本指南以 Learn-Algorithms 仓库中《Hash映射,分而治之》笔记为核心,系统讲解哈希映射的定义、哈希函数设计与取模分片流程,并结合仓库内"海量日志统计访问最多 IP"的完整实战案例与 C 源码,帮助读者掌握将大文件拆分为可独立处理的小文件、再逐块统计归并的完

gitblog_00343的博客 455

Learn-Algorithms 海量数据解题基石:Hash 映射与分而治之实战指南

> 本仓库以算法学习笔记为核心,本文是其中「91 Algorithms In Big Data」模块的重要一环。当数据量超出单机内存、单文件超出可处理范围时,**Hash 映射 + 分而治之**是公认的首选策略:先用哈希把大问题切成互不干扰的小问题,再逐个击破、最后归并。读完本文,你将掌握字符串哈希函数的原理与写法、`hash(R)%M` 分桶拆文件的完整流程、与 Bitmap / 堆 / 外排序

gitblog_00428的博客 275

海量数据处理实战指南:分治、Bitmap、Bloom Filter、外排序等十大经典套路与面试真题全解

> 本文是 Learn-Algorithms 仓库中 [海量数据处理](https://link.gitcode.com/i/271f00a0525a440da0e6e0a2373de309) 笔记的完整展开。当数据量大到"时间上算不完、空间上装不下"时,本指南将带你掌握一套可复用的解题框架——先估算数据规模,再按"Hash 映射 + 分而治之"切小问题,用 hash_map / Trie 树 /

gitblog_00580的博客 1001

Learn-Algorithms 海量数据算法解析:双层桶划分的分治思想与内存受限下的 Top-K、中位数求解

本文聚焦于 Learn-Algorithms 仓库中 [双层桶划分](https://link.gitcode.com/i/f669c3cb4f93247a2868b90faf32f93f) 一文的完整技术脉络。当数据规模超过内存容量、无法一次性载入处理时,双层桶划分提供了一套"大而化小、分而治之"的通用思路:先把全域数据按值域切成若干小段(桶/文件),再对每个小段逐一解决。读者读完本文后,将掌握

gitblog_00432的博客 401

Go 面试经典算法三题精讲:双指针求和、股票最大利润与 40 亿整数判存在(TalkGo 面试专题)

本篇文章以 TalkGo 夜读仓库面试专题 [interview-algorithm.md](https://link.gitcode.com/i/aecb515c0d57881d609f07cba3e6910a) 为骨架,精讲三道高频 Go 面试算法题:在有序数组中用双指针找两数之和、股票买卖的最大利润(单次与多次交易)、以及 40 亿个整数中快速判存在的大数据问题。读完你将掌握每道题的思路推导

gitblog_00706的博客 702

Learn-Algorithms 海量数据处理实战:分布处理之 MapReduce 原理与 Hadoop 生态

MapReduce 是 Google 提出的并行计算软件架构,专门面向超过 1TB 量级的大规模数据集;它的核心思想——map(映射)与 reduce(归纳)——借鉴自函数式编程语言,其价值在于让不熟悉并行编程的程序员也能发挥分布式系统的威力。本文以仓库 [91 Algorithms In Big Data](https://link.gitcode.com/i/ef68cca31309f7c0b

gitblog_01127的博客 549

查找算法全攻略:顺序查找、二分查找、分块查找、动态查找与哈希表(Learn-Algorithms 项目实战笔记)

**导读**:查找(Search)是算法体系中与排序并列的两大基础操作之一,几乎所有数据库索引、缓存系统与检索引擎的底层都建立在查找算法的设计之上。本文以 Learn-Algorithms 仓库的 [7 Search/README.md](https://link.gitcode.com/i/cd7473e29fd556e36f9d7069007b6368) 为骨架,系统讲解顺序查找、二分查找(含

gitblog_00386的博客 193

倒排索引(Inverted Index)详解:文档检索与关键词查询的基石 —— Learn-Algorithms 算法笔记

倒排索引(Inverted Index,又称反向索引)是全文检索系统中最常用的数据结构,它把"文档 → 关键词"的常规映射反转为"关键词 → 包含它的文档集合",从而让"查询哪些文档包含某个单词"这类问题可以在毫秒级完成。本篇文章以 Learn-Algorithms 仓库中 倒排索引(Inverted Index).md.md) 为核心,结合仓库内关于 [数据库索引](https://link.g

gitblog_00634的博客 430

Learn-Algorithms 布隆过滤器(Bloom Filter)深度解析:海量数据去重与缓存防穿透的工程实践

布隆过滤器(Bloom Filter)是 Bloom 于 1970 年提出的一种基于**多哈希函数映射**的快速查找算法,广泛用于海量数据处理场景中"判断某元素是否属于集合"且**允许小概率误判**的需求。本文以 [Bloomfilter.md](https://link.gitcode.com/i/a56846c0a59b2047498dc67748ebe628) 为核心,结合本仓库中 [海量数

gitblog_01078的博客 337
上一篇: MySQL Design: 三大范式
下一篇: Design Pattern 5: Chain of Responsibility
HackerDotCn
博客等级 码龄11年 3粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值