在python中使用BitMap排序

博客介绍了在Python中如何使用Bitmap进行排序,通过讲解Bitmap的原理和利用第三方库简化操作,阐述了Bitmap排序的优势在于处理大量数据时节省空间,但同时也存在浪费空间和无法保留重复元素的缺点。
摘要由CSDN通过智能技术生成

学习过redis缓存穿透解决方案的可能知道布隆过滤器,关于布隆过滤器的知识这里不再多讲,它的底层使用的是bitmap实现的,bitmap就是一个二进制的bit位组成的数组,一个int类型为4个字节,则bit位为32位(1Byte=8bit),减去一个符号位,我们可用的位数为31位,也就可以用bit位对应的1来表示对应的十进制整数。

使用bitmap对整数数组排序时首先我们要分配这个bitmap的大小,获取数组中的最大整数 M,M//31+1 除以31向上取整,比如一个未排序数组最大数不超过60,那么得到结果为2,意思是我们需要两个int型数据大小的空间来存放这个数组。
bm=[a[0],a[1]] ,a[0]和a[1]就是我们申请到的资源,a[0]的0-31位分别表示整数的0-31,a[1]的0-31位分别表示整数的32-63,排序时只需将数组中元素对应bit位的0置为1即表示该整数存在,一趟下来每个数组中的元素都在对应的bit位被置为1.我们输出排序结果时只需按顺序输出为1的bit位的索引即可。比如a=[1,5,3,4,7,8,15,6,9] 我们只需用16位的bit即可表示全部整数,他们在bitmap中的位置应该是这样的“1000001111111010” 从左往右数为1的位置索引就是1,3,4,5,6,7,8,9,15这就是a的排序结果。

上面的方法是不是太复杂了,python中有没有更简便的方法呢?

一切从简,pip install bitmap ,我们只需下载第三方包bitmap。这个包直接为我们封装了一系列的bitmap用法,比自己写容易多了。

import bitmap
print(dir(bitmap))
#result:['BitMap', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'bitmap']
[Finished in 0.3s]

首先引引入bitmap模块,使用dir查看有哪些属性,BitMap这个应该就是类,我们可以使用它来创建一个bitmap对象。

from bitmap import BitMap
a=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值