`
younglibin
  • 浏览: 1198204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java Bitmap 数据结构

 
阅读更多

Bitmap算法,
问题:对40亿个数据进行排序,数据类型为 int,无相同数据。

思考:关于40亿个数据的排序,首先想如何存储呢?一个int 4个字节,也就是160亿个字节,也就是大概有16GB的数据,现在所有的计算机估计

没有这么大的内存吧,所以我们就可以文件归并排序,也可以分段读入数据在进行Qsort,但是都需要不停地读入文件,可以想象不停地读取文件硬件操作会有多么浪费时间。

 

我们这样都是用4个字节来存储了一个数据,在计算机里都是用二进制进行表示,

例如 5 :0000 0000 0000 0000 0000 0000 0000 0101

现在引入Bitmap,所谓Bitmap就是用一个bit来表示一个数据。平时32位存储一个数据,我们可以换一种想法,用一个字节32位来存储0-31这32个数据,例如我们对2,1,5,12这四个数据进行由小到大的排序,首先把32位初始化为0,我们可以把这4个数据存储为0000 0000 0000 0000 0001 0000 0010 0110

 

我们就把32位中的分别把 2  1  5  12位置为1,然后从第0位开始遍历,看相应位是否为1,为1就进行输出,就完成了数据从小到大的排序。

 

再返回原题应用Bitmap就可以把16GB的存储空间缩小为16GB/32 = 512M,就可以大大减少读取文件的工作。直接读一次文件存入内存,然后遍历输出就完成了排序。

 

优点:既大量节省了空间,又把时间复杂度降低到O(n)。

不足:如果数据过于稀疏就会有大量无用遍历,浪费时间。

分享到:
评论

相关推荐

    RoaringBitmap, 在Java中,一个更好的压缩 bitset.zip

    RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...

    高级数据结构及应用之使用bitmap进行字符串去重的方法实例

    今天小编就为大家分享一篇关于高级数据结构及应用之使用bitmap进行字符串去重的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    使用纯Java语言写出来的数据结构

    使用纯Java语言写出来的数据结构,包含数据结构有 单向链表,双向链表,单向循环链表,双向循环链表,二叉树,队列,栈等, 关于实现的种类有分多种类型,包含有链表或者数组,二叉树里面包含有常见的二叉查找树,...

    RoaringBitmap:Java中更好的压缩位集

    咆哮位图 位集(也称为位图)通常用作快速数据结构。 不幸的是,它们会占用过多的内存。 为了补偿,我们经常使用压缩的位图。 咆哮的位图是压缩的位图,其性能通常优于传统的压缩位图,例如WAH,EWAH或Concise。 在...

    数据结构与算法.xmind

    数据结构与算法 排序算法 内排序 八大基础排序 选择排序 简单选择排序 思想 每次选择最大的数插入到末尾中 做法 外层for循环控制次数 内层for循环找出最大的值的角...

    基于Java实现的火车票抢票并发数据结构处理.zip

    购票时系统在阈值次数内采用随机分配的方式产生车票,并对该车票进行检查,即查询 该车票是否可购买,如果可购买,则对该座位进行加锁(lock),之后再重复一次检查,若依 旧可购买,则对该 Seat 上的 bitmap 进行...

    java 原生包 BitSet 源码

    Java 原生包 BitSet 源码,0~3年 Java 工程师必看,属于高级数据结构,利于进阶,面试必备!

    c# 实现位图算法(BitMap)

    BitMap可以看成一种数据结构。 假设有这样一个需求:在20亿个随机整数中找出某个数m是否存在其中,并假设32位操作系统,4G内存。 在Java中,int占4字节,1字节=8位(1 byte = 8 bit)。 如果每个数字用int存储,那...

    java bitset 源码解析.rtf

    java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!

    阿里巴巴2016校园招聘阿里云笔试试题题目(1).pdf

    本文档收录了阿里巴巴2016年校园招聘阿里云笔试试题,涵盖了Java、数据结构、算法、Linux、Ajax、线程同步、概率论等多个领域的知识点。下面对每个问题进行详细解读: 1. Java文件操作:该问题要求编写Java程序将...

    SHARE:用来替代sharedpreferences.支持 object,bitmap等

    另外,sharedpreferences 不能存类,集合和bitmap等数据!这点也让人非常不爽啊!所以,我就在这个美好的星期天撸了名为 SHARE 的工具类用来替代 sharedpreferences。 ##项目介绍 整体架构 先来看一下,整体架构图...

    roaringbitmap:Cython中咆哮的位图

    咆哮的位图是一种有效的压缩数据结构,用于存储一组整数。 咆哮位图将一组32位整数存储在一系列数组和位图中,以空间最小的方式(始终为2 ** 16位或更小)。 此数据结构可用于存储大量整数,例如,用于搜索引擎和...

    深入理解Activity之间的数据传递

    那么对于用户自己定义的数据结构是无法直接用Intent来传送的,如果想要通过Intent来传递自定义数据,可以让数据结构实现Parcelable接口,这样就可以把数据放入Intent。但是Intent的传送效率也不是很高,特别是当传递...

    roaring-rs – Rust中的咆哮位图-Rust开发

    这是Roaring位图数据结构的Rust端口,最初定义为Java库,并在“使用Roaring位图提高位图性能”中进行了描述。 Rust版本策略此板条箱仅支持Rust的当前稳定版本,修补程序版本可能随时使用新功能。 开发此项目使用了...

    constjs:从键字符串生成常量数据结构

    constjs 使用在字符串,数组,对象或参数中指定的键名创建const / enum / bitmap对象用法npm install constjs 枚举(Java样式) var ConstJs = require ( 'constjs' ) ;var Colors = ConstJs . enum ( "blue red" ) ...

    Android开源框架中GIF格式图片加载模块的应用与移植.pdf

    在Android 5.0系统以下,Image Pipeline使用Pinned Purgeables将Bitmap数据避开Java堆内存,存在Ashmem中。 本文档主要讨论了Fresco的基本框架和GIF加载模块的移植方法。通过抽取Fresco的GIF加载模块,可以单独使用...

    android项目_-天气预报详解实例(免费)

    通过本实例,我们可以了解 Android 项目的基本结构、布局设计、数据获取和处理、图像处理等多方面的知识点。 一、项目结构 Android 项目结构主要包括三个部分:Activity、Service 和 BroadcastReceiver。其中,...

    blog:算法,WebRTC,节点,微服务,Golang,ELK,Kubernetes,Istio,JAVA,PHP,MongoDB,Ningx,OpenResty,GraphQL ..

    Go 开源项目 MIMIO 的对象存储方案在探探的实践分布式分布式事务etcd 的实现原理数据结构与算法基础Dijkstra什么是 Bitmap 算法?Bitmap算法(进阶篇)最小栈的实现判断 2 的乘方找出缺失的整数辗转相除法是什么鬼?...

    infobright包

    虽然说 Infobright 没有提供索引结构,但它 Knowledge Grid 中的 Numerical Histogram、Character Map 和 Pack-to-Pack 结构,怎么看都和 bitmap 索引脱不了关系。只是它的组织形式不像传统数据库中的索引罢了。 ...

    PContour:用于在二进制图像中查找轮廓的ProcessingJava库

    PContour Java /库,用于在二进制图像中查找轮廓,该库由CMU。| | 与的cv::findContours和cv:... 最初的计划是移植OpenCV实现( ),但他们的计划主要面向C / C ++内存管理,并与库中其余部分的数据结构交织在一起。 缺

Global site tag (gtag.js) - Google Analytics