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)