Estoy buscando averiguar si un algoritmo en particular ya existe. Quiero usarlo en una aplicación, pero también he visto esto en varios problemas Project Euler también.Algoritmo: generación de todas las combinaciones de los elementos que se deben elegir en la secuencia
Estoy buscando para calcular un tipo específico de conjunto de permutación/salida, donde el próximo elemento elegido debe ser uno de un conjunto finito de opciones en el siguiente conjunto.
Por ejemplo, dicen que tengo 3 matrices
$a1 = array("a", "b", "c");
$a2 = array("d", "e", "f");
$a3 = array("g", "h", "i");
que estoy buscando para generar todas las posibilidades de una secuencia que contiene como máximo 1 elemento de cada conjunto, elegido con el fin. Es decir, como salida, me gustaría ver:
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
Buscando implementar el algoritmo en PHP o Javascript. En esencia, pasará por un número variable de matrices que contienen un número variable de elementos, y dará salida a todas las posibilidades de secuencias que pueden ocurrir en orden secuencial.
¿Existe esto?
Si es así, ¿cómo se llama? Técnicamente, esto no es una permutación o una combinación de lo que sé sobre ambos.
EDIT: Daniel Fischer me ha informado que este es un producto cartesiano, aquí es una implementación 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;
}
Bien, sin embargo estoy buscando abstraer el concepto para poder ejecutarlo contra un número variable de matrices. – barfoon