笛卡尔积算法(PHP实现)


第一、定义

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

笛卡尔积

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

类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。A表示所有声母的集合,B表示所有韵母的集合,那么A和B的笛卡尔积就为所有可能的汉字全拼。

设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
笛卡尔积的符号化为:

A×B={(x,y)|x∈A∧y∈B}
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

第二 、运算

  1. 对任意集合A,根据定义有

    AxΦ =Φ , Φ xA=Φ

  2. 一般地说,笛卡尔积运算不满足交换律,即

    AxB≠BxA(当A≠Φ ∧B≠Φ∧A≠B时)

  3. 笛卡尔积运算不满足结合律,即

    (AxB)xC≠Ax(BxC)(当A≠Φ ∧B≠Φ∧C≠Φ时)

  4. 笛卡尔积运算对并和交运算满足分配律,即

    Ax(B∪C)=(AxB)∪(AxC)
    (B∪C)xA=(BxA)∪(CxA)
    Ax(B∩C)=(AxB)∩(AxC)
    (B∩C)xA=(BxA)∩(CxA)

第三 、程序算法

<?php

class Cartesian {
    private $matrix = [];

    /**
     * @param array $matrix
     */
    public function setMatrix (array $matrix): void {

        $this->matrix[] = $matrix;

    }

    public function exportData () {
        if (!$this->matrix) {
            return [];
        }
        $list = [];
        foreach ($this->matrix as $key => $value) {

            $this->logic($value, $list);
        }
        return $list;
    }

    public function logic ($item, &$list = []) {
        if (!$list) {
            foreach ($item as $value) {
                $temp = [];
                $temp[] = $value;
                array_push($list, $temp);
            }
            return "";
        }
        $forupdate = [];
        foreach ($list as $v) {
            $_temp = $v;
            foreach ($item as $i) {
                $__temp = $_temp;
                array_push($__temp, $i);
                $forupdate[] = $__temp;
            }
        }
        $list = $forupdate;

    }
}

// 使用方法

    $cartesian = new Cartesian();

    $cartesian->setMatrix(['红色','黄色',"蓝色"]);
    $cartesian->setMatrix(['M','L','XL','XXL']);
    $cartesian->setMatrix(['北京','郑州']);
    $cartesian->setMatrix(['男','女']);

    $dd =  $cartesian->exportData();
    print_r($dd);

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
 上一篇
TCP和UDP的区别 TCP和UDP的区别
TCP与UDP基本区别TCP 传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,位于OSI模型的传输层。UDP 用户数据报协议(英语:User
2021-01-08 Alex
下一篇 
MySQL索引 MySQL索引
一、考点1、MySQL索引的基础和类型1)索引的基础 索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对于的页码。 存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据
2020-07-10
  目录