Red de conocimiento informático - Material del sitio web - En Matlab, de n números, se seleccionan de 1 a n combinaciones sin repetición, un total de 2 elevado a la enésima potencia - 1. ¿Cómo enumerar todas estas situaciones?

En Matlab, de n números, se seleccionan de 1 a n combinaciones sin repetición, un total de 2 elevado a la enésima potencia - 1. ¿Cómo enumerar todas estas situaciones?

código de función de subcombinación

función subcombs = subcombine(array)

subcombs = {array(1)};

if length( matriz) gt; 1

for elem = subcombine(array(2:end))

subcombs = [subcombs{:}, elem, [elem{:}, array(1 )]];

end

end

Resultados de la ejecución

La función subcombinar acepta un vector como parámetro de entrada y devuelve un sub -elemento. Es la estructura celular de los vectores, y cada vector de subelemento representa una combinación;

Análisis de la línea 6 de la función: en la matriz del lado derecho del número de asignación, el primero. El elemento deconstruye la variable subcombs actual, lo que significa tomar toda la combinación. Dada la combinación, el segundo elemento representa el resultado de agregar la subfunción actualmente atravesada, y el tercer elemento representa el resultado de agregar el recorrido de la subfunción agregado al primer elemento de el vector;

La esencia del algoritmo es una submatriz recursiva. El proceso de cada llamada a la función subcombinada es:

[1] Toma el primer elemento de la entrada vector como combinación;

[2] Llame a la función de subcombinación de forma recursiva con el parámetro excluir El vector del primer elemento;

[3] Recorre el valor de retorno, se trata cada resultado como una combinación, y el resultado y el primer elemento del vector actual también se tratan como una combinación;

[ 4] Todas las combinaciones obtenidas por la función actual en los tres pasos anteriores se devuelven a la función superior como resultado;

Condición de límite de la función recursiva: cuando el vector de entrada tiene solo un elemento, este elemento se devuelve directamente;

Condición inicial de la función recursiva: el parámetro de entrada es un vector que contiene todos los elementos;

El código Python equivalente es el siguiente:

Actualización:

Matlab se puede reemplazar por cellfun for loop para obtener un código más conciso y implementar soporte para matrices de celdas cuyos tipos de vectores de entrada son matrices de celdas:

Código de función de combinación actualizado

La función actualizada agrega soporte para el juicio de matriz vacía y devuelve una matriz de celdas vacía si la entrada es una matriz vacía Debido al diferente orden de análisis, el orden de las combinaciones en el resultado devuelto también es inconsistente con la versión original:

Resultados de ejecución

.