一个初始化bitmap的小算法

一个初始化bitmap小算法

根据长度,创建bitmap

看到一个开源项目,利用bitmap存储数据,其中创建和初始化过程,比较经典。这里摘录出来,以备后续使用。代码采用的是golang

golang 复制代码
//数据结构
type bitmap struct {
	a       []uint64
	bitsLen int
}
// 入参是数据实际长度
func (bm *bitmap) init(bitsLen int) {
	a := bm.a
	//一个long是8字节(64bit),  通过长度bitlen计算出需要多少bit,向上取整
	//在网络编程中,经常是4字节、8字节对齐,其实是一样的道理
	wordsLen := (bitsLen + 63) / 64 
	a = slicesutil.SetLength(a, wordsLen)
	bm.a = a
	bm.bitsLen = bitsLen
}

初始化bitmap

golang 复制代码
func (bm *bitmap) setBits() {
	a := bm.a
	// 把bit位全部设置为1,即设置成-1, 因为是无符号的,-1就是最大值
	for i := range a {
		a[i] = ^uint64(0)
	}
	// 这个地方,模除,实际上计算出多余的,不需要的bit位
	tailBits := bm.bitsLen % 64
	// 将多余不需要使用的bit位设置成0
	if tailBits > 0 && len(a) > 0 { //将末尾用不到的bitmap,设置成0
		// Zero bits outside bitsLen at the last word
		a[len(a)-1] &= (uint64(1) << tailBits) - 1
	}
}
相关推荐
Fantasydg30 分钟前
DAY 37 leetcode 454--哈希表.四数相加
算法·leetcode·散列表
前端 贾公子43 分钟前
LeetCode 2442:统计反转后的不同整数数量
算法·leetcode·职场和发展
lmy201211081 小时前
GESP:2025-3月等级8-T1-上学
c++·算法·图论·dijkstra
珊瑚里的鱼1 小时前
第五讲(下)| string类的模拟实现
开发语言·c++·笔记·程序人生·算法·visualstudio·visual studio
工一木子2 小时前
大厂算法面试 7 天冲刺:第6天-树与图深度剖析——高频算法面试题 & Java 实战
java·算法·面试
查理零世2 小时前
【蓝桥杯速成】日期问题(填空题) + 真题讲解 python
python·算法·蓝桥杯
杰克逊的日记2 小时前
大语言模型应用和训练(人工智能)
人工智能·算法·语言模型
振鹏Dong2 小时前
字符串——面试考察高频算法题
java·数据结构·算法
longlong int3 小时前
【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
开发语言·c++·算法
泛舟起晶浪3 小时前
大衣的旅行--前缀和+二分
数据结构·算法