Bitmap算法及其应用——求素数

本文介绍了Bitmap算法的原理和C++实现,强调其在空间效率和时间效率上的优势。通过位操作实现Bitmap的set()、clear()和test()操作。接着详细讲解了Eratothenes筛法,并阐述了如何结合Bitmap高效地求解素数,指出从2开始遍历,将素数倍数对应的Bitmap位设为1,最后保留未被标记的位即为素数。
摘要由CSDN通过智能技术生成

        在学习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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值