国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP實(shí)現(xiàn)bitmap位圖排序與求交集的方法

2024-05-04 23:48:54
字體:
供稿:網(wǎng)友

本文實(shí)例講述了PHP實(shí)現(xiàn)bitmap位圖排序求交集的方法。分享給大家供大家參考,具體如下:

初始化一串全為0的二進(jìn)制;

現(xiàn)有一串無序的整數(shù)數(shù)組;

如果整數(shù)x在這個(gè)整數(shù)數(shù)組當(dāng)中,就將二進(jìn)制串的第x位置為1;

然后順序讀取這個(gè)二進(jìn)制串,并將為1的位轉(zhuǎn)換成整數(shù),順序存放到新的集合中,就是排好序的了

排序代碼:

function sort(){    // var_dump(PHP_INT_MAX, PHP_INT_SIZE);    // int 9223372036854775807    // int 8    $bitmap = array_fill(0, 50, 0); //申請(qǐng)一個(gè)整形數(shù)組, 50個(gè)元素, 初始化為整數(shù)0    $int_bit_size = PHP_INT_SIZE * 8; //$bitmap中每個(gè)整形的二進(jìn)制位數(shù) (本例中int = 8*8 = 64bit; $bitmap數(shù)組一共50*64 = 3200個(gè)bit位),也就是說能為最大值小于等于3200的整數(shù)集合排序    $a = array(1,4,3,50,34,60,100,88,200,150,300); //定義一個(gè)亂序的數(shù)組    //掃描$a中的每一個(gè)數(shù), 將其轉(zhuǎn)換為 x*64 + y    foreach ($a as $k => $v) {      $shang = $v / $int_bit_size;      $yushu = $v % $int_bit_size;      $offset = 1 << $yushu;      $bitmap[$shang] = $bitmap[$shang] | $offset;//將bit位置為1    }    //將$bitmap中的bit位依次還原為整數(shù)輸出,即可得到排序后的數(shù)組    $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

求交集代碼:

public function sort($a = array()){    // var_dump(PHP_INT_MAX, PHP_INT_SIZE);    // int 9223372036854775807    // int 8    $bitmap = array_fill(0, 50, 0); //申請(qǐng)一個(gè)整形數(shù)組, 50個(gè)元素, 初始化為整數(shù)0    $int_bit_size = PHP_INT_SIZE * 8; //$bitmap中每個(gè)整形的二進(jìn)制位數(shù) (本例中int = 8*8 = 64bit; $bitmap數(shù)組一共50*64 = 3200個(gè)bit位)    // $a = array(1,4,3,50,34,60,100,88,200,150,300); //定一個(gè)亂序的數(shù)組    //掃描$a中的每一個(gè)數(shù), 將其轉(zhuǎn)換為 x*64 + y    foreach ($a as $k => $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,4,3,50,34,60,100,88,200,150,300);    $b = array(1,5,3,50,34,55,100,87,222,150,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]; //二進(jìn)制 & 計(jì)算求交集    }    $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

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 万源市| 唐山市| 淳化县| 台江县| 共和县| 信阳市| 双桥区| 高清| 贵南县| 彰武县| 临泉县| 卫辉市| 永丰县| 洛宁县| 兖州市| 敦煌市| 京山县| 乐昌市| 永年县| 保山市| 金寨县| 林周县| 西丰县| 浦城县| 石渠县| 秦皇岛市| 开远市| 手游| 和静县| 绥棱县| 綦江县| 龙泉市| 宣化县| 边坝县| 丹棱县| 昌图县| 赣州市| 武穴市| 漠河县| 株洲县| 洛隆县|