Golang 位向量
位图
位图(Bitmap)是通过一个 bit
来表示某个元素对应的值或者状态。它并不是什么新的数据结构。它的内容其实就是普通的字符串。
在redis中,我们可以通过 get/set
获取位图的内容,也可以使用 getbit/setbit
操作 bit
值(0 或者 1)。
Bit
即比特,是目前计算机中数据最小的单位。
8个Bit一个Byte(字节)。Bit的值,要么为 0 ,要么为 1。
由于Bit是计算机中最小的单位,使用它进行储存将非常节省空间。特别适合一些数据量大的场景。例如,统计每日活跃用户、统计每月打卡数等统计场景。
可以看出,上图中,将b、i、g各自的ASCII值用1byte来存储,redis中能够用命令来修改每一个bit的值(0或1)
位向量
与位图存储不同之处在于,位向量注重偏移量和存储索引
例如如何利用位向量向集合中插入值呢?
如何利用位向量判断值A是否存在呢?
1. 值A的索引要存在,例如在位向量中,集合中最大值的索引之后是没有存储变量的,所以也要对A分割出索引index和偏移offset,如果index>集合长度,则认为不存在
2. 判断了索引还需要判断片偏移,将1<<offset的结果与索引位上的值逐位相&(与),若为1则集合中存在A。
// 集合 type UintSet struct {words []uint64 }// 向bitmap插入数据 func (s *UintSet) AddEle (x int) {index, offset := x/64, uint(x%64)for index >= len((*s).words) {(*s).words = append(s.words, 0)}bitVal := uint64(1 << offset)(*s).words[index] = bitVal }// 向bitmap查找数据 func (s *UintSet) find(ele int) bool {index, offset := ele/64, uint(ele%64)return index < len((*s).words) && s.words[index]&(1<<offset)!=0 }
转载于:https://www.cnblogs.com/kisun168/p/11550358.html
Golang 位向量相关推荐
- Golang练手小项目系列
Golang练手小项目系列 本系列整理了10个工作量和难度适中的Golang小项目,适合已经掌握Go语法的工程师进一步熟练语法和常用库的用法. golang练手小项目系列(1)-位向量 golang练 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 基于Golang的简单web服务程序开发——CloudGo
基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...
- CentOS Docker安装配置部署Golang web helloworld
目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...
- 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发
基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- 基于Golang的对象序列化的程序包开发——myJsonMarshal
基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...
- 【golang程序包推荐分享】go-ini、viper、godoc
[golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...
- 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1
基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...
最新文章
- 前锋 php 杭州,前锋php培训
- java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
- 工业机器人的下一个竞争焦点已经非常明确:通用人工智能(AGI)
- 在ueditor编辑器的光标停留处插入内容
- ACM-最短路之中的一个个人的旅行——hdu2066
- python分糖果_分糖果_平安科技笔试题_牛客网
- 假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的
- 前端学习(3090):vue+element今日头条管理-参数传递
- 投标报价得分计算程序_什么是投标报价?怎么计算呢?
- 还在为运维烦恼?体验云上运维服务,提意见赢好礼!【华为云分享】
- java unsafe 详解_Java CAS操作与Unsafe类详解
- 基数排序(也叫桶子排序)
- 在html中如何写图片渐变,如何通过CSS3实现背景图片色彩的梯度渐变_html/css_WEB-ITnose...
- 基于eNSP的校园网设计的仿真模拟
- ps替换png图标的背景色
- 计算机研究生论文多少字,研究生一篇论文需要多少字?
- 未明学院:被腾讯群面虐完后,我找到了未来的方向…
- 基于android的资讯阅读APP
- 4.5.2 地址变换机构 4.5.3 访问内存的有效时间
- 第五章: 项目范围管理
热门文章
- C语言如何用fopen创建可读写txt
- Mutable and Immutable Variables in Python
- PHP关闭$_ENV后获取服务器参数的办法
- ELK笔记(一)elasticsearch安装
- juniper srx 3400 双机 配置
- SQL 中存放 varbinary型数据
- [Python] L1-038. 新世界 团体程序设计天梯赛GPLT
- LeetCode 49. Group Anagrams
- 蓝桥杯 ADV-78 算法提高 最长单词
- PAT 乙级 1023. 组个最小数 (20) Java版