欢迎来到天天文库
浏览记录
ID:63498279
大小:12.63 KB
页数:4页
时间:2021-08-25
《PHP中用法BigMap实例_》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、PHP中用法BigMap实例_这篇文章主要介绍了PHP中用法BigMap实例,本文挺直给出实现代码,代码中包含具体说明,需要的伴侣可以参考下?php//所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采纳了Bit为单位来存储数据,因此在存储空间方面,可以大大节约。/*若N=1;申请内存空间为inta[2];假设需要排序或者查找的总数N=10000000,那么我们需要申请内存空间的大小为inta[1+N/32],其中:a[0]在内存中占32为可以对应十进制数0-31,依次类推:1.
2、求十进制0-N对应在数组a中的下标:n/322.求0-N对应0-31中的数:N%32=M3.利用移位0-31使得对应32bit位为1:1M,并置1;举例:假如想存储3(1)a下标30/32=0;放在a[0]中;(2)3%32=30;(3)左移30位01000000000000000000000000000000这个对应的值$a[0]=1073741824;1.求十进制0-N对应在数组a中的下标:十进制0-31,对应在a[0]中,先由十进制数n转换为与32的余可转化为对应在数组a中的下标。比如n=24,那么n/32=0,则24
3、对应在数组a中的下标为0。又比如n=60,那么n/32=1,则60对应在数组a中的下标为1,同理可以计算0-N在数组a中的下标。2.求0-N对应0-31中的数:十进制0-31就对应0-31,而32-63则对应也是0-31,即给定一个数n可以通过模32求得对应0-31中的数。3.利用移位0-31使得对应32bit位为1.找到对应0-31的数为M,左移M位:即2^M.然后置1.由此我们计算10000000个bit占用的空间:1byte=8bit1kb=1024byte1mb=1024kb占用的空间为:10000000/8/102
4、4/1024mb。也许为1mb多一些。*/classbigMap{//用法两个字节保存private$mask=0x1f;private$bitsperword=32;//移位的位数为5pow(2,5)=32private$shift=5;//存储数据的数组public$bitArray=array();/**$i对应的数归零*/functionclearbit($i){////则将当前byte中的指定bit位取0,后其他对方数组bit位必定不变,这就是1的妙用//$iSHIFT这里相当于intval($i/32);//$i
5、$this-mask这里相当于$i%$this-mask,取余@$this-bitArray[$i$this-shift]=~(1($i$this-mask));}/**$i对应的数致1*/functionsetbit($i){@$this-bitArray[$i$this-shift]
6、=(1($i$this-mask));}//test测试所在的bit为是否为1functiontestbit($i){return$this-bitArray[$i$this-shift](1($i$this-mask));}}$oBig=
7、newbigMap();$oBig-setbit(30);var_dump($oBig-testbit(2));var_dump($oBig-bitArray);更多信息请查看IT技术专栏...
此文档下载收益归作者所有