Dado un conjunto (por ejemplo [1,2]) de n elementos y un número 'k' (por ej. 6), encuentre todas las formas posibles de generar suma = kBuscar todas las formas de sumar el número dado (con repeticiones permitidas) del conjunto dado
por ejemplo respuesta dada sería 4, porque
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
2 2 2
El algoritmo que podía pensar es por la fuerza bruta, simulamos todos los escenarios posibles, y se detendrá cuando de estado dado que no podemos llegar a resultados .
arr[] = [1,2]
k = 6
globalCount =0;
function findSum(arr,k)
{
if(k ==0)
globalCount++
return
else if(k<0)
return
for each i in arr{
arr.erase(i)
tmp = k
findSum(arr,tmp)
while(k>=0){
findSum(arr,tmp -= i)
}
}
No estoy seguro de si mi solución es la más eficiente. Comente/corrija o muestre indicadores para mejores soluciones.
EDITAR: Realmente apreciaría si alguien me puede dar complejidad en tiempo de ejecución de mi código y su código de soln. :) Complejidad de código de mina Creo que es Big-O (n^w) w = k/avg (arr [0] .. arr [n-1])
http://en.wikipedia.org/wiki/Partition_%28number_theory%29 –
posible duplicado de [Generación de las particiones de un número] (http://stackoverflow.com/questions/400794/generating- the-partitions-of-a-number) – templatetypedef