加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现bitmap位图排序与求交集的方法

发布时间:2020-12-12 21:39:44 所属栏目:PHP教程 来源:网络整理
导读:本篇章节讲解PHP实现bitmap位图排序求交集的方法。供大家参考研究具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这个二进制串,并将为1的位转换成整数,顺序存

本篇章节讲解PHP实现bitmap位图排序求交集的方法。分享给大家供大家参考,具体如下:

初始化一串全为0的二进制;

现有一串无序的整数数组;

如果整数x在这个整数数组当中,就将二进制串的第x位置为1;

然后顺序读取这个二进制串,并将为1的位转换成整数,顺序存放到新的集合中,就是排好序的了

排序代码:

$v) { $shang = $v / $int_bit_size; $yushu = $v % $int_bit_size; $offset = 1 << $yushu; $bitmap[$shang] = $bitmap[$shang] | $offset;//将bit位置为1 } //将$bitmap中的bit位依次还原为整数输出,即可得到排序后的数组 $b = array(); foreach ($bitmap as $k => $v) { for ($i = 0; $i < $int_bit_size; $i++) { $tmp = 1 << $i; $flag = $tmp & $bitmap[$k]; // $b[] = $flag ? $k * $int_bit_size + $i : false; if ($flag) { $b[] = $k * $int_bit_size + $i; } } } var_dump($b);exit; }

浏览器输出:

array 0 => int 1 1 => int 3 2 => int 4 3 => int 34 4 => int 50 5 => int 60 6 => int 88 7 => int 100 8 => int 150 9 => int 200 10 => int 300

求交集代码:

$v) { $shang = $v / $int_bit_size; $yushu = $v % $int_bit_size; $offset = 1 << $yushu; $bitmap[$shang] = $bitmap[$shang] | $offset;//将bit位置为1 } return $bitmap; } public function intersect() { $int_bit_size = PHP_INT_SIZE * 8; $a = array(1,300); $b = array(1,5,55,87,222,300); $bit_a = $this->sort($a); $bit_b = $this->sort($b); $c = array(); foreach ($bit_a as $k => $v) { $c[$k] = $bit_a[$k] & $bit_b[$k]; //二进制 & 计算求交集 } $d = array(); foreach ($c as $k => $v) { for ($i = 0; $i < $int_bit_size; $i++) { $tmp = 1 << $i; $flag = $tmp & $c[$k]; // $b[] = $flag ? $k * $int_bit_size + $i : false; if ($flag) { $d[] = $k * $int_bit_size + $i; } } } var_dump($d);exit; }

浏览器输出:

array 0 => int 1 1 => int 3 2 => int 34 3 => int 50 4 => int 100 5 => int 150 6 => int 300

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》、《》及《》

希望本文所述对大家PHP程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读