php計算多個集合的笛卡爾積例項詳解
阿新 • • 發佈:2021-10-29
笛卡爾積
笛卡爾積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X*Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對的其中一個成員。
假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
實現思路
先計算第一個集合和第二個集合的笛卡爾積,把結果儲存為一個新集合。
然後再用新集合與下一個集合計算笛卡爾積,依此迴圈直到與最後一個集合計算笛卡爾積。
例如有以下幾個集合,需要計算笛卡爾積
<?php
$sets = array (
array ( '白色' , '黑色' , '紅色' ),
array ( '透氣' , '防滑' ),
array ( '37碼' , '38碼' , '39碼' ),
array ( '男款' , '女款' )
);
?>
|
程式碼如下:
<?php
/**
*php計算多個集合的笛卡爾積
*Date:2017-01-10
*Author:fdipzone
*Ver:1.0
*
*Func
*CartesianProduct計算多個集合的笛卡爾積
*/
/**
*計算多個集合的笛卡爾積
*@paramArray$sets集合陣列
*@returnArray
*/
function CartesianProduct( $sets ){
//儲存結果
$result = array ();
//迴圈遍歷集合資料
for ( $i =0, $count = count ( $sets ); $i < $count -1; $i ++){
//初始化
if ( $i ==0){
$result = $sets [ $i ];
}
//儲存臨時資料
$tmp = array ();
//結果與下一個集合計算笛卡爾積
foreach ( $result as $res ){
foreach ( $sets [ $i +1] as $set ){
$tmp []= $res . $set ;
}
}
//將笛卡爾積寫入結果
$result = $tmp ;
}
return $result ;
}
//定義集合
$sets = array (
array ( '白色' , '黑色' , '紅色' ),
array ( '透氣' , '防滑' ),
array ( '37碼' , '38碼' , '39碼' ),
array ( '男款' , '女款' )
);
$result =CartesianProduct( $sets );
print_r( $result );
?>
|
輸出:
Array
(
[0]=>白色透氣37碼男款
[1]=>白色透氣37碼女款
[2]=>白色透氣38碼男款
[3]=>白色透氣38碼女款
[4]=>白色透氣39碼男款
[5]=>白色透氣39碼女款
[6]=>白色防滑37碼男款
[7]=>白色防滑37碼女款
[8]=>白色防滑38碼男款
[9]=>白色防滑38碼女款
[10]=>白色防滑39碼男款
[11]=>白色防滑39碼女款
[12]=>黑色透氣37碼男款
[13]=>黑色透氣37碼女款
[14]=>黑色透氣38碼男款
[15]=>黑色透氣38碼女款
[16]=>黑色透氣39碼男款
[17]=>黑色透氣39碼女款
[18]=>黑色防滑37碼男款
[19]=>黑色防滑37碼女款
[20]=>黑色防滑38碼男款
[21]=>黑色防滑38碼女款
[22]=>黑色防滑39碼男款
[23]=>黑色防滑39碼女款
[24]=>紅色透氣37碼男款
[25]=>紅色透氣37碼女款
[26]=>紅色透氣38碼男款
[27]=>紅色透氣38碼女款
[28]=>紅色透氣39碼男款
[29]=>紅色透氣39碼女款
[30]=>紅色防滑37碼男款
[31]=>紅色防滑37碼女款
[32]=>紅色防滑38碼男款
[33]=>紅色防滑38碼女款
[34]=>紅色防滑39碼男款
[35]=>紅色防滑39碼女款
)
|
今天做專案用到了笛卡爾積,在網上找到了這個方法,實測非常好用,感謝作者分享,我也做個記錄,方便以後檢視。