数据结构-BitMap
BitMap是用bit位来记录数据存在与否的一种算法。在处理大数据时,可以节省大量空间,速度也很快。
问题:已知有n个整数,这些整数的范围是[0,100],请你设计一种数据结构,使用数组存储这些数据,并提供两种方法, 分别是addMember和isExist.下面是这种数据结构的类的定义。
思路1:用数组存储,查找是否存在需要for循环n, 有n个数那么复杂度为O(n)
思路2: 用数组存储,添加数据则arr[index] = 1, 这样查找是否存在有n个数赋值度为O(1),,直接用过数组下标判断是否为1
思路3:加入有1亿个数呢, 上面思路2则会造成空间浪费, 我们可以用过1个整数表示32字节,每个字节则可以表示一种状态,这样空间上缩小了1/32
class BitMap {constructor(size) {this.bitArr = new Array(size)// 初始化操作this.bitArr.fill(0)}/*** 添加一个数据* @param {*} data */addMember(data) {// 1. 计算索引let cur_index = Math.floor(data/32)// 2. 计算传入的data在当前索引中位数(1个索引可以表示32位)let bit_index = data % 32// 3. 计算加入后的数据,并存储this.bitArr[cur_index] = this.bitArr[cur_index] | 1<<bit_inde
数据结构-BitMap相关推荐
- redis常用命令总结,一文足以(5种基本数据结构+bitmap+Geo+HyperLogLog+Streams)
与mysql 的区别 MySQL数据库需要自己去创建数据库,Redis数据库不用自己创建数据库,默认情况下有0-15号数据库 Redis数据库没有表,数据是以key-value键值对的形式存在数据库中 ...
- js计算字典的个数_JS数据结构与算法_集合字典
写在前面 说明:JS数据结构与算法 系列文章的代码和示例均可在此找到 一.集合Set 1.1 集合数据结构 集合set是一种包含不同元素的数据结构.集合中的元素成为成员.集合的两个最重要特性是:集合中 ...
- 数据算法: Bitmap
1. 初识 Bitmap Bitmap 也被称为位图.Bitmap 既是一种数据结构,又是一种图片类型.从数据结构的角度讲,Bitmap 适用于以下场景,后文会逐一进行阐述: 判重 定基 排序 压缩 ...
- io多路复用的原理和实现_彻底理解 IO 多路复用实现机制
本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...
- 基于标准C语言的数字图像处理基本框架(转)
考虑到现有的数字图像处理都是基于Windows平台,都或多或少使用了Win32 API函数,不能移植到Linux或者嵌入式系统中.为了使程序可移植,采用标准C语言建立了数字图像处理的基本框架,如下图所 ...
- Redis运维和开发学习笔记(1) Redis简介
文章目录 Redis的特性 速度快 持久化 多种数据结构 主从复制 高可用和分布式 典型的应用场景 Redis启动和可执行文件 Redis可执行文件说明 启动方式 验证redis redis常用配置 ...
- Java面试题及答案,java对外提供接口
Redis简介 Redis与Memcached区别 Redis优点 Redis缺点 Redis数据类型 String Hash List Set Sorted set Redis事务 MULTI&am ...
- 基于 MaxCompute + Hologres 的人群圈选和数据服务实践
简介: 本文主要介绍如何通过 MaxCompute 进行海量人群的标签加工,通过 Hologres 进行分析建模,从而支持大规模人群复杂圈选场景下的交互式体验,以及基于API的数据服务最佳实践. 本文 ...
- 双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 359 篇原创分享 作者 l 霜华 来源 l Hollis(ID:hollischuang) 本文来自作者投稿,作者是是双 ...
- 【面试】彻底理解 IO多路复用
目录 1.什么是IO多路复用? 2.为什么出现IO多路复用机制? 3.IO多路复用的三种实现方式 4.select函数接口 5.select使用示例 6.select缺点 7.poll函数接口 8.p ...
最新文章
- 当客户说“你们的价格太高了”
- 用电脑更新手机ios系统_手机系统频繁提示更新,到底要不要更新?
- MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
- 今天,我种下了一朵小蓝花
- hdoj 2041 超级阶梯
- 20190814:(leetcode习题)移动零 (补)
- C++ 继承与组合的区别
- 向对象中添加数据_在RMarkdown编译HTML文件中添加数据下载按钮
- CDA二级建模分析师考试相关
- SwiftUI HealthKit 基础教程
- utf8字符集中漢字默認占三個字節
- 吉他屋-吉他谱-吉他教程
- 我的世界java版如何装mod_我的世界MOD安装详解教程 全方位介绍MOD
- 分享一个ZPL指令在线测试网址
- 敏捷开发之道 总结小记
- 韬光逐薮 含章未曜#新学期 新FLAG#
- PoE视频监控解决方案
- 大学生学计算机的自我介绍范文带翻译,大学生英语自我介绍带翻译范文.doc
- 跟益达学Solr5之使用Jetty部署Solr
- linux 渗透工具_适用于Linux的十大最佳渗透测试工具
热门文章
- 2022年武汉市仿制药一致性评价政策性奖励申报条件要求以及奖补措施!
- 众多纹理合辑素材一键即可获取,再也不用到处找了
- 宝宝上幼儿园后爱生病为什么?
- Structured Streaming中如何通过schema_of_json方法动态解析Kafka传入的JSON数据的Schema
- vue 中的 $nextTick(cb)详细介绍
- php用go做跳转翻页,go.php · 董志强/go.php 站内外链跳转源码 - Gitee.com
- 噪声与干扰:影响通信的哼哈二将
- Kjava/J2ME UI设计实践 --- 兼顾功能强大与操作简单这对矛盾
- python数据挖掘实战笔记——文本挖掘(7):TF-IDF原理
- kali linux几种桌面壁纸,桌面应用|在 Kali Linux 中更改 GRUB2 背景的 5 种方式