Golang bitset 基本使用

news2024/12/26 10:37:41

安装:

go get github.com/bits-and-blooms/bitset

下面代码把fmtx换成fmt就行

//------------基本操作------------
	//构建一个64bit长度的bitset
	b := bitset.New(64)
	//放入一个数
	b.Set(10)
	fmtx.Println("add-10:", b.DumpAsBits()) // 0000000000000000000000000000000000000000000000000000010000000000
	//删除一个值
	b.Set(12)
	b.Clear(10)
	fmtx.Println("del-10:", b.DumpAsBits()) //0000000000000000000000000000000000000000000000000001000000000000
	//测试
	b.Set(2).Set(6)
	fmtx.Println("add-2-6:", b.DumpAsBits())                     //0000000000000000000000000000000000000000000000000001000001000100
	fmtx.Println("test2:", b.Test(2), " test5:", b.Test(5))      //[test2: true  test5: false]
	b.Set(2)                                                     //重复设置
	fmtx.Println("test2:", b.Test(2), " adds2:", b.DumpAsBits()) //[test2: true  adds2: 0000000000000000000000000000000000000000000000000001000001000100.]

	//----------------指定位置操作---------------
	//指定位置操作
	a := &bitset.BitSet{}
	a.Set(3)
	//在指定位置插入0
	a.InsertAt(3)
	fmtx.Println("指定位置插入0:", a.DumpAsBits()) //0000000000000000000000000000000000000000000000000000000000010000
	//在指定位置需改
	a.SetTo(4, false)
	fmtx.Println("指定位置4修改false:", a.DumpAsBits()) //0000000000000000000000000000000000000000000000000000000000000000
	a.Set(63)
	fmtx.Println("指定位置63修改true:", a.DumpAsBits()) //1000000000000000000000000000000000000000000000000000000000000000
	a.Set(3).DeleteAt(3)                          //删除了就全都往右移了
	fmtx.Println("指定位置3删除:", a.DumpAsBits())      //0100000000000000000000000000000000000000000000000000000000000000
	a.Set(63)
	fmtx.Println("再指定位置63:", a.DumpAsBits()) //1100000000000000000000000000000000000000000000000000000000000000
	//---------------两个bitsets交互----------------
	k := &bitset.BitSet{}
	j := &bitset.BitSet{}
	k.Set(1).Set(3).Set(5)
	j.Set(7).Set(3).Set(5)
	//交集
	fmtx.Println(k.Intersection(j)) //{3,5}
	//并集
	fmtx.Println(k.Union(j)) //{1,3,5,7}
	//差集
	fmtx.Println(k.Difference(j)) //{1}
	//全等
	fmtx.Println(k.Equal(j)) // false

	//遍历
	arr := bitset.New(64)
	arr.Set(1).Set(3).Set(5).Set(7)
	for i, e := arr.NextSet(0); e; i, e = arr.NextSet(i + 1) {
		fmtx.Println(i) // 1 3 5 7
	}

布隆过滤器-假阳性率计算公式
在这里插入图片描述
可知在哈希函数的个数k一定的情况下:

  • 位数组长度m越大,假阳性率越低;
  • 已插入元素的个数n越大,假阳性率越高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HttpRunner搭建接口自动化测试项目

前言:前面写过一篇PytestAllure接口自动化测试框架搭建的博客,这篇博客学习另外一款优秀的开源的接口自动化测试框架:HttpRunner,本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有: 工具最新版本:drawio-desktop 21.6.5 更新时间:2023年7月22日 工具简介 开源绘图工具,用Electron编写,…

【office】world设置标题

这里写目录标题 一、整理样式库二、设置标题编号三、设置标题其它信息1.设置 标题 1a.设置字体b.设置边框c.设置段落 2.设置 标题 2a.设置字体b.设置边框 3.设置 标题 3a.设置字体b.设置边框 4.设置 标题 4a.设置字体 5.设置 标题 5a.设置字体 一、整理样式库 1.选择“开始” …

【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

文章目录 一、前言二、认识腾讯云 Cloud Studio2.1 什么是云端开发环境2.2 CDE 的特点与优点2.2.1 提高效率,开发环境一键运行2.2.2 提高生产力,可以并行的工作2.2.3 开发更加规范2.2.4 提供监管,降低资本与资源 2.3 云端开发环境具备的四大要…

【算法|双指针系列No.2】leetcode1089. 复写零

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

部署模型并与 TVM 集成

本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本节介绍如何将 TVM 部署到各种平台&…

MediaUni——面向未来的流媒体传输网络设计与实践

// “立足当下,着眼未来”,任何一位从业者都应该谨遵这样的格言。阿里云通过总结这么多年的流媒体传输服务,分析痛点、提出措施、改进技术、认真思考,带来了MediaUni这样一个面向未来的流媒体传输网络。LiveVideoStackCon2023上…

接口幂等性实现方式

优质博文:IT-BLOG-CN 幂等 操作的特点是一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态&am…

最小公倍数题解:湘大oj1075 辗转相除法

一、链接 求最小公倍数 二、题目 Description 有多个测试用例,每行两个正整数x,y,保证x*y不超过2^31-1。如果x与y都为0,则输入结束。 每行输出一个测试用例的结果,即x与y的最小公倍数。(最后一行有回车)…

软著是什么

因公司需要申请软著,提前将相关资料整理如下,方便查询。 一、是什么 作为一名软件开发者,了解软件著作权可以帮助我们保护创作的成果,确保其他人不会未经授权地使用我们的代码。如果你要在你的软件中使用其他人的代码&#xff0…

百度Apollo中轨迹的表示方式

本文只是对于初学者的一种直观普及,以及对于规划路径可视化的另外一种体会。对于做规划控制的工程师来说太简单。只是本人初学者,在学习控制模块时候对于模块输入参数有所迷惑。所以记录一下。 首先明确轨迹表达的方式,以及对于控制模块输入的…

【C# 基础精讲】数组的创建与操作

数组是C#编程中非常重要的数据结构,它是一种用于存储相同类型元素的集合。通过数组,我们可以方便地访问和处理多个相关数据,这在很多编程场景下都是非常有用的。本文将详细介绍C#数组的创建与操作,包括数组的声明、初始化、访问元…

.bit域名调研

.bit域名研究 问题: .bit域名和ENS域名的相同点?不同点?有什么关系? .bit的定义 .bit 是基于区块链的,开源的,跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系,可用于加密…

半导体器件||的学习

电子管的介绍: 到底什么是电子管(真空管)? - 知乎 芯片破壁者(一):从电子管到晶体管“奇迹”寻踪 - 知乎 晶体管: 什么是晶体管?它有什么作用? - 知乎 改…

Fastjson 使用指南

文章目录 Fastjson 使用指南0 简要说明为什么要用JSON?用JSON的好处是什么?为什么要用JSON?JSON好处 1 常用数据类型的JSON格式值的范围 2 快速上手2.1 依赖2.2 实体类2.3 测试类 3 常见用法3.1 序列化操作核心操作对象转换为JSON串list转换J…

CAD练习——绘制房子平面图

首先还是需要设置图层、标注、文字等 XL:构造线 用构造线勾勒大致的轮廓: 使用多线命令:ML 绘制墙壁 可以看到有很多交叉点的位置 用多线编辑工具将交叉点处理 有一部分处理不了的,先讲多线分解,然后用修剪打理&…

一站式印度跨境电商平台开发--多用户购物商城搭建

搭建一个一站式印度跨境电商平台开发,需要考虑以下几个方面:平台设计,技术架构,多用户购物商城搭建。 一、平台设计: 1. 市场调研:了解印度电商市场的特点和需求,确定目标用户群体。 2. 平台功…

【Q-dir】常用设置分享

Q-dir是一个资源管理器,但有些宝藏设置在初始使用时没有展现,后面配合AHK设置快捷键启动更方便,快捷键推荐winq 点击这个小按钮可以展示导航窗格 此处是设置导航窗格,又名树状列表 点击空白出返回上一页 使用颜色过滤器&…

python几岁可以学零基础,python多大的孩子可以学

大家好,小编为大家解答多大的孩子可以学python的问题。很多人还不知道学python多大年龄可以学,现在让我们一起来看看吧! python编程是现在很多孩子接触编程的好选择,它能够给孩子带来容易入门的效果。那么,python编程少…

灰度非线性变换之c++实现(qt + 不调包)

本章介绍灰度非线性变换,具体内容包括:对数变换、幂次变换、指数变换。他们的共同特点是使用非线性变换关系式进行图像变换。 1.灰度对数变换 变换公式:y a log(1x) / b,其中,a控制曲线的垂直移量;b为正…