Sto cercando di scoprire se esiste già un particolare algoritmo. Voglio usarlo in un'applicazione, ma ho anche visto questo anche in alcuni problemi Project Euler.- Generazione di tutte le combinazioni dagli elementi che devono essere scelti in sequenza
Sto cercando di calcolare un tipo specifico di set permutazione/uscita, in cui l'elemento successivo scelto deve essere impostato su da un insieme finito di opzioni solo nella seguente serie.
Ad esempio, dire che ho 3 matrici
$a1 = array("a", "b", "c");
$a2 = array("d", "e", "f");
$a3 = array("g", "h", "i");
che sto cercando di generare tutte le possibilità di una sequenza contenente al massimo 1 elemento da ogni array, scelti per. Vale a dire come output, mi piacerebbe vedere:
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
Cercare di implementare l'algoritmo in PHP o Javascript. In sostanza passerà attraverso un numero variabile di matrici che contengono un numero variabile di elementi e produrrà tutte le possibilità di sequenze che possono verificarsi in ordine sequenziale.
Esiste?
Se sì, come si chiama? Tecnicamente questa non è una permutazione o una combinazione di ciò che so su entrambi.
EDIT: Daniel Fischer mi ha informato che questo è un prodotto cartesiano, qui è un'implementazione 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;
}
Giusto, tuttavia, sto cercando di astrarre il concetto in modo da poterlo eseguire su un numero variabile di matrici. – barfoon