使用bitmap实现对一千万个无重复的正整数(范围1~1亿)快速排序

本文介绍了一种使用位图(bitmap)数据结构存储大量整数的方法。利用Python的bytearray实现位图,通过位运算将整数映射到位图中对应的位置,并提供设置和获取位的操作。适用于内存高效存储和检索大量整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Bytes(字节)  == 8 bit
1 KBytes  == 1024 Bytes

思路:
1)申请长度为1亿的保存二进制位的数组 a,
2)通过位运算,将整数做为索引,将数组a对应的索引位置为1。
3)重复步骤2,直到最后一个整数放到数组中
4)从头开始遍历数组a,将值为1的索引id打印出来。

757665-20190719105449215-404219252.png

757665-20190719105455564-1531151875.png

757665-20190719112310152-2049608725.png

757665-20190719112319627-989764265.png

python 提供了bytearray这个动态的字节数据,以下代码就用bytearray实现

class Bitmap:
    def __init__(self, num_bits:int):
        self._num_bits = num_bits
        self._bytes = bytearray(num_bits // 8 +1)
    
    
    def setbit(self, k:int) ->None:
        if k > self._num_bits or k < 1:
            return None
        # 通过位左移和 或运算可以将对应的bit置为1
        self._bytes[k//8] |= (1<<k %8)
        
    def getbit(self, k:int)->Optional[bool]:
      
        if k > self._num_bits or k < 1: return
        return self._bytes[k // 8] & (1 << k % 8) != 0

转载于:https://www.cnblogs.com/yeni/p/11211938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值