`
younglibin
  • 浏览: 1211049 次
  • 性别: 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)。

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

分享到:
评论

相关推荐

    bitmap数据结构复制

    Bitmap数据结构是计算机图形学和图像处理领域中的一个重要概念,特别是在低级编程和系统级操作中,例如在操作系统内核、设备驱动程序或游戏引擎中。Bitmap,也称为位图,是一种像素阵列的表示方式,它直接存储了图像...

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

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

    android数据Bitmap数据的过程

    2. **Bitmap**: `Bitmap`是Android中用于表示图像的数据结构,它包含像素数组,每个像素代表图像中的一个点。 3. **Blob**: 在数据库术语中,“Blob”(Binary Large Object)是指可以存储大量二进制数据的字段类型...

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

    "高级数据结构及应用之使用bitmap进行字符串去重的方法实例" 本文主要讨论了使用Bitmap来实现字符串去重的方法实例。Bitmap是一种位图数据结构,由单个元素为boolean(0/1,0表示未出现,1表示已经出现过)的数组。...

    如何基于Java实现数据结构链表相关程序.pdf

    链表是一种基本的数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的引用。在C或C++中,通常使用指针来实现链表。然而,在Java中,由于没有直接的指针概念,链表的实现需要使用对象的引用。在Java...

    Java Windows Bitmap decoder and encoder

    Java Windows Bitmap(BMP)编码器与解码器是一个用于处理图像文件的工具,它允许在Java环境中读取和创建Windows BMP格式的图像。BMP是一种无损的图像存储格式,广泛应用于各种操作系统中,尤其是Windows系统。由于...

    面试题集,包含Android、Java、数据结构、算法等.docx

    9. **Bitmap内存计算**:Bitmap占用的内存大小等于宽度、高度像素乘以每个像素占用的字节数(取决于颜色格式),例如ARGB_8888每个像素占用4字节。 10. **混合开发**:React Native、Weex和H5都是常见的混合开发...

    Bitmap全面解析

    在Android开发中,Bitmap是一种用于处理图片的像素数组的数据结构。对于大尺寸图片的处理一直是Android图形处理的一个重点和难点。当ImageView的尺寸和要加载的图片尺寸差距很大时,如果直接加载原图到内存中,不仅...

    8583bitmap组包工具

    这个协议定义了交易数据的结构和格式,包括交易类型、金额、日期等关键信息。在8583协议中,位图(Bitmap)是报文结构的一部分,用于指示各个域是否被使用,从而帮助解析和构建报文。 这款工具的核心功能在于提供...

    redis数据结构基础知识及案列(每个数据结构一个案例).zip

    在【大学生 C/C++/JAVA/Python数据结构学习笔记和资料大全】中,你可以找到更多关于数据结构和算法的知识,这些是理解和使用Redis数据结构的基础。通过深入学习和实践,你不仅可以掌握Redis的使用,还能提升自己的...

    java 实现 bmp 转 jpg

    在Java编程语言中,将BMP(Bitmap)图像格式转换为JPEG(Joint Photographic Experts Group)格式是一项常见的图像处理任务。BMP是一种无损、未经压缩的图像格式,而JPEG则是一种广泛使用的有损压缩格式,适合存储...

    Bitmap位图缩放范例

    在Android开发中,Bitmap对象是用于存储和处理像素数据的核心类,而缩放Bitmap是优化资源显示和节省内存的重要手段。 在Android中,Bitmap的缩放主要通过以下几种方式实现: 1. **使用Bitmap.createScaledBitmap()...

    redis_java

    Redis,全称Remote Dictionary Server,是一个开源的、基于键值对的数据存储系统,以其高性能、易用性以及丰富的数据结构而被广泛应用于缓存、消息队列、计数器等多种场景。它支持多种数据类型,如字符串(strings)...

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

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

    二维码BitMap图片解析

    Bitmap是Android系统中用于表示图像的一种数据结构。在Android开发中,Bitmap对象主要用于存储和处理图像数据。它提供了一系列方法来操作图像,如压缩、旋转、裁剪等。 #### 三、二维码解析原理 二维码的解析过程...

    RoaringBitmap.zip

    RoaringBitmap是一个在Java中广泛使用的高效位图数据结构,尤其适用于大数据和搜索引擎等领域。它在处理大规模数据集时能够提供显著的性能优势,比传统的布隆过滤器(Bloom Filter)和Java内置的BitSet类更为高效。...

    通过将资源库图片转化为Bitmap,使用Zxing库完成多二维码识别

    在Android中,Bitmap是用于表示图像的一种内存高效的数据结构。你可以通过以下代码将图片资源转换为Bitmap: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); ``` ...

    RoaringBitmap:Java中更好的压缩位集

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

    redis 的bitmap点赞功能的应用源码.zip

    Redis中的Bitmap是一个非常高效的数据结构,它用于存储和操作位序列。在社交网络或内容分享平台上,点赞功能是非常常见的,用户可以对喜欢的内容进行点赞,系统需要记录这些点赞行为。在大数据量的情况下,传统的...

    android 获取界面部分view,view截图,生成bitmap图片

    Bitmap是Android中用于表示图像数据的类,它提供了丰富的操作方法,如缩放、裁剪、旋转等。在生成Bitmap后,我们可以使用`Bitmap.createScaledBitmap()`进行尺寸调整,`Bitmap.createBitmap()`用于创建一个新的...

Global site tag (gtag.js) - Google Analytics