python BitMap算法处理20亿随机整数去重

 更新时间:2024年01月05日 10:33:41   作者:繁华落尽chen  
这篇文章主要为大家介绍了python BitMap算法处理20亿随机整数去重,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

对于大量的随机整数,如何做到去重?BitMap是个很不错的选择,本篇文章就带大家认识BitMap的奇妙之处

什么是BitMap

BitMap的基本原理是用一个 bit 来标记某个元素对应的 Value,而 Key 即是该元素。由于采用一 个bit 来存储一个数据,因此可以大大的节省空间。

普通数据储存

我们知道,当我们随意向计算机输入一个数字,这个数字绝对不是以其本身的数值形式储存在计算机内存中的,而储存形式就是二进制。

比如我们输入8,那么计算机中会储存为1000。每种计算机中的字符的最小储存单位就是字节,一个字节有8位,所以至少也是00001000。也正因此一个字节最大能储存11111111这个二进制数值(代表255)。这样看一个字节绝对不够用啊,所以一般还需要更多的字节来储存大一点的数字。

在每种编程语言中所用于储存数字的字节数可能不同,在Python3版本中int类型是动态长度的,因此理论可以存非常大的数字了。

BitMap储存方式

BitMap的作用是为了达到数据去重或者储存,那么肯定是将要存储的东西变得越少越好,在BitMap思想中使用bit来储存每一个值。一起来看下面这张图:

上图只画了四个位,可以看到框内的是分别的四个位,四个位上有的地方为1,有的地方为0,之后这几个位综合起来形成一个我们熟知的十进制数值。这个十进制数值就储存着BitMap储存的数值。比如上面的5可以存储1,3两个数,15可以存储1,2,3,4这几个数。这下懂了吧,实际上就是在哪个位上有一个1就是代表这里存储了一个数字,这就是BitMap储存数据的原理

为什么BitMap可以对大数据进行去重

在BitMap思想中使用bit来储存每一个值。如果要储存相同的数字,那么在BitMap中这些数字会被储存在同一个位置,这样就会导致数据重复,无法达到去重的目的。因此,BitMap不能储存相同的数字,利用这个特性,BitMap可以对大数据进行去重。

下面是使用Python实现最基础的BitMap算法的代码:

import array
class BitMap:
    def __init__(self, max_num):
        self.max_num = max_num
        self.arr = array.array('B', [0] * (max_num // 8 + 1))
    def set(self, num):
        index = num // 8
        bit = num % 8
        self.arr[index] |= 1 << bit
    def get(self, num):
        index = num // 8
        bit = num % 8
        return self.arr[index] & (1 << bit) != 0
    def remove_duplicates(self, nums):
        for num in nums:
            if self.get(num):
                continue
            self.set(num)
            yield num

这个类中,我们定义了三个方法:__init__、set和get。__init__方法初始化了一个数组,用于存储BitMap的数据。set方法用于设置某个数字的状态,get方法用于获取某个数字的状态。remove_duplicates方法用于对数据进行去重。这里我们使用了Python中的array库来直接操作bit数组。

这是一个最基础的BitMap算法的实现,如果您想要更深入地了解BitMap算法,可以参考其他更高级的实现方式。

更多关于python BitMap算法去重的资料请关注脚本之家其它相关文章!

相关文章

  • 使用python找出list列表中相同元素(指定元素)的所有索引

    使用python找出list列表中相同元素(指定元素)的所有索引

    这篇文章主要给大家介绍了关于使用python找出list列表中相同元素(指定元素)的所有索引,在平时开发过程中经常遇到需要在数据中获取特定的元素索引的信息,需要的朋友可以参考下
    2023-08-08
  • 基于Python实现一个简单的月相可视化器

    基于Python实现一个简单的月相可视化器

    这篇文章介绍了一个使用Python创建中秋节月相可视化系统的项目,项目通过精确的天文计算和优雅的可视化技术,实现了月相变化的动态展示,感兴趣的小伙伴可以了解下
    2026-05-05
  • Python解析JSON数据的基本方法实例代码

    Python解析JSON数据的基本方法实例代码

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,下面这篇文章主要给大家介绍了关于Python解析JSON数据的基本方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • Python Missingno 数据缺失值可视化利器案例详解

    Python Missingno 数据缺失值可视化利器案例详解

    数据分析中数据缺失是常见问题,missingno库通过矩阵图、条形图等可视化工具高效识别缺失模式,适用于大型数据集,助于提升效率与决策,建议优先使用矩阵图并结合热力图分析,本文给大家介绍Python Missingno数据缺失值可视化利器,感兴趣的朋友一起看看吧
    2025-06-06
  • Python多版本管理与pip升级的全面指南

    Python多版本管理与pip升级的全面指南

    在Python开发过程中,多版本共存、pip升级失败和环境变量冲突是常见问题,本文介绍了如何管理Python多版本和正确升级pip,感兴趣的小伙伴可以了解下
    2025-05-05
  • python使用Pandas库提升项目的运行速度过程详解

    python使用Pandas库提升项目的运行速度过程详解

    这篇文章主要介绍了python使用Pandas库提升项目的运行速度过程详解,这是一篇关于“如何充分利用Pandas内置的强大且易于上手的特性”的指引。此外,你将学习到一些实用的节省时间的技巧,需要的朋友可以参考下
    2019-07-07
  • Python命令行click参数用法解析

    Python命令行click参数用法解析

    这篇文章主要介绍了Python命令行click参数用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法

    Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法

    这篇文章主要介绍了Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法,结合实例形式分析了Python字典映射合并操作相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • Python绘制惊艳的桑基图的示例详解

    Python绘制惊艳的桑基图的示例详解

    很多时候,我们需要一种必须可视化数据如何在实体之间流动的情况。这个时候就需要桑基图,它通常描绘 从一个实体(或节点)到另一个实体(或节点)的数据流。本文将利用Python绘制惊艳的桑基图,需要的可以参考一下
    2022-02-02
  • python对离散变量的one-hot编码方法

    python对离散变量的one-hot编码方法

    今天小编就为大家分享一篇python对离散变量的one-hot编码方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论