概念

在数学中,两个集合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用while循环做出1到10的乘积,PHP实现笛卡尔积算法的实例讲解相关推荐

  1. php用while循环做出1到10的乘积,php 数组

    对于网页编程来说,最重要的就是存取和读写数据了.存储方式可能有很多种,可以是字符串.数组.文件的形式等,今天学习了数组,可以说是PHP的数据应用中较重要的一种方式.PHP的数组函数众多,下面是我学习的 ...

  2. java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)

    在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数.当时的第一反应是for循环生成10个数字,但是可能会有重复的情况:进一步思考,需要对生成的数字进行 ...

  3. Shell中的循环语句for、while、until实例讲解

     在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧. 这里包括for/while/until循环,以及变量自增的语法实例. ...

  4. Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴

    Interview:算法岗位面试-10.15上午-上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴 导读:一心想去互联网,未必能够发挥自己最大价值, ...

  5. 8.2.1.10 Nested-Loop Join Algorithms 嵌套循环 关联算法:

    8.2.1.10 Nested-Loop Join Algorithms 嵌套循环 关联算法:MySQL 执行关联在表之间使用一个嵌套循环算法或者变种Nested-Loop Join Algorith ...

  6. JAVA中几种循环结构的表示_本文通过实例讲解给大家介绍Java中for、while、do while三种循环语句的区别,具体详情如下所示:第一种:for循环 循环结构for语句的格式...

    本文通过实例讲解给大家介绍Java中for.while.do while三种循环语句的区别,具体详情如下所示: 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后 ...

  7. 第10章 基础API与常见算法

    第10章 基础API与常见算法 学习目标 了解数学相关API 了解日期时间API 了解系统类API 掌握数组基础算法 掌握数组工具类的使用 熟练掌握String类的API 熟练掌握StringBuil ...

  8. linux下简单的shellfor循环程序,对Linux下shell编程之for循环的实例讲解

    对Linux下shell编程之for循环的实例讲解 linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 ...

  9. 10种混沌映射优化灰狼算法,可一键切换,可用于优化所有群智能算法,以灰狼算法为例进行介绍...

    " 本篇文章采用10种常见的和不常见的混沌映射用于优化群智能算法,代码可一键切换,可用于所有智能算法优化,本篇文章以灰狼算法为例进行介绍" 本文涉及10种混沌映射算法,用于在初始化 ...

最新文章

  1. SAP QM初阶之事务代码QS28
  2. vb 字符串替换_学习VB编程第69天 字符串查找与替换
  3. Document is invalid: no grammar found. at (null:3:8)
  4. 第三次学JAVA再学不好就吃翔(part69)--System类
  5. 便宜的手机图传遥控模块
  6. html移除click事件绑定,带你了解JQuery中绑定事件(bind())和移除事件(unbind())...
  7. 《是碰巧还是执着?python所阅读的每一场知识点,唯一的共同点就是——参赛选手中,有python之socket编程!》
  8. HCNA——RIP简单介绍及基本配置
  9. java第七章jdbc课后简答题_jsp编程基础第七章习题
  10. FFmpeg build under MinGW【原创】
  11. asp.net: 应用母版页的页面,如何设置其标题?
  12. 每日英语:How to say No to other people
  13. Linux Cgroups详解(一)
  14. IChat之天气模块相关
  15. Proteus仿真:使用8255输出连续方波
  16. 无限循环小数四则运算_无限循环小数能做加减乘除四则运算吗?无限不循环小数能做吗??...
  17. MVC已过时,MOVE时代来临?
  18. mysql怎么求方程的根_实验3-1 求一元二次方程的根
  19. 美杜莎扫描器使用教程
  20. PAT_乙级1012

热门文章

  1. 怎么在github上的私人项目中添加成员?
  2. Request method 'GET' not supported解决方式
  3. Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序?
  4. leetcode 415. 字符串相加(Java版)
  5. PAT1007 素数对猜想 (20 分)
  6. 全局中断_实时性迷思(3)——80%时间屏蔽了中断,实时性还有救么?
  7. Spring系列之bean的使用
  8. 程序图形化界面刷新以及如何从tkinter窗口中正确读出数据
  9. JUC锁-ReentrantReadWrite(五)
  10. getRealPath(““)与getRealPath(“/“)区别及用法——计算机网络相关学习笔记