美文网首页PHP进阶篇
笛卡尔积算法(PHP实现)

笛卡尔积算法(PHP实现)

作者: 安之烟波客 | 来源:发表于2020-01-16 00:34 被阅读0次

第一、定义

笛卡尔乘积是指在数学中,两个集合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);

第四 、总结

这种算法不仅适用于学生选课系统中的选课,一个学生选多门课程,而且还适用于商城系统的商品的多规格生成和和管理。

以上是闲来无聊写的一个demo,作为抛砖引玉吧,如果哪位同学还有更好写法,欢迎指正批评,共同提高!谢谢

相关文章

  • 笛卡尔积算法(PHP实现)

    第一、定义 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示...

  • JS 笛卡尔积 算法

    来自 http://www.while0.com/222.html

  • iOS 求笛卡尔积写法

    求任意数组笛卡尔积 OC Swift 写法 求这三个数组的笛卡尔积 ,结果应该是 有27个。 具体实现: 结果: ...

  • 笛卡尔积简单实现

    昨天去面试碰到的算法题,笛卡尔积,之前都没接触过。 笛卡尔乘积是指在数学中,两个[集合] X和Y的笛卡尓积(Car...

  • JavaScript笛卡尔积超简单实现算法示例

    附: vue 添加商品规格时的实现

  • Oracle入门笔记【3】多表查询与分组统计查询

    1,先实现多表查询: (可以发现两个集合发生了乘积,这叫笛卡尔积问题。) 消除笛卡尔积: (这只是消除了显示的笛卡...

  • OC 笛卡尔积算法《转》

    递归求笛卡尔积 求N个数组中元素任意组合 这两天搞一个订单多规格筛选, ,推荐了这个算法,,虽然没用上,,看上去还...

  • 2018-08-02

    php实现组合枚举算法 源码

  • 三、连接查询

    内连接 1、笛卡尔积 语法 无条件筛选 有条件筛选 什么是笛卡尔积?笛卡尔积就是将A和B表中的行任意组合,得到一个...

  • 笛卡尔积

    笛卡尔积,是指集合A中元素与B中元素所有的两两组合。 如A=(a,b),B=(1,2),那么笛卡尔积为(a1,a2...

网友评论

    本文标题:笛卡尔积算法(PHP实现)

    本文链接:https://www.haomeiwen.com/subject/tlwxzctx.html