当前位置: 首页> 科技> 能源 > 农大南路网络营销推广优化_安阳市殷都区最新疫情今天的_杭州做网站的公司排行_seo外链发布平台

农大南路网络营销推广优化_安阳市殷都区最新疫情今天的_杭州做网站的公司排行_seo外链发布平台

时间:2025/9/5 19:13:27来源:https://blog.csdn.net/whf1215847706/article/details/143219510 浏览次数:0次
农大南路网络营销推广优化_安阳市殷都区最新疫情今天的_杭州做网站的公司排行_seo外链发布平台

1.前言

我们知道一个1G=1024M,1M=1024K,1K=1024byte,1byte=8bit,所以1个字节等于8bit,也就是8个二进制位,位图法的概念是用一个位(bit)来标记某个数的存放状态,所以节省了大量的空间。

2.数据结构

unsigned int bit[N],在这个数组里面,可以存储N*PHP_INT_SIZE*8个数据,但是最大的数只能是N*PHP_INT_SIZE*8-1。例如我们要存储的数据范围为0-63,则我们只需要将N=1,这样就可以把数据存进去,如下图:

数据为[5,1,7,15,0,4,6,10,14],将这些数据存入这个结构中为

3.算法

定义一个数组$bitmap = array_fill(0,50,0),长度为50,并且填充上0,我们知道PHP_INT_SIZE在64位系统中是8,则这个数组能容下50*8*8=3200个数据,字节范围(0~49),位范围(0~93),怎么求一个数的字节位置和位位置呢,比如1234,字节位置:1234/64=19,位位置:1234%64=18。字节位置就是$bitmap的下标,而位位置就是在该下标数组的这个数的二进制中的位数。

代码如下

function BitMap($arr)
{$bitmap = array_fill(0, 50, 0);$int_bit_size = PHP_INT_SIZE * 8;foreach ($arr as $item) {$bytePos = $item / $int_bit_size;$bitPos = $item % $int_bit_size;$position = 1 << $bitPos;//这个将1是左移多少位$bitmap[$bytePos] = $bitmap[$bytePos] | $position; //两个数按或运算,作用就是把二进制上对应位置的0置为1}return $bitmap;
}

关键字:农大南路网络营销推广优化_安阳市殷都区最新疫情今天的_杭州做网站的公司排行_seo外链发布平台

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: