`
x10232
  • 浏览: 55415 次
  • 来自: 北京
社区版块
存档分类
最新评论

位图应用场合

    博客分类:
  • Java
 
阅读更多

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

 

位图的主要应用场合:标示连续(或接近连续,即大部分会出现)的关键字序列的状态(状态数/关键字个数越小越好)。位图还可以用于实现诸如BloomFilter(用于快速判断一个元素是否属于某个集合)等扩展结构,这里只讨论纯位图的应用场景。

 

应用场景1:磁盘空闲块的管理

Ext3文件系统中使用位图来管理磁盘空闲块(空闲inode节点)。文件系统创建后,该文件系统拥有的块数以及inode节点数都是确定的,数据块区包含一系列连续的块(块号是连续的),于是可以用位图来标示数据块的分配状态(分配、未分配两种状态,1bit即可标示)。

 

如下图,假设ext3的数据块从128开始,一直到1024,则需要1024-128 = 996bit = 128字节的位图空间。如下图,第1bit标示128号块已经被分配,第2bit标示129号块未被分配,依次类推。使用位图的高效性在于:1bit标示状态,节省存储空间,通过关键字来定位位图(偏移是固定的),效率高。

 

1

0

1

1

….

 

 

应用场景2:区域服务器路由

腾讯的QQ号用一个数字标示,范围从020亿,每个QQ号都有可能出现,所有的QQ号被分散的存储北京、上海、深圳、武汉四个城市的服务器中,现在需要一个路由服务器快速的将登陆的QQ路由到正确的服务器,路由服务器可以读取四个QQ服务器的数据,并构建路由表(需全部存在内存中,内存限制1G),路由表该如何存储?

关键:QQ号从0-20亿,每个号码都有可能出现;服务器通过0123标示,这四种状态可以用2bit来标示,于是可以考虑使用位图来描述路由表。

解法:0~20亿,为每个QQ号分配2bit,路由服务器从QQ服务器中获取信息,并设置QQ于服务器号的对应关系。当QQ登录时,路由服务器根据QQ号定位到其对应的状态,并返回对应的服务器号。总的内存大小20亿 * 2 /8 = 5亿字节(约为0.5G)

 

应用场景3:高效排序

数据库里存了很多800电话号码,数量特别大,以至于内存放不下,如何排序,时间比空间更重要?电话号码类似于800-810-5555

关键:去掉电话号码的800后面就是7位的十进制整数,每个整数都有可能出现而且不会重复出现,可以采用各种排序算法对这些数据进行排序,但时间复杂度都在O(NlogN)及以上。

解法:因每个七位以内的整数都有可能出现,可以用1bit来标示电话号是否出现,遍历整个电话号序列,设置相应的位,遍历位图收集位被设置的号码即可。

扩展:对 于上述问题,每个电话号码最多出现一次,如果关键字可能多次重复出现,但关键字范围比较确定且很集中的情况下,也可使用位图(根据关键字最多可能出现的次 数确定每个关键字需要的位数),但此时的位图通常会是一个整型数组,数组内容为对应位置关键字出现的次数,在执行收集过程时,对于每个关键字要收集多次 (根据数组的值确定)。如有一大批职工的年龄信息,需要对这些职工按照年龄信息进行排序,则只需要建立一个长度为100的数组,每个数组为对应年龄人的个数,扫描一遍数组,收集年龄信息即可。

分享到:
评论

相关推荐

    OpenGL 基础教程

     9.2.3 两种模式应用场合  9.3 颜色应用举例  第十章 OpenGL光照  10.1 真实感图形基本概念  10.2 光照模型  10.2.1 简单光照模型  10.2.2 OpenGL光组成  10.2.3 创建光源  10.2.4 启动光照  10.3 明暗...

    OpenGL基础图形编程

     9.2.3 两种模式应用场合  9.3 颜色应用举例  第十章 OpenGL光照  10.1 真实感图形基本概念  10.2 光照模型  10.2.1 简单光照模型  10.2.2 OpenGL光组成  10.2.3 创建光源  10.2.4 启动光照  10.3 明暗...

    OpenGL图形开发指南(0fen)

    第九章 OpenGL颜色 9.1 计算机颜色 9.1.1 颜色生成原理 9.1.2 RGB色立体 9.2 颜色模式 9.2.1 RGBA模式 9.2.2 颜色表模式 9.2.3 两种模式应用场合 9.3 颜色应用举例 第十章 OpenGL光照 10.1 真实感图形基本...

    Gif录制神器.zip

    图文素材专用桌面便捷软件【GIF的全称是Graphics Interchange Format,可译为图形交换格式,用于以超文本标志语言(Hypertext Markup Language)方式显示索引彩色图像,在因特网和其他在线服务系统上得到广泛应用。...

    葵花桌面直播录像系统

    ===== 应用场合 ===== 1、把软件的操作演示制作成高压缩格式的影像文件。帮助用户学习使用您发布的软件; 2、在教学上,教学机上装一个服务系统,在后台运行,把教师的操作和评讲直接直播到客户机上,学生既可...

    虚拟雕塑软件JDVirs 1.0帮助文件

    4. 三种操作模式可用于三种不同的场合, 单模型整体操作模式可用于顶点数较少的模型, 单模型局部操作模式可用于顶点数较多的模型或机器速度较慢的场合, 多模型多分辨率操作模式可用于模型一个或多个局部要求比较精细...

    LightGUI一个轻量级的GUI

    Light Gui使用的场合: 需要使用图形库快速实现自有风格的嵌入式设备,比如消费电子设备的二次开发,UI设计。 需要使用Light Gui特性的window程序设计。 Light Gui的商业模式: Light Gui是商业收费软件。 提供...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以...

    Visual C++ 编程资源大全(源码 控件)

    这个类是你所需的,下载一个回去试试,分析分析一定会有收获(85KB)<END><br>16,flat_comb.zip 你有没有想过在你的应用程序中加入"浮动"的组合框,就象Microsoft Office中的那样?用这个类就能轻松搞定(21KB)<END>...

    Android学习系列教程实例.pdf

    1.2.1. 应用程序层 ............................ 12 1.2.2. 应用程序框架层 .................... 13 1.2.3. 系统运行库层: ....................... 13 1.2.4. Linux 内核层 .......................... 15 1.3. ...

    易语言程序免安装版下载

    修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。 9. 修改扩展界面支持库三,解决高级选择夹会导致所在窗口的收不到“首次激活”事件的...

Global site tag (gtag.js) - Google Analytics