我正在查找特定算法是否已經存在。 我想在應用程序中使用它,但我也看到這也出現了幾個Project Euler問題。算法 - 從必須按順序選擇的項目生成所有組合
我正在計算一個特定類型的排列/輸出集合,其中下一個項目選擇必須是是僅來自下面集合的有限選項集中的一個。
例如,假設我有3個陣列
$a1 = array("a", "b", "c");
$a2 = array("d", "e", "f");
$a3 = array("g", "h", "i");
我想找以產生含有至多1元件從每個陣列,爲了選擇序列中的所有的可能性。也就是說,作爲輸出,我希望看到:
adg aeg afg
adh aeh afh
adi aei afi
bdg beg bfg
bdh beh bfh
bdi bei bfi
cdg ceg cfg
cdh ceh cfh
cdi cei cfi
尋求在PHP或Javascript中實現算法。實質上,它將通過可變數量的包含可變數量元素的數組,並輸出序列中可能發生的所有可能性。
這是存在嗎?
如果是這樣,它叫什麼?從技術上講,這不是一個排列或從我所瞭解的兩個組合。
編輯:丹尼爾·菲捨爾告訴我這是一個笛卡爾乘積,這裏是一個實現taken from the PHP website:
function array_cartesian_product($arrays)
{
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
for ($i = 0; $i < $size; $i ++)
{
$result[$i] = array();
for ($j = 0; $j < $sizeIn; $j ++)
array_push($result[$i], current($arrays[$j]));
for ($j = ($sizeIn -1); $j >= 0; $j --)
{
if (next($arrays[$j]))
break;
elseif (isset ($arrays[$j]))
reset($arrays[$j]);
}
}
return $result;
}
正確的,但是我正在尋找抽象的概念,以便我可以運行它對數量可變的數組。 – barfoon