美文网首页
Bitmap学习笔记

Bitmap学习笔记

作者: 专职跑龙套 | 来源:发表于2018-03-05 15:03 被阅读14次

关于我的 Leetcode 题目解答,代码前往 Github:https://github.com/chenxiangcyr/leetcode-answers


使用场景:快速查找,删除,判重。
基本思想:使用 bit 数组来表示某些元素是否存在。

问题1:某个文件包含一些电话号码,每个号码为8位数字,统计不同的号码的个数。
分析:
最小号码:00000000
最大号码:99999999
将每个电话号码映射到 bitmap 中不同的位置,将该位置设为1,否则为0。
总共有100,000,000(1亿)个电话号码,每个号码需要一位,即需要长度为1亿的 bitmap。
预估内存空间 100M bit ≈ 12.5M byte

如何申请12.5M的内存空间?
利用数组:int[] bitmap = new int[SIZE];
由于一个 int 占用 4 个字节,因此数组长度 SIZE = 12.5M / 4 = 3M = 3 * 1024 * 1024

如何将某一个号码 num 映射到特定的 bitmap 中特定的位:

  • 电话号码00000000为最低位的标记,也就是0x0000.......000001。
  • 电话号码00000001就应该是 0x0000.....0000010。
  • 电话号码00000002就是0x0000....0000100。
    可以看出:电话号码就是1这个数字左移所对应的次数。
// 一个 int 占用 4 个字节,即 32 位。num / 32 可以得到该号码在 bitmap 中的下标位置
int pos = num / 32;

// 1这个数字左移所对应的次数
int mod = num % 32;
int mark = 1<<mod;

// 标记 bitmap 中特定的位置
bitmap[pos] = bitmap[pos] | mark

可以看出:

  • 电话号码00000000对应的 pos = 0, mod = 0, mark = 1
  • 电话号码00000001对应的 pos = 0, mod = 1, mark = 10
  • 电话号码00000002对应的 pos = 0, mod = 2, mark = 100

问题2:在2.5亿个整数中找出不重复的整数的个数。假设内存不足以同时容纳2.5亿个整数。

  • 方案1:
    整数个数为 2^32,也就是,我们可以将这 2^32 个数,划分为 2^8 个区域(比如2^8 个文件),然后将数据分离到不同的区域,然后不同的区域在利用 bitmap 就可以直接解决了。
  • 方案2:
    采用 2-bitmap,每个数分别 2 个bit,00 表示出现 0 次,01 表示出现 1 次,11 表示出现多次。
    需要内存 2.5 亿 * 2 = 5亿 bit = 0.5G bit = 0.07G byte = 70M
    依次扫描2.5亿个整数:
    • 00 变 01
    • 01 变 11
    • 10 不变

相关文章

  • Bitmap学习笔记

    关于我的 Leetcode 题目解答,代码前往 Github:https://github.com/chenxia...

  • Android学习笔记——bitmap缓存与内存复用

    本文章为学习笔记 qq879689064 Bitmap是导致程序oom的一个重要的原因首先bitmap是如何进行计...

  • Bitmap--学习笔记

    Bitmap是Android系统中的图像处理的最重要类之一。 用它可以获取图像文件信息,进行图像剪切、旋转、缩放等...

  • Bitmap的加载和Cache

    Android开发艺术探索笔记 一:Bitmap的高校加载 Bitmap在Android中指的是一张图片,格式有多...

  • Bitmap学习

    1. 学习Bitmap之前的先需概念: 屏幕像素:屏幕上像素点数,单位是px, 1px为1个像素点。 屏幕尺寸:屏...

  • Bitmap 学习

    recycle() 方法 后面会补上 LRU --->LruCache 这个类需要看看 进行三级缓存 L...

  • 关于Bitmap内存优化

    学习笔记,仅供自己参考,如有不对欢迎指正 关于Bitmap内存优化 计算一张图片占用的内存image 宽100高1...

  • Android Bitmap知识梳理学习

    学习资料: android 开发艺术探索 Bitmap api 1.关于 Bitmap 在Android中Bita...

  • Android 学习笔记之缓存 Bitmap

    本文整理自: Google 官方文档之图像,笔者省略了对自己帮助不大的章节,拜读原文请点链接。 缓存 Bitmap...

  • Android学习笔记之Bitmap和Cache

    本章的学习内容有以下几点: Bitmap的加载 Cache缓存策略 ImageLoader实现 一、Bitmap的...

网友评论

      本文标题:Bitmap学习笔记

      本文链接:https://www.haomeiwen.com/subject/zohhfftx.html