位图法在实际项目中的运用

海量数据处理——位图法bitmap 阅读详情

位图法即bitmap算法,实际是用每一位来存放某种状态。在项目中运用的比较多,常常用于位图法将某些运行过程中的关键步骤记录下来,便于后期运行过程定位跟踪。位图法也常常用于处理大数据,比如用1个int32类型的变量可以表示0~31,如果用常见的int32类型来表示这些数据,则需要32个int类型的变量表示,这极大地浪费了内存。一般来说0~A范围内的数据可以用A/32 int类型大小的数组表示,下面是其实现代码:

//============================================================================
// Name        : bitmap演示程序
// Author      : @CodingGeek
// Version     : 1.0
// Copyright   : Your copyright notice
// Description :bitmap的UINT32代码示例
//============================================================================
#include <stdio.h>

#define bitmap_set(puiBitmap, A) puiBitmap[(A)/32] |= (1UL << ((A) & 31))
#define bitmap_unset(puiBitmap, A) puiBitmap[(A)/32] &= ~(1UL << ((A) & 31))

void testBitmap(void)
{
	unsigned int uiBitmap[32] = {0};
	for (int i = 32; i < 128; i++)
	{
		bitmap_set(uiBitmap, i);
	}

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 32; j++)
		{
			if (uiBitmap[i]>>(j) & 0x1)
			{
				printf("%d\n", i * 32 + j);
			}
		}
	}

	printf("****************************\n");

	for (int i = 64; i < 96; i++)
	{
		bitmap_unset(uiBitmap, i);
	}

	for (int i = 0; i < 4; i++)
		{
			for (int j = 0; j < 32; j++)
			{
				if (uiBitmap[i]>>(j) & 0x1)
				{
					printf("%d\n", i * 32 + j);
				}
			}
		}
}




int main(void)
{
    testBitmap();
    return 0;
}


关于Kswapd的理解(一) 关于Kswapd的理解(一) 之前跟踪了MemAvailable的计算方式,其中watermark的计算花了很多精力,在学习的过程中看到一些资料中说watermark是给swapd使用的,于是乎,研究一下看看咯 本部分主要记录两个方面: 对于kswapd这个东西,从初学者(我)的角度出发会考虑哪些内容? 跟踪kswapd 初始化结构部分; 1. KSwapd机制 上图是还没有跟踪kswapd code的时候,对自己提出的一些疑问和自身的理解,主要是如下内容: kswapd 机制用来做什么:内存不足时 阅读详情

相关推荐

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

记一次位图在项目中的真实应用

选品筛选结果聚合减小内存占用实现思路 (1)why:随着选品接的需求越来越多,每一层标签条件请求ES获取到结果集在进行聚合时,有可能 结果集占用内存比较大,导致系统阻塞。 这样,在每一个结果集在进行逻辑运算时,压缩内存的占用就显的很有必要了。 (2) how to do: 二进制位运算概览: (3)BitSet也既是位图的引入: 比如:两个复杂标签请求ES的结果返回两个List<wmPoiId>,把这个两个list映射到对应的位图上进行逻辑运算 (4)BitSet位图的优势.

jack_shuai的博客 407

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第二篇)软硬件参数调试

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第二篇) 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大。能引用K大的成果也是自己的荣幸,不便之处还请K大多多包涵,在此引用只是为方便自己日常学习,部分参数表里根据自身情况,增加了修改环节和相应参数。 垂直起降固定翼 中文教程-参数设置 垂直起降固定翼是由 多轴+...

u011322358的博客 2万+

编程珠玑--位图法排序

位图法是《编程珠玑》第一章中出现的磁盘排序算法。   题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复。求如何将这n个正整数升序排列。 约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。   分析:这个题目的最大亮点是只有1MB的内存空间,我们可以通过计算得出,内存只有1MB可以储存的int(4byte)有10^3*10^3/4=250 0...

weixin_34129696的博客 221

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 504

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

位图应用场合

位图主要用于快速检索关键字状态,通常要求关键字是一个连续的序列(或者关键字是一个连续序列中的大部分), 最基本的情况,使用1bit标示一个关键字的状态(可标示两种状态),但根据需要也可以使用2bit(标示4种状态),3bit(标示8种状态),当一个状态标示需要的位数达到32bit时,就演变成来一个整型数组了。 位图的主要应用场合:标示连续(或接近连续,即大部分会出现)的关键字序列的状态(状态数...

weixin_30708329的博客 498

小土堆学习笔记1:Dataset类代码实践

上一页中反复提到“类”,这究竟是什么东西?按我的理解(肯定不准确也不正式),class类就是某一个东西的共性,而且是等待被确认的共性。比如每台手机都有它自己的品牌、框架、价格等等属性,class类正是这些尚不确定的属性;而一旦确认了这些属性,就能够确认这到底是一台什么型号什么状态的手机,在确认了全部属性后就知道,这是一台Apple 16 Pro Max。抽象的不确定的共性就是类,具体的确定的个性就是示例。这个共性可以被用于多个编程目的,只不过某一个具体的编程行为还有它自己的独特性。

qq_40525602的博客 1625

深入探索位图技术:原理及应用

虽然位图在图形处理中也常被提及,但在此上下文中,我们需要明确区分两种不同类型的“位图”:一种是数据结构中的位图,如上所述,它主要用于数据的高效存储和检索;当我们要标记第n个数据元素是否存在时,我们只需要找到对应的整数(通过n除以32得到整数索引),然后在该整数中找到对应的二进制位(通过n对32取余得到位索引),并将其设置为0或1。在上面的例子中,如果使用一个整型数组来存储集合中的元素,每个整数需要4个字节(假设是32位系统),那么存储1亿个整数需要大约400MB的空间。如果是1,表示该整数存在于集合中;

无敌岩雀的博客 2218

优秀的 Verilog/FPGA开源项目介绍(六)- MIPI

MIPI的协议我就不详细介绍了(可以查看<下面的二维码>),这里和开源方案比较接近的即使FPGA实现MIPI物理层(DPHY)中电气属性相关的几种方案:MIPI DPHY RX...

OpenFPGA的博客 4455

PCL 读取和保存点云

PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

纵马踏花向自由 1737

一文带你全面了解和使用位图

位图(Bitmap)作为位运算的经典应用之一,通过巧妙地利用二进制位来表示数据的存在性或状态,实现了对大规模数据的高效存储与处理,从海量数据去重、数据压缩,到高效的查找与统计,位图以其独特的优势被广泛使用。本文我将全面探讨位图的原理、构建方法、操作技巧等要点,并结合Java代码实现,带您全面掌握这一强大的技术

1777

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 182

大数据常用技巧之位图法

大数据常用技巧之位图法介绍位图的基本概念是用一个位(bit)来标记某个数据的存放状态,由于采用了位为单位来存放数据,所以节省了大量的空间。举个具体的例子,在Java中一般一个int数字要占用32位,如果能用一位就表示这个数,就可以缩减大量的存储空间。一般把这种方法称为位图法,即Bitmap。BitSet正因为位图运算在空间方面的优越性,很多语言都有直接对它的支持。如在C++的STL库中就有一个bit

DRFish 1万+

老版QQ原生表情gif动态

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

精雕软件(JDpaint) 5.5 绿色版

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

数据结构:位图法(bitmap||BMP)

一、定义        位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。在STL中有一个bitset容器,引用bitset介绍: A bitset is a special container class that is designed to store bits (elements

迎着朝阳起飞的专栏 1624

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

位图法的问题之求解磁盘块对应位图的位所在之处

问:文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的32~127号块中,每个盘块占1024B,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则位图中要修改的位所在的盘块号和块内字节序号分别是(C)。 A. 81,1 B. 81,2 C. 82,1 C. 82,2 解:从题可知,位图是存于(32~127号磁盘块),...

hehe_www2012的博客 5599

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深入学习Redis之redis的实际运用

redis的实际运用 key设计原则 把表名转换为key前缀 如, tag: 第2段放置用于区分区key的字段–对应mysql中的主键的列名,如userid 第3段放置主键值,如2,3,4…, a , b ,c 第4段,写要存储的列名 #分布式集群中 对user:userid:9 进行hash保证同key在一个节点中 set user:userid:9:username lisi set ...

蹊源的奇思妙想的博客 2043

网络测量常见算法之二:虚拟位图法

(按:这个算法的意思没看大懂,先写出来,欢迎各位批评指正!)    书接前文,虚拟位图法为改进直接位图法内存使用过大的缺陷提出。基本思想是,仅存贮直接位图的一小部分,根据这一小部分的计数值推测总的计数值。    什么意思呢?我的理解是,假设以源/目的地址作为FLOW_ID,则统计空间为264。采用直接位图算法时,设位图长度为226bit=8M,空间浪费大,但取太小的值可能HASH碰撞会加剧,影响统计结果准确度。此时采用虚拟位图算法,取长度为220bit=128k,大小为直接位图法的1/64在计数时,HASH

homeryan2010的专栏 714

如何统计不同电话号码的个数?—位图法

有人说遍历,使用HashSet或者int数组来存储,这里先不谈算法效率的问题,这100亿数据如何在能否在内存中放下也是一个问题。如果用int类型来存储这100亿个电话号码,那么就需要 100亿 * 4字节 = 37GB ≈ 40GB。所以这些方法行不通的根本原因实际上是内存不够。

SevenCoding的博客 1876

操作系统内存管理:位图法在页式存储中的实际应用与优化技巧

本文深入探讨了位图法在操作系统页式存储管理中的核心应用与优化策略。文章从计算机考研408的经典考点出发,详细解析了位图的空间计算原理、高效查找算法,并扩展到文件系统、数据库等实战场景。同时,提供了分层位图、缓存优化、硬件指令加速及并发处理等关键技巧,帮助开发者构建稳定高效的内存管理系统。

weixin_29281941的博客 113

海量数据处理:巧用位图法(BitMap)解决100MB内存下亿级整数快速查询难题

面对这个问题,传统的解决方案,如哈希表(Hash Table)或直接排序,都会因巨大的内存开销而被立刻否决。具体来说,我们可以创建一个足够大的 bit 数组,数组的**每个索引(index)**都直接对应一个整数值。通过这种方式,我们用一个 bit 的状态(0 或 1)来表示一个整数的存在与否,极大地压缩了存储空间。因此,位图法不仅是解决此类问题的最优方案,也为我们处理类似的数据密集型场景提供了高效、可靠的设计思路。的内存,远低于题目要求的 100MB 限制,方案可行!面对在严格内存限制下对。

冷脸萌萌的技术实践 1339

位图法的应用

所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。   例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示。那么就可以开一个int数组,一个int有32个位,就可以表示32个人。操作的时候可以使用位操作。 位图法应用   一、给40亿个不重复的unsigned int的整数

charles的专栏 954

位图法处理海量数据常见使用

位图法处理海量数据常见使用

u010846873的博客 1387

redis实际应用位图法统计活跃用户

场景:1. 1亿用户,用户有频繁登陆的,有不经常登陆的、 2.如何记录用户的登陆信息 3.如何来查询活跃用户,【如1周内登陆3次的】解决思路: 用位图法来进行解决。登陆的用户为1,没有登陆的用户为0 Log0721: ‘011001……………0’…… log0726 : ‘011001……………0’ Log0727 : ‘01100

song5749的专栏 2689

位图法统计活跃用户

Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活跃用户: 连续7天活动每月评,等等... 思路: Userid dt active1 2013-07-27 11 2013-0726 1 如果是放在表中, 1:表急剧增大,2:要用group ,sum运算,计算较慢 用: 位图法 ...

weixin_34292959的博客 448

海量数据去重排序--bitmap(位图法)在java中的实现的两种方法

在海量数据中查找出重复出现的元素或者去除重复出现的元素是面试中常考的文图。针对此类问题,可以使用位图法来解决。例如:已知某个文件内包含若干个电话号码,要求统计不同的号码的个数,甚至在O(n)时间复杂度内对这些号码进行排序。位图法需要的空间很少(依赖于数据分布,但是我们也可以通过一些放啊发对数据进行处理,使得数据变得密集),在数据比较密集的时候效率非常高。例如:8位整数可以表示的最大十进制数值为999

gaven的博客 1万+
上一篇: 分治法在算法设计中的运用
下一篇: C语言实现C++面向对象语言多态特性
CodingGeek
博客等级 码龄1天 15粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值