Saltar al contenido

Generando todas las combinaciones con repetición usando MATLAB

Te recomendamos que revises esta respuesta en un entorno controlado antes de pasarlo a producción, un saludo.

Solución:

Podemos usar la biyección mencionada en el artículo de wikipedia, que asigna combinaciones sin repetición de tipo n+k-1 choose k a k-multicombinaciones de tamaño n. Generamos las combinaciones sin repetición y las mapeamos usando bsxfun(@minus, nchoosek(1:n+k-1,k), 0:k-1);. Esto da como resultado la siguiente función:

function combs = nmultichoosek(values, k)
%// Return number of multisubsets or actual multisubsets.
if numel(values)==1 
    n = values;
    combs = nchoosek(n+k-1,k);
else
    n = numel(values);
    combs = bsxfun(@minus, nchoosek(1:n+k-1,k), 0:k-1);
    combs = reshape(values(combs),[],k);
end

Gracias a Hans Hirse por una corrección..

Enfoque de fuerza bruta: genere todas las tuplas y luego conserve solo las que están ordenadas. No es adecuado para grandes valores de n o k.

values = 1:3;                               %//  data
k = 3;                                      %//  data
n = numel(values);                          %//  number of values
combs = values(dec2base(0:n^k-1,n)-'0'+1);  %//  generate all tuples
combs = combs(all(diff(combs.')>=0, 1),:);  %'// keep only those that are sorted

Aquí tienes las reseñas y calificaciones

Recuerda que tienes concesión de agregar una reseña .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *