Bitmap算法应用

防火墙控制了某一目标IP的那些端口可以被用户IP访问,然而防火墙并没有用一条规则直接限定某一用户IP所能访问的目标IP及其端口,而是在配置中设置了一组访问控制规则,这些规则中既有允许访问的目标IP及端口范围,又有不允许访问的目标IP及端口范围。就某一目标IP而言,如何才能确定用户IP能访问该目标IP的端口呢?解决方案其实很简单,下面来看看具体步骤:

1.对于某一IP,假定0到65535之间的每一个端口都不允许访问,即可以创建一个大小为65536的Array数组,初始时每一个数组元素置为0,表示防火墙默认不允许访问该端口(注:所有端口默认不允许访问,只有控制规则显示说明允许时才能访问,且按配置中的规则条目从上到下一条一条检查访问控制情况。如果对于某个端口,前面有一条规则是不允许,那么就表示该端口不允许访问,即使后面有访问规则显示说明允许访问该端口,那么该端口依然不能访问。也就是说对于任意端口,都保持第一次匹配上的那条规则的端口访问情况);

2.检查当前防火墙访问控制规则,如果针对上面IP的访问控制规则为允许,其所允许的端口范围为A到B(注:0 <= A <= B <= 65535),那么检查Array数组从下标A到下标B对应位置的元素值,对于A到B中的某一端口X,如果Array[X]为0,那么将0改成1,表示允许访问该端口,如果Array[X]为1,那么不做处理,表示之前已经有规则允许访问该端口,如果Array[X]为-1,那么也不做处理,表示之前已经有规则禁止访问该端口。同样的,如果针对上面IP的访问控制规则为不允许,那么对于该规则A到B中某一端口Y,如果Array[Y]为0,那么将0改成-1,表示不允许访问该端口,如果Array[Y]为1,那么不做处理,表示之前已经有规则允许访问该端口,如果Array[Y]为-1,那么也不做处理,表示之前已经有规则禁止访问该端口。

3.经过上面的处理之后本来全部存储0的Array数组,在任何一个位置N要么是0、要么是1、要么是-1,这样一来我们就能很清晰的知道哪些端口可以访问、哪些端口不能访问。

端口访问范围解决方案其实蕴含着Bitmap算法思想,至于Bitmap算法是什么就需要自己了解了,按理说,只要是去操作有限范围内的数据特征(例如上面的端口访问重叠处理),那么就可以借鉴Bitmap算法思想。

时间: 2024-11-13 16:51:23

Bitmap算法应用的相关文章

大数据处理算法一:Bitmap算法

腾讯面试题:给20亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中并且所耗内存尽可能的少? 解析:bitmap算法就好办多了 所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况.通常是用来判断某个数据存不存在的. 例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示.那么就可以开一个int数组,一个int有32个位,就可以表示32个人.操作的时候可以使用位操作. 一,

bitmap算法简介

今天看到海量数据处理算法----bitmap(又称为bitset, 或者bit array), 有意思的算法. C++ 有一个头文件是<bitset>. bitmap的思想就是数据压缩. 用一个二进制bit(0或者1)去标记某个元素对应的value, 这就是bit + map啊. 由于使用bit单位存储数据, 所以可大大节省内存空间.下面举一个使用bitmap 的例子. 我们要对0-7内的五个元素进行排序, 假设这5个元素为(4, 7, 2, 5, 3). 假设元素没有重复的. 要表示8个数,

经典算法题每日演练——第十一题 Bitmap算法

原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场合下: ①:对10亿个不重复的整数进行排序. ②:找出10亿个数字中重复的数字. 当然我只有普通的服务器,就算2G的内存吧,在这种场景下,我们该如何更好的挑选数据结构和算法呢? 一:问题分析 这年头,大牛们写的排序算法也就那么几个,首先我们算下放在内存中要多少G: (10亿 * 32)/(1024*

BitMap算法详解

所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间. 基本思想: 这此我用一个简单的例子来详细介绍BitMap算法的原理.假设我们要对0-7内的5个元素(4,7,2,5,3)进行排序(这里假设元素没有重复).我们可以使用BitMap算法达到排序目的.要表示8个数,我们需要8个byte. 1.首先我们开辟一个字节(8byte)的空间,将这些空间的所有的byte位都设置为0 2.然后便利这5个元

【转】漫画:Bitmap算法

漫画:Bitmap算法 原文地址:https://www.cnblogs.com/apeway/p/10786283.html

Go语言实现bitmap算法

有关bitmap算法的介绍资料网上很多,这里不赘述,各种语言的实现也不少,但是Go语言版的bitmap不多,本文就来写一个Go版的bitmap实现. 首先创建一个 bitmap.go 文件,定义一个bitmap结构体,再提供一些操作方法.详细代码如下: package bitmap import ( "fmt" "strings" ) const ( bitSize = 8 ) var bitmask = []byte{1, 1 << 1, 1 <

Bit-map算法实现

Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省. 1. Bit-map应用 1)可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下. 2)去重数据而达到压缩数据 2. Bit-map算法评价 优点: 1. 运算效率高,不进行比较和移位: 2. 占用内存少,比如最大的数MAX=10000000:只需占用内存为MAX/8=1250000Byte=1.25M. 缺点: 1. 所

复选框与bitmap算法实践

bitmap(位图)算法 bitmap算法是利用数据二进制的每一位的值来表示数据的算法,可用来压缩保存数据集. 如何保存 如 5(int)的二进制表示为 101b,第一位和第三位的值是1就可以表示数据集 {1,3} ,也就是1个int类型,最多可以保存包含 32个int(4字节32位)的数据集,再对比char是2字节32位(纯数字用啥字符类型),都是极大节省了存储空间. 如何存储到数据库 一般数据库可以表示整型类型有int,long(bigint),decimal等,可按需选择,不够再做调整.

bitMap算法

这也是比较经典的算法之一 在存储一些比较大的数据时十分有用,但是在使用的过程中,必须十分注意的就是数据的最大值,因为这个值决定了 存储的内存,在比较高效的结构中还有hash 在这个过程中,最好首先估计需要的内存的量 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场合下: ①:对10亿个不重复的整数进行排序. ②:找出10亿个数字中重复的数字. 当然我只有普通的服务器,就算2G的内存吧,在这种场景下,我