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 중국어 웹사이트의 기타 관련 기사를 참조하세요!