介绍
(20120511)位图就是通过将数组下标与应用中的一些值关联,数组中该下标所指定的位置上的元素可以用来标识应用中值的情况(是否存在 or 数目 or 。。。)。
位图中的值可以是计数、标识(如例1)。
可以运用在快速查找、排重、删除?、排序、压缩数据等。
实现
不同语言版本
相关应用
压缩
排序
例:有1000,0000个数,如果想对这些数排序,并且想尽量少用内存,该如何设计数据结构和排序算法?
方案1 :采用32Bitmap(即容量为1000,1000/32,每个元素为32bit)位图中元素为整型32bit(下标为0-31),位图中元素可以存储相邻32个数是否存在的信息。例如89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1。89257 mod 32=2789…9,设置a[2789]中元素的第9位为1。在将1000,0000个数都存入位图后,然后进行排序,遍历位图,将元素通过 ”位操作“还原为原值,输出。
注:来自http://blog.csdn.net/QIBAOYUAN/article/details/5914662 ,该文利用位图实现了压缩和排序,压缩体现在位图中每个元素为32位,将某个数与32取模,将取模后值对应到32位中的某位上设置为1,这样,32位就能保存相邻的32个数是否存在的信息。这样位图的大小就可以缩小到10000000/32.
搜索
例1:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
例2:在Map3搜索例子中,通过将url的个数存储在bitmap中,可以通过歌曲id来快速找到歌曲url个数。
http://tech.techweb.com.cn/thread-222923-1-1.html
例3:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
最简单的方法就是将这40亿个整数载入到数组中,然后遍历,看给定的数是否在这个数组中。但这是一个非常粗糙的方法,没有考虑存储空间和搜索效率问题。
可以考虑快速排序+二分查找,但是内存占用还是很大,并且如果40亿数据还有增加,涉及重排序。能不能有一种结构不用排序,占用内存比较少,面对增量数据也能从容应对呢?——bitmap
构建一个bitmap,元素为1bit(0表示无,1表示有),遍历40亿数据,设置bitmap里相应位置上元素值为1,搜索时只要根据目标值去bitmap里查找该位置上元素即可。
设计搜索剪枝时,需要保存已经搜索过的历史信息,有些情况下,可以使用位图减小历史信息数据所占空间。
扩展
Bloom filter
参考阅读
1. http://dongxicheng.org/structure/bitmap/
C++的STL中有bitmap类/
分享到:
相关推荐
BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP位图数据结构BMP...
位图(Bitmap)是一种重要的数据结构,广泛应用于索引、数据压缩以及各种算法优化。它的核心概念是用二进制位来表示特定的信息,每个位(bit)的状态可以是0或1,分别代表两种不同的状态,例如真与假、存在与不存在...
Linux 内核数据结构:位图(Bitmap) Linux 内核数据结构:位图(Bitmap) 位图是一种常用的数据结构,在 Linux 内核中大量使用。位图可以用来存储系统在线/离线处理器,来支持(CPU)热插拔;再比如,位图在 ...
### BMP位图数据结构详解 #### 一、概述 BMP是一种常见的图像文件格式,在Windows系统中被广泛应用。它的全称是Bitmap或者DIB(Device-Independent Bitmap,设备无关位图),这种格式的特点是无损压缩,即在保存...
BMP位图数据结构是计算机图形学中一种广泛使用的图像文件格式,主要在Windows操作系统及其应用程序中使用。本文将深入探讨BMP文件的结构、组成元素以及如何解析和操作这种格式。 BMP(Bitmap)是一种未经压缩的图像...
数据结构在计算机科学中扮演着至关重要的角色,它是构建高效软件和系统的基础。这个主题主要关注如何有效地存储和处理数据,以便在各种操作中优化性能。以下是对标题、描述和标签内容的详细展开: 1. **数据结构的...
位图数据结构是一种以位为单位的存储结构,它在处理有限定义域内的稠密集合排序问题时,能极大提升排序效率,减少内存消耗。当需要排序的数据具有稀疏性,即数据值的范围远大于数据集合中不同值的数量时,位图数据...
Java图数据结构
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。 其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORDbf Type; // 位图文件的类型,必须为BMP(0-1字节) DWORD bfSize; /...
通过上述步骤,我们可以成功地从文件中读取24位BMP位图,并将其转换为可操作的数据结构。这个过程对于任何涉及图像处理的项目都至关重要,无论是简单的显示图像还是复杂的图像分析算法,都需要从文件中正确读取原始...
位图算法(BitMap)是一种高效的数据结构,主要用于快速查询和存储大规模数据。下面将详细介绍 C# 中如何实现位图算法(BitMap)。 什么是 BitMap BitMap 的基本思想就是用一个 bit 位来标记某个元素对应的 Value...
这些信息是创建位图对象的关键,因为我们需要这些数据来正确地初始化位图对象。 创建位图对象通常涉及以下几个步骤: 1. **读取BMP文件头**:程序需要解析BMP文件的头信息,这包括文件头(BFH)和位图信息头(BIH...
例如,声明`GetDIBits`函数时,需要指定其输入参数如位图句柄、位图信息结构指针、开始行号、缓冲区大小等,然后在程序合适的地方调用这个函数,传入相应的参数,以获取位图数据。 在资源下载部分,`content.txt`...
通过以上分析,我们可以看到数据结构的学习不仅仅涉及到具体的数据结构类型(如线性表、栈、队列等),更重要的是理解各种数据结构背后的逻辑结构和存储结构,以及它们之间的关系。这对于学习和掌握高级数据结构算法...
### 位图的数据结构 #### 一、位图文件的组成与结构 位图文件(BMP文件)是一种常见的图像存储格式,在计算机图形学中占有重要地位。它以一种非常直接的方式存储图像信息,便于处理和理解。一个完整的BMP文件主要...
位图结构通常包含宽度、高度、颜色位深度等信息,以及实际的像素数据。 首先,`GetR`、`GetG`和`GetB`这三个函数或方法是用来提取像素的红色、绿色和蓝色分量的。在位图中,每个像素的颜色由红、绿、蓝三种颜色通道...
本篇文章将深入探讨Go语言中的一些基础数据结构封装,包括树(Tree)和位图(Bitmap),以及它们在实际编程中的应用。 一、树数据结构 1. 树的基本概念:树是一种非线性的数据结构,由节点(Vertex)和边(Edge)...
本篇将深入探讨Python中的四种常见数据结构:树、栈、队列以及Bitmap(位图),并结合实例进行解析。 首先,我们来讨论树数据结构。树是一种非线性的数据结构,它由节点(或称为顶点)和边组成,每个节点可以有零个...
【BMP位图的结构和操作】 BMP(Bitmap File)是Windows操作系统广泛使用的图形文件格式,它在Windows环境中被所有图像处理软件所支持。BMP文件格式的基础是位图,位图是一种像素阵列,其中每个像素都有自己的颜色值...