>  기사  >  백엔드 개발  >  PHP를 통해 여러 집합의 데카르트 곱을 계산하는 방법에 대한 지식

PHP를 통해 여러 집합의 데카르트 곱을 계산하는 방법에 대한 지식

jacklove
jacklove원래의
2018-06-20 16:48:401481검색

Cartesian product는 수학에서 두 집합 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)}

아이디어: 먼저 첫 번째 세트와 두 번째 세트의 데카르트 곱을 계산합니다. , 결과를 새 컬렉션으로 저장합니다.
그런 다음 새 세트를 사용하여 다음 세트로 데카르트 곱을 계산하고 마지막 세트로 데카르트 곱이 계산될 때까지 이런 방식으로 반복합니다.

예를 들어 데카르트 곱을 계산하는 데 필요한 다음 세트가 있습니다.

<?php$sets = array(    array(&#39;白色&#39;,&#39;黑色&#39;,&#39;红色&#39;),    array(&#39;透气&#39;,&#39;防滑&#39;),    array(&#39;37码&#39;,&#39;38码&#39;,&#39;39码&#39;),    array(&#39;男款&#39;,&#39;女款&#39;)
);?>

코드는 다음과 같습니다.

<?php/**
 * php 计算多个集合的笛卡尔积
 * Date:    2017-01-10
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * CartesianProduct 计算多个集合的笛卡尔积
 *//**
 * 计算多个集合的笛卡尔积
 * @param  Array $sets 集合数组
 * @return Array
 */function CartesianProduct($sets){

    // 保存结果
    $result = array();    // 循环遍历集合数据
    for($i=0,$count=count($sets); $i<$count-1; $i++){        // 初始化
        if($i==0){            $result = $sets[$i];
        }        // 保存临时数据
        $tmp = array();        // 结果与下一个集合计算笛卡尔积
        foreach($result as $res){            foreach($sets[$i+1] as $set){                $tmp[] = $res.$set;
            }
        }        // 将笛卡尔积写入结果
        $result = $tmp;

    }    return $result;

}// 定义集合$sets = array(    array(&#39;白色&#39;,&#39;黑色&#39;,&#39;红色&#39;),    array(&#39;透气&#39;,&#39;防滑&#39;),    array(&#39;37码&#39;,&#39;38码&#39;,&#39;39码&#39;),    array(&#39;男款&#39;,&#39;女款&#39;)
);$result = CartesianProduct($sets);
print_r($result);?>

출력:

Array(
    [0] => 白色透气37码男款
    [1] => 白色透气37码女款
    [2] => 白色透气38码男款
    [3] => 白色透气38码女款
    [4] => 白色透气39码男款
    [5] => 白色透气39码女款
    [6] => 白色防滑37码男款
    [7] => 白色防滑37码女款
    [8] => 白色防滑38码男款
    [9] => 白色防滑38码女款
    [10] => 白色防滑39码男款
    [11] => 白色防滑39码女款
    [12] => 黑色透气37码男款
    [13] => 黑色透气37码女款
    [14] => 黑色透气38码男款
    [15] => 黑色透气38码女款
    [16] => 黑色透气39码男款
    [17] => 黑色透气39码女款
    [18] => 黑色防滑37码男款
    [19] => 黑色防滑37码女款
    [20] => 黑色防滑38码男款
    [21] => 黑色防滑38码女款
    [22] => 黑色防滑39码男款
    [23] => 黑色防滑39码女款
    [24] => 红色透气37码男款
    [25] => 红色透气37码女款
    [26] => 红色透气38码男款
    [27] => 红色透气38码女款
    [28] => 红色透气39码男款
    [29] => 红色透气39码女款
    [30] => 红色防滑37码男款
    [31] => 红色防滑37码女款
    [32] => 红色防滑38码男款
    [33] => 红色防滑38码女款
    [34] => 红色防滑39码男款
    [35] => 红色防滑39码女款
)

이 문서에서는 데카르트 곱을 계산하는 방법을 설명합니다. PHP 지식을 통한 여러 세트에 대한 자세한 내용은 PHP 중국어 웹사이트를 참조하세요.

관련 권장사항:

WeChat에서 개발한 공유 인터페이스 관련 콘텐츠

css 화살표 및 노치 프롬프트 상자 구현

프론트엔드 엔지니어가 기본 지식을 배웁니다

위 내용은 PHP를 통해 여러 집합의 데카르트 곱을 계산하는 방법에 대한 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.