hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

PHP完成笛卡尔积算法_后端开发

2019-12-22后端开发ki4网19°c
A+ A-
观点

在数学中,两个鸠合X和Y的笛卡儿积(Cartesian product),又称直积,示意为 X × Y。设A、B是恣意两个鸠合,在鸠合A中恣意取一个元素x,在鸠合B中恣意取一个元素y,构成一个有序对(x,y),把如许的有序对作为新的元素,他们的全部构成的鸠合称为鸠合A和鸠合B的直积,记为A×B,即 A×B={(x,y)|x∈A且y∈B}。

假定鸠合 A={a, b},鸠合 B={0, 1, 2},则两个鸠合的笛卡尔积为 {(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

举例

给出三个域:

D1 = { 张清玫,刘逸 }
D2 = {计算机专业,信息专业}
D3 = {李勇,刘晨,王敏}

则 D1,D2,D3 的笛卡尔积 D = D1×D2×D3,即是:

{
    (张清玫, 计算机专业, 李勇),
    (张清玫, 计算机专业, 刘晨),
    (张清玫, 计算机专业, 王敏),
    (张清玫, 信息专业, 李勇),
    (张清玫, 信息专业, 刘晨),
    (张清玫, 信息专业, 王敏),
    (刘逸, 计算机专业, 李勇),
    (刘逸, 计算机专业, 刘晨),
    (刘逸, 计算机专业, 王敏),
    (刘逸, 信息专业, 李勇),
    (刘逸, 信息专业, 刘晨),
    (刘逸, 信息专业, 王敏)
}

如许就把D1、D2、D3这三个鸠合中的每一个元素加以对应组合,构成巨大的鸠合群。本个例子中的D中就会有 2X2X3=12 个元素,假如一个鸠合有1000个元素,有如许3个鸠合,他们的笛卡尔积所构成的新鸠合会到达十亿个元素。倘使某个鸠合是无穷集,那末新的鸠合就将是有无穷个元素。

PHP代码 - 输出数组情势

function Descartes()
{
    $t = func_get_args();                                    // 猎取传入的参数
    if (func_num_args() == 1) {                               // 推断参数个数是不是为1
        return call_user_func_array(__FUNCTION__, $t[0]);  // 回调当前函数,并把第一个数组作为参数传入
    }
    $a = array_shift($t);        // 将 $t 中的第一个元素移动到 $a 中,$t 中索引值从新排序
    if ( !is_array($a)) {
        $a = [$a];
    }
    $a = array_chunk($a, 1);     // 支解数组 $a ,为每一个单位1个元素的新数组
    do {
        $r = [];
        $b = array_shift($t);
        if ( !is_array($b)) {
            $b = [$b];
        }
        foreach ($a as $p) {
            foreach (array_chunk($b, 1) as $q) {
                $r[] = array_merge($p, $q);
            }
        }
        $a = $r;
    } while ($t);
    return $r;
}

运用:

$arr = [
    [
        '张清玫',
        '刘逸'
    ],
    [
        '计算机专业',
        '信息管理与信息系统专业',
        '电子商务专业'
    ],
    [
        '2018级',
        '2017级'
    ]
];
$r = Descartes($arr);

结果:

array(12) {
  [0]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(15) "计算机专业"
    [2]=>
    string(7) "2018级"
  }
  [1]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(15) "计算机专业"
    [2]=>
    string(7) "2017级"
  }
  [2]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(33) "信息管理与信息系统专业"
    [2]=>
    string(7) "2018级"
  }
  [3]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(33) "信息管理与信息系统专业"
    [2]=>
    string(7) "2017级"
  }
  [4]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(18) "电子商务专业"
    [2]=>
    string(7) "2018级"
  }
  [5]=>
  array(3) {
    [0]=>
    string(9) "张清玫"
    [1]=>
    string(18) "电子商务专业"
    [2]=>
    string(7) "2017级"
  }
  [6]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(15) "计算机专业"
    [2]=>
    string(7) "2018级"
  }
  [7]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(15) "计算机专业"
    [2]=>
    string(7) "2017级"
  }
  [8]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(33) "信息管理与信息系统专业"
    [2]=>
    string(7) "2018级"
  }
  [9]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(33) "信息管理与信息系统专业"
    [2]=>
    string(7) "2017级"
  }
  [10]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(18) "电子商务专业"
    [2]=>
    string(7) "2018级"
  }
  [11]=>
  array(3) {
    [0]=>
    string(6) "刘逸"
    [1]=>
    string(18) "电子商务专业"
    [2]=>
    string(7) "2017级"
  }
}

以上就是PHP完成笛卡尔积算法的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
PHP完成笛卡尔积算法_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>