笛卡爾直積PHP版

2021-08-20 09:44:51 字數 2148 閱讀 7505

在數學中,兩個集合x和y的笛卡兒積(cartesian product),又稱直積,表示為x × y。設a、b是任意兩個集合,在集合a中任意取乙個元素x,在集合b中任意取乙個元素y,組成乙個有序對(x,y),把這樣的有序對作為新的元素,他們的全體組成的集合稱為集合a和集合b的直積,記為a×b,即a×b=

假設集合a=,集合b=,則兩個集合的笛卡爾積為

給出三個域:

d1 = 

d2 =

d3 =

則d1,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...