python 32bit数据结构_python实现bitmap数据结构详解

bitmap是很常见的算法设计,例如用以Bloom Filter中;用以无反复整数金额的排列这些。bitmap一般根据数组来完成,数组中每一个原素能够当做是一系列二进制数,全部元素组成更高的二进制结合。针对Python而言,整数金额种类默认设置是有标记种类,因此 一个整数金额的能用十位数为31位。

bitmap完成构思

bitmap是用以对每一位开展实际操作。举例来说,一个Python数组包括4个32位系统有标记整形,则一共能用位为4 * 31 = 124位。假如要在第90个二进制位上实际操作,则要先获得到实际操作数组的第几个原素,再获得相对的位数据库索引,随后实行实际操作。

图中所显示为一个32位系统整形,在Python中默认设置是有标记种类,最大位为标记位,bitmap不可以应用它。左侧是上位,右侧是底位,最少位为第0位。

bitmap是用以对每一位开展实际操作。举例来说,一个Python数组包括4个32位系统有标记整形,则一共能用位为4 * 31 = 124位。假如要在第90个二进制位上实际操作,则要先获得到实际操作数组的第几个原素,再获得相对的位数据库索引,随后实行实际操作。

复位bitmap

最先必须复位bitmap。拿90这一整数金额而言,由于单独整形只有应用31位,因此 90除于31并向上取整则可获知必须好多个数组原素。编码以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = int((max 31 – 1) / 31) #向上取整

if __name__ == ‘__main__’:

bitmap = Bitmap(90)

print ‘必须 %d 个原素。’ % bitmap.size

编码以下:

$ python bitmap.py

必须 3 个原素。

测算在数组中的数据库索引

测算在数组中的数据库索引实际上是跟以前测算数组尺寸是一样的。只不过是以前是对最大值测算,如今换为任一必须储存的整数金额。可是有一点不一样,测算在数组中的数据库索引是向下取整,因此 必须改动calcElemIndex方式的完成。编码改成以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = self.calcElemIndex(max, True)

self.array = [0 for i in range(self.size)]

def calcElemIndex(self, num, up=False):

”’up为True则为向上取整, 不然为向下取整”’

if up:

return int((num 31 – 1) / 31) #向上取整

return num / 31

if __name__ == ‘__main__’:

bitmap = Bitmap(90)

print ‘数组必须 %d 个原素。’ % bitmap.size

print ’47 应储存在第 %d 个数组原素上。’ % bitmap.calcElemIndex(47)

编码以下:

$ python bitmap.py

数组必须 3 个原素。

47 应储存在第 1 个数组原素上。

因此 获得较大 整数金额很重要,不然有可能建立的数组容下下不来一些数据信息。

测算在数组原素中的位数据库索引

数组原素中的位数据库索引能够根据取模运算来获得。令需储存的整数金额跟31牙模型就可以获得位数据库索引。编码改成以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = self.calcElemIndex(max, True)

self.array = [0 for i in range(self.size)]

def calcElemIndex(self, num, up=False):

”’up为True则为向上取整, 不然为向下取整”’

if up:

return int((num 31 – 1) / 31) #向上取整

return num / 31

def calcBitIndex(self, num):

return num % 31

if __name__ == ‘__main__’:

bitmap = Bitmap(90)

print ‘数组必须 %d 个原素。’ % bitmap.size

print ’47 应储存在第 %d 个数组原素上。’ % bitmap.calcElemIndex(47)

print ’47 应储存在第 %d 个数组原素的第 %d 位上。’ % (bitmap.calcElemIndex(47), bitmap.calcBitIndex(47),)

别忘记是以第0位算起哦。

置1实际操作

二进制位默认设置是0,将某部位1则表明在这里位储存了数据信息。编码改成以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = self.calcElemIndex(max, True)

self.array = [0 for i in range(self.size)]

def calcElemIndex(self, num, up=False):

”’up为True则为向上取整, 不然为向下取整”’

if up:

return int((num 31 – 1) / 31) #向上取整

return num / 31

def calcBitIndex(self, num):

return num % 31

def set(self, num):

elemIndex = self.calcElemIndex(num)

byteIndex = self.calcBitIndex(num)

elem = self.array[elemIndex]

self.array[elemIndex] = elem | (1 byteIndex)

if __name__ == ‘__main__’:

bitmap = Bitmap(90)

bitmap.set(0)

print bitmap.array

由于从第0位算起,因此 如必须储存0,则必须把第0部位1。

清0实际操作

将某部位0,也即丢掉已储存的数据信息。编码以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = self.calcElemIndex(max, True)

self.array = [0 for i in range(self.size)]

def calcElemIndex(self, num, up=False):

”’up为True则为向上取整, 不然为向下取整”’

if up:

return int((num 31 – 1) / 31) #向上取整

return num / 31

def calcBitIndex(self, num):

return num % 31

def set(self, num):

elemIndex = self.calcElemIndex(num)

byteIndex = self.calcBitIndex(num)

elem = self.array[elemIndex]

self.array[elemIndex] = elem | (1 byteIndex)

def clean(self, i):

elemIndex = self.calcElemIndex(i)

byteIndex = self.calcBitIndex(i)

elem = self.array[elemIndex]

self.array[elemIndex] = elem (~(1 byteIndex))

if __name__ == ‘__main__’:

bitmap = Bitmap(87)

bitmap.set(0)

bitmap.set(34)

print bitmap.array

bitmap.clean(0)

print bitmap.array

bitmap.clean(34)

print bitmap.array

清0和置1是互反实际操作。

检测一位是不是为1

分辨一位是不是为1是为了更好地取下以前所储存的数据信息。编码以下:

编码以下:

#!/usr/bin/env python

#coding: utf8

class Bitmap(object):

def __init__(self, max):

self.size = self.calcElemIndex(max, True)

self.array = [0 for i in range(self.size)]

def calcElemIndex(self, num, up=False):

”’up为True则为向上取整, 不然为向下取整”’

if up:

return int((num 31 – 1) / 31) #向上取整

return num / 31

def calcBitIndex(self, num):

return num % 31

def set(self, num):

elemIndex = self.calcElemIndex(num)

byteIndex = self.calcBitIndex(num)

elem = self.array[elemIndex]

self.array[elemIndex] = elem | (1 byteIndex)

def clean(self, i):

elemIndex = self.calcElemIndex(i)

byteIndex = self.calcBitIndex(i)

elem = self.array[elemIndex]

self.array[elemIndex] = elem (~(1 byteIndex))

def test(self, i):

elemIndex = self.calcElemIndex(i)

byteIndex = self.calcBitIndex(i)

if self.array[elemIndex] (1 byteIndex):

return True

return False文章内容来源于:www.seo-7.comwww.sEo-6.comhttp://www.seo-6.com/seoyh/seojichurm/118357.html

(编辑:部分内容来互联网)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVC如何使用开源分页插件shenniu.pager.js

最近比较忙,前期忙公司手机端接口项目,各种开发调试发布现在几乎上线无问题了;虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只能ip访问,…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第四章——基…

Java EE 6 VS Spring 3:Java EE已经杀死了Spring? 没门!

介绍 几天前,我在听Java Spotlight Podcast的插曲85 。 在这次演讲中, Bert Ertman和Paul Bakker讨论了从Spring迁移到Java EE。 基本上,在他们的介绍中,他们说,如今,选择Spring而不是Java EE是没有意义的。…

usb检测串口是哪个角_怎样测试串口和串口线是否正常

一步:把串口线或者USB转串口线插到计算机上。二步:打开串口调试助手接着选择串口,串口线和 USB 转串口的端口号查看路径:电脑上--右键--属性--硬件--设备管理器-端口(COM 和LPT),点开端口前面的号查看即可。注释:1、US…

NodeJS常用模块介绍

收集了NodeJS开发中常用的一些模块。MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站。Express框架建立在Nodejs内置的Http模块上,并对Http模块再包装,从而实际Web请求处理的 功能。它支持多种前端模板&…

Java泛型面试问题

Java面试中的通用面试问题在相当长的时间内在Java 5周围越来越普遍,许多应用程序都转移到Java 5上,并且几乎所有新的Java开发都发生在Tiger(Java 5的代号)上。 泛型和Java 5功能(例如Enum)的重要性&#xf…

隐层元素闪一下_太阳一直依靠什么元素在燃烧,地球上的重元素又是怎么来的?...

本文基于回答网友一个这样的问题:太阳目前氢核聚变是氦碳氧稳定燃烧地球上的铁镍重元素哪里来的?可以说,这是一个毫无逻辑乱七八糟的问题,但既然邀请回答,就从中挑出几个稍显合理的问题说明一下。太阳核心每时每刻都在…

基于Token的WEB后台认证机制

基于Token的WEB后台认证机制 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可&#xf…

JSF基于事件的沟通:过时的方法

用JSF编写的Web应用程序由相互交互的bean组成。 在开发Web应用程序时,bean之间的通信是主要的设计模式之一。 有时,一个bean需要向其他bean发送事件,以通知它们某些更改或其他任何更改。 我们通常可以将托管bean或Spring bean注入另一个bean的…

mysql调优 基础

MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离;2.系统层次:增加内存;给磁盘做raid0或者raid5以增加磁盘的读写速度;可以重新挂载磁盘,并加上noatime参数,这…

saltstack

第一:安装前准备: 声明我用的是ubuntu 16.04的系统 1.修改主机名,并保证两台机器可以互相ping同主机名 ip1 master_hostname ip2 slave_hostname 第二:安装 服务器安装 yum install salt-master -y客户端安装 yum install salt…

ios 百度地图指定区域_获取百度地图可视区域范围的数据

有个业务场景,需要根据获取到的地图区域显示,根据相应的经纬度反查 左侧区域的会议室。思路:1.得到百度地图可视区域--可视区域的中心点2.可视区域的四个角的其中两个(东北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采样器扩展JMeter

JMeter没有对WS-Security或WS-Trust的任何内置支持,这使我为JMeter开发了此STS Sampler –可以在负载测试STS时使任何人的生活变得更好。 首先,您需要拥有Apache JMeter发行版。 我正在使用v2.7。 然后,您可以从此处下载sts.sampler.zip –解…

分享一个使用闭包对一个对象继承方式

function Person(name,age){this.name name;this.age age; }//定义一个new函数 继承了对Person的继承 function New(obj){return function(){var o {"__proto__":obj.proto};obj.apply(o,arguments);}return obj; }var n new New(Person)("对象继承了person…

vue怎么改logo_vue全家桶项目构建教程

前言vue是现阶段很流行的前端框架,很多人通过vue官方文档的学习,对vue的使用都有了一定的了解,但再在项目工程化处理的时候,却发现不知道改怎么更好的管理自己的项目,如何去引入一些框架以及vue全家桶其他框架的使用&a…

EclipseLink MOXy作为JAXB提供者

EclipseLink MOXy是JAXB提供程序,并且是内置在JDK中的默认JAXB提供程序的引人注目的替代品。 首先是一个简单的测试,将Java对象编组为XML: 这是模型: XmlRootElement(nameMemberDetailsRequest, namespacehttp://bk.org/members…

monkeyrunner多点触摸

思路是:在屏幕上某个位置按着不放:device.touch(x,y,md.DOWN) 然后再做一个滑动的操作:device.drap((x1,y1),(x2,y2),0.2,10) 然后再松开按键:device.touch(x,y,md.UP) #codeing:utf-8 from com.android.monkeyrunner import Monk…

雅虎前端优化的35条军规

阅读目录 内容部分css部分js部分javascript, css 图片 cookie移动端 服务器摘要:无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化34条军规&…

stm32 内部sram大小_在SRAM、FLASH中调试代码的配置方法(附详细步骤)

聊天界面发送嵌入式大杂烩获取1TB大杂烩资料包STM32的FLASH擦写次数有限(大概为1万次),所以为了延长FLASH的使用时间,我们平时调试时可以选择在SRAM中进行硬件调试。除此之外,SRAM 存储器的写入速度比在内部 FLASH 中要快得多,所以…

Spring Profile模式示例

最近,我们介绍了Spring Profiles的概念。 此概念是针对不同部署环境的轻松配置区分符。 直接的用例(已提出)是对相关类进行注释,以便Spring根据活动的配置文件加载适当的类。 但是,这种方法可能并不总是适用于常见的…