漫画:Bitmap算法 进阶篇

举报
feichaiyu 发表于 2019/11/10 16:13:39 2019/11/10
【摘要】 上一期漫画分享了Bitmap算法的基本概念,小伙伴们的互动十分积极,在此很感谢大家的热情。没看过上一期漫画的朋友们可以点击下面的链接:漫画:什么是Bitmap算法?针对上一期小伙伴们提出的各种问题,这一次咱们来集中解答。1.解析Word0,得知当前RLW横跨的空Word数量为0,后面有连续3个普通Word。2.计算出当前RLW后方连续普通Word的最大ID是 64 X (0 + 3) -...

上一期漫画分享了Bitmap算法的基本概念,小伙伴们的互动十分积极,在此很感谢大家的热情。


没看过上一期漫画的朋友们可以点击下面的链接:

漫画:什么是Bitmap算法?


针对上一期小伙伴们提出的各种问题,这一次咱们来集中解答。

屏幕快照 2019-11-10 下午4.06.29.png

屏幕快照 2019-11-10 下午4.06.35.png

屏幕快照 2019-11-10 下午4.06.41.png

屏幕快照 2019-11-10 下午4.06.54.png

屏幕快照 2019-11-10 下午4.07.07.png

屏幕快照 2019-11-10 下午4.07.18.png

屏幕快照 2019-11-10 下午4.07.24.png


屏幕快照 2019-11-10 下午4.07.29.png

屏幕快照 2019-11-10 下午4.07.34.png


屏幕快照 2019-11-10 下午4.07.39.png

屏幕快照 2019-11-10 下午4.07.44.png

屏幕快照 2019-11-10 下午4.07.49.png

屏幕快照 2019-11-10 下午4.07.55.png

屏幕快照 2019-11-10 下午4.08.01.png

屏幕快照 2019-11-10 下午4.08.05.png

屏幕快照 2019-11-10 下午4.08.13.png

屏幕快照 2019-11-10 下午4.08.23.png


屏幕快照 2019-11-10 下午4.08.29.png

屏幕快照 2019-11-10 下午4.08.37.png

1.解析Word0,得知当前RLW横跨的空Word数量为0,后面有连续3个普通Word。


2.计算出当前RLW后方连续普通Word的最大ID是  64 X  (0 + 3) -1 = 191。


3. 由于 191 < 400003,所以新ID必然在下一个RLW(Word4)之后。


4.解析Word4,得知当前RLW横跨的空Word数量为6247,后面有连续1个普通Word。


5.计算出当前RLW(Word4)后方连续普通Word的最大ID是191 + (6247 + 1)X64  = 400063。


6.由于400003 < 400063,因此新ID 400003的正确位置就在当前RLW(Word4)的后方普通Word,也就是Word5当中。


最终插入结果如下:


屏幕快照 2019-11-10 下午4.08.46.png

屏幕快照 2019-11-10 下午4.08.55.png


官方说明如下:


* Though you can set the bits in any order (e.g., set(100), set(10), set(1),
* you will typically get better performance if you set the bits in increasing order (e.g., set(1), set(10), set(100)).
*
* Setting a bit that is larger than any of the current set bit
* is a constant time operation. Setting a bit that is smaller than an
* already set bit can require time proportional to the compressed
* size of the bitmap, as the bitmap may need to be rewritten.


640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1



几点说明:


1.为了便于理解,文中介绍的Bitmap优化方法在一定程度上做了简化,源码中的逻辑要复杂得多。比如对于插入数据400003的定位,和实际步骤是有出入的。


2.如果同学们有兴趣,可以亲自去阅读源码,甚至是尝试实现自己的Bitmap算法。虽然要花不少时间,但这确实是一种很好的学习方法。



EWAHCompressedBitmap对应的maven依赖如下:

  com.googlecode.javaewah
  JavaEWAH
  1.1.0




—————END—————




喜欢本文的朋友们,欢迎长按下图关注订阅号梦见,收看更多精彩内容

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1


转载声明:本文转载自公众号【程序员小灰】

原文链接:https://mp.weixin.qq.com/s/743mJir0AGOvilzebTuNkw

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。