在數學中,兩個集合x和y的笛卡兒積(cartesian product),又稱直積,表示為x × y。設a、b是任意兩個集合,在集合a中任意取乙個元素x,在集合b中任意取乙個元素y,組成乙個有序對(x,y),把這樣的有序對作為新的元素,他們的全體組成的集合稱為集合a和集合b的直積,記為a×b,即a×b=
。
假設集合a=
,集合b=
,則兩個集合的笛卡爾積為。
給出三個域:
d1 =則d1,d2,d3的笛卡爾積d2 =
d3 =
d=d1×d2×d3
,等於:
這樣就把d1、d2、d3這三個集合中的每個元素加以對應組合,形成龐大的集合群。本個例子中的d中就會有2x2x3=12
個元素,如果乙個集合有1000個元素,有這樣3個集合,他們的笛卡爾積所組成的新集合會達到十億個元素。假若某個集合是無限集,那麼新的集合就將是有無限個元素。
function
descartes
() $a = array_shift($t); // 將 $t 中的第乙個元素移動到 $a 中,$t 中索引值重新排序
if( !is_array($a) )
$a = array_chunk($a, 1); // 分割陣列 $a ,為每個單元1個元素的新陣列
do foreach($a as $p)
}$a = $r;
} while($t);
return $r;
}
使用:
$arr = array(
array(a1,a2,),
b,array(c1,c2,),
array(d1,d2,d3),
//......省略其它元素(也可以是陣列),);
$r = descartes( $arr );
效果:
array
( [0] => array
([0] => a1
[1] => b
[2] => c1
[3] => d1
)[1] => array
([0] => a1
[1] => b
[2] => c1
[3] => d2
)[2] => array
([0] => a1
[1] => b
[2] => c1
[3] => d3
)[3] => array
([0] => a1
[1] => b
[2] => c2
[3] => d1
)[4] => array
([0] => a1
[1] => b
[2] => c2
[3] => d2
)[5] => array
([0] => a1
[1] => b
[2] => c2
[3] => d3
)[6] => array
([0] => a2
[1] => b
[2] => c1
[3] => d1
)[7] => array
([0] => a2
[1] => b
[2] => c1
[3] => d2
)[8] => array
([0] => a2
[1] => b
[2] => c1
[3] => d3
)[9] => array
([0] => a2
[1] => b
[2] => c2
[3] => d1
)[10] => array
([0] => a2
[1] => b
[2] => c2
[3] => d2
)[11] => array
([0] => a2
[1] => b
[2] => c2
[3] => d3
))
php實現笛卡爾積
1.定義 笛卡爾乘積是指在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y,第乙個物件是x的成員而第二個物件是y的所有可能有序對的其中乙個成員。2.實現方法一 arr array array 黑色 紅色 白色 黑色 紫色 array 36碼 37碼 38碼...
php實現笛卡爾積
問題 有那麼乙個陣列 arr array array 1,2,3 array 中 國 人 array a b c 要求使用php語言實現計算該陣列的笛卡爾積。實現過程如下所示 arr array array 1,2,3 array 中 國 人 array a b c function diker a...
避免笛卡爾積
在mysql中建立臨時表 create table temptable 2 instanceid numeric 30 celltype varchar 128 enodeb id numeric 30 eutrancell id numeric 30 engine myisam default c...