数据结构——bitmap】的更多相关文章

近期在看<编程珠玑>这本书. 第1章中引入了bitmap(位图)的数据结构. 曾经没有接触过, 抽出时间研究了一下,记录下来. 书中描写叙述的情景: 1. 最多1000万个7位数电话号码(号码不反复,实际大概800万个),保存在文本中 2. 每隔一段时间要对号码进行排序 3.程序模块最多可用1M Bytes的内存, 磁盘空间充足 分析: 通常方案:7位电话号码能够用uint32_t (4个字节)来存储,  4 * 8 * 10^6 Bytes约为32M Bytes.一次性排序显然内存不满足.…
#include <stdio.h> #include <stdlib.h> #define MAX_PRIO 10000 #define BITS_PER_LONG 32 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define BIT(nr) (1UL << (nr)) #define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) #define BIT…
这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html   读书不是目的,关键在于思考.   很早就在水木上看到有人推荐<The C Programming Language>这本书,一直都没看,开学一个月就专心拜读了一下,并认真做了课后习题.读来收获不少,主要有两点:一是加深了自己对一些基础知识的理 解和感悟:二是从中学到了一些不错的编程风格和设计思想,这些东西虽看起来不起眼但细细嚼来还是很值得学习的.下面就从四个…
本篇分析bitmap的数据结构的设计,并基于此分析bitmap的工作机制. 为了后面更清楚的理解,先有个总体印象,给出整体的结构图: 在下面的描述中涉及到的内容可以对照到上图中相应部分,便于理解. 首先,我们从宏观的角度来分析整体结构.bitmap file存在于磁盘,内部存放着很多个bit,每个bit对应于磁盘数据中的一个chunk.在内存空间中也存在一个区域存放bitmap file缓存,与磁盘bitmap file的每个bit一一对应.内存空间中还存在一个区域存放filemap_attr,…
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对应一个非负数n,如果n存在,则对应的二进制位的值为1,否则为0.这个时候,我们的第一个问题:我们在使用byte,int,short,long等这些数据类型在存储数据的时候,他们最小的都要占用一个字节的内存,也就是8个bit,也就是说,最小的操作单位是8个bit.根本就没有可以一个一个bit位操作的数…
注: 本文由 LCTT 原创翻译,Linux中国 荣誉推出 Linux 内核中的位数组和位操作 除了不同的基于链式和树的数据结构以外,Linux 内核也为位数组(或称为位图(bitmap))提供了 API.位数组在 Linux 内核里被广泛使用,并且在以下的源代码文件中包含了与这样的结构搭配使用的通用 API: lib/bitmap.c include/linux/bitmap.h 除了这两个文件之外,还有体系结构特定的头文件,它们为特定的体系结构提供优化的位操作.我们将探讨 x86_64 体系…
bitmap 即为由单个元素为 boolean(0/1, 0 表示未出现,1 表示已经出现过)的数组. 如果C/C++ 没有原生的 boolean 类型,可以用 int 或 char 来作为 bitmap 使用,如果我们要判断某字符(char)是否出现过, 使用 int 作为 bitmap 的底层数据结构,bitmap 即为 int 数组,一个 int 长度为 32 个 bit 位, c / 32 ⇒ bitmap 中的第几个 int c % 32 ⇒ bitmap 中的某 int 中的第几个…
昨晚遇到了一种很有意思的数据结构,Bitmap. Bitmap,准确来说是基于位的映射.其中每个元素均为布尔型(0 or 1),初始均为 false(0).位图可以动态地表示由一组无符号整数构成的集合. 每个bit对应一个无符号数.如位图第10个比特为true(1),表示无符号整数9. 之所以用位图来表示整数,是为了 节省 内存.假如要处理50亿个四字节无符号整数,那么需要 5,000,000,000 * 4bytes = 20,000,000,000bytes = (20,000,000,00…
1.  概述 位图(bitmap)是一种很经常使用的结构,在索引.数据压缩等方面有广泛应用. 本文介绍了位图的实现方法及其应用场景. 2. 位图实现 2014728101320" alt="" style="border:1px solid rgb(204,204,204); padding:3px; max-width:620px; overflow:hidden"> (1)自己实现 在位图中.每一个元素为"0"或"1…
Lucene实现倒排表没有使用bitmap,为了效率,lucene使用了一些策略,具体如下:1. 使用FST保存词典,FST可以实现快速的Seek,这种结构在当查询可以表达成自动机时(PrefixQuery.FuzzyQuery.RegexpQuery等)效率很高.(可以理解成自动机取交集)此种场景主要用在对Query进行rewrite的时候.2. FST可以表达出Term倒排表所在的文件偏移.3. 倒排表使用SkipList结构.从上面的讨论可知,求倒排表的交集.并集.差集需要各种SeekTo…