ホームページ >バックエンド開発 >PHPチュートリアル >PHP はデカルト積アルゴリズムを実装します
概念
数学では、2 つの集合 X と Y のデカルト積 (直積) は、X × Y で表されます。 A と B が任意の 2 つの集合であるとします。集合 A から任意の要素 x を取得し、集合 B から任意の要素 y を取得して順序付きペア (x, y) を形成します。そのような順序付きペアを新しい要素として取得します。それらのうちのは、集合 A と集合 B の直積と呼ばれ、A×B、つまり A×B={(x, y)|x∈A and y∈B} と表されます。
セット A={a, b} およびセット B={0, 1, 2} と仮定すると、2 つのセットのデカルト積は {(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
例
3 つのドメインが与えられた場合:
D1 = { 张清玫,刘逸 } D2 = {计算机专业,信息专业} D3 = {李勇,刘晨,王敏}
D1、D2、D3 のデカルト積 D = D1×D2×D3、次と等しい:
{ (张清玫, 计算机专业, 李勇), (张清玫, 计算机专业, 刘晨), (张清玫, 计算机专业, 王敏), (张清玫, 信息专业, 李勇), (张清玫, 信息专业, 刘晨), (张清玫, 信息专业, 王敏), (刘逸, 计算机专业, 李勇), (刘逸, 计算机专业, 刘晨), (刘逸, 计算机专业, 王敏), (刘逸, 信息专业, 李勇), (刘逸, 信息专业, 刘晨), (刘逸, 信息专业, 王敏) }
このようにして、3 つの集合 D1、D2、D3 の各要素が対応して結合されて、巨大な集合群が形成されます。この例では、D には 2X2X3=12 個の要素があります。セットに 1000 個の要素があり、そのようなセットが 3 つある場合、デカルト積で構成される新しいセットは 10 億個の要素に達します。セットが無限の場合、新しいセットには無限の要素が含まれます。
PHP コード - 出力配列形式
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; }
使用法:
$arr = [ [ '张清玫', '刘逸' ], [ '计算机专业', '信息管理与信息系统专业', '电子商务专业' ], [ '2018级', '2017级' ] ]; $r = Descartes($arr);
効果:
array(12) { [0]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(15) "计算机专业" [2]=> string(7) "2018级" } [1]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(15) "计算机专业" [2]=> string(7) "2017级" } [2]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(33) "信息管理与信息系统专业" [2]=> string(7) "2018级" } [3]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(33) "信息管理与信息系统专业" [2]=> string(7) "2017级" } [4]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(18) "电子商务专业" [2]=> string(7) "2018级" } [5]=> array(3) { [0]=> string(9) "张清玫" [1]=> string(18) "电子商务专业" [2]=> string(7) "2017级" } [6]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(15) "计算机专业" [2]=> string(7) "2018级" } [7]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(15) "计算机专业" [2]=> string(7) "2017级" } [8]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(33) "信息管理与信息系统专业" [2]=> string(7) "2018级" } [9]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(33) "信息管理与信息系统专业" [2]=> string(7) "2017级" } [10]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(18) "电子商务专业" [2]=> string(7) "2018级" } [11]=> array(3) { [0]=> string(6) "刘逸" [1]=> string(18) "电子商务专业" [2]=> string(7) "2017级" } }
以上がPHP はデカルト積アルゴリズムを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。