位图Bitmap使用方法

BitMap算法的核心思想是用bit数组来记录0-1两种状态,然后再将具体数据映射到这个比特数组的具体位置,这个比特位设置成0表示数据不存在,设置成1表示数据存在。

BitMap算在在大量数据查询、去重等应用场景中使用的比较多,这个算法具有比较高的空间利用率。

复制代码
class Bitmap():
    def __init__(self,max):
        self.size=int((max+31-1)/31)  # 计算有多少个32位数组空间,用最大数31计算
        self.array=[0 for i in range(self.size)]  # 申请空间,一个整数4个字节(32位)
        print("size", self.size)
        
    def bit_index(self,num):
        # 计算在32位中所处的位置
        return num % 31
    
    def num_set(self,num):
        elemIndex = num // 31  # 计算存储索引位
        byteIndex = self.bit_index(num)  #计算32位中的索引位,要存储到该位置 
        element = self.array[elemIndex]  # 找到该值
        self.array[elemIndex] = element | (1<<byteIndex)  # 存储
        
    def find(self,i):
        elemIndex = i//31
        byteIndex = self.bit_index(i)
        if self.array[elemIndex] & (1<<byteIndex):
            return  True
        return  False
    
#ord()转换成ascii码
#chr()ascii码转成字符串
# bitmap对字符串内的字符排序
MAX=ord('z')
suffle_array=[x for x in 'coledraw']
result = []
bitmap = Bitmap(MAX)
for c in suffle_array:
    bitmap.num_set(ord(c))
for i in range(MAX+1):
    # 从小到大顺序遍历
    if bitmap.find(i):
        result.append(chr(i))            
复制代码

 

posted @   今夜无风  阅读(415)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-07-26 知识图谱-知识体系构建策略
点击右上角即可分享
微信分享提示