>  기사  >  백엔드 개발  >  PHP는 데카르트 곱 알고리즘을 구현합니다.

PHP는 데카르트 곱 알고리즘을 구현합니다.

藏色散人
藏色散人앞으로
2019-12-21 14:59:574857검색

Concept

수학에서 두 집합 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)}. ㅋㅋㅋ , D3 세트의 각 요소는 그에 따라 결합되어 거대한 세트 그룹을 형성합니다. 이 예에서는 D에 2X2X3=12개의 요소가 있습니다. 세트에 1000개의 요소가 있고 3개의 세트가 있는 경우 데카르트 곱으로 구성된 새 세트는 10억 개의 요소에 도달합니다. 집합이 무한하다면, 새로운 집합은 무한한 요소를 가지게 됩니다.

PHP 코드 - 출력 배열 형식

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

사용법:

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

효과:

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;
}

위 내용은 PHP는 데카르트 곱 알고리즘을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 ruoxiaozh.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제