在学习hashtable的时候,发现用于标记懒惰删除的数据结果是Bitmap,详见数据结果习题解析(c++语言)(第三版) 邓俊辉编著。理论上来说,可以用一个数组或者是std::vector来进行标记,但是Bitmap则具有更高的空间效率和时间效率。下面主要参考该书,对Bitmap进行了学习。
1. 什么是Bitmap
1Byte = 8 bit,而Bitmap的每个bit位对应0或者1,代表真或假,bitmap则是一系列0与1构成的集合。如果用bool数组来代表Hashtable的懒惰删除标记,bool占一个字节,有8bit,其所占空间为Bitmap的8倍。另外,bitmap不仅仅是空间效率高,还可以在O(1)时间内,对其进行赋值和读取。
2. Bitmap的c++实现
/// @file bitmap.hpp
/// @brief declaration and implementation of bitmap class
/// @author Shengfa Zhu, 1140973730@qq.com
/// @version 1.0
/// @date 2018-03-06
#include <memory.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>//header file of FILE, fopen, fread, fclose
class Bitmap {
private:
char* M;//M[] is room for bitmap N * sizeof(char)*8 bit
int N;
protected:
void