2011-11-19 23 views

Respuesta

12

Esto se conoce como Partition Problem y puede ver los detalles en el enlace al que se hace referencia. de wiki:

Una forma de conseguir una manija en la función de partición implica un función intermedia p (k, n), que representa el número de particiones de n usando sólo números naturales al menos tan grandes como k. Para cualquier valor dado de k, particiones contados por p (k, n) encajar en exactamente una de las siguientes categorías:

smallest addend is k 
smallest addend is strictly greater than k. 

El número de particiones que satisfacen la primera condición es p (k, n - k) Para ver esto, imagine una lista de todas las particiones del número n - k en números de tamaño al menos k, luego imagine agregar "+ k" a cada partición en la lista. Ahora, ¿de qué se trata? Como una nota, uno puede usar esto para definir una especie de relación de recursión para la partición función en términos de la función intermedia, a saber

1+ sum{k=1 to floor (1/2)n} p(k,n-k) = p(n), 

El número de particiones que satisfacen la segunda condición es p (k + 1, n) desde una partición en partes de al menos k que no contiene partes de exactamente k debe tener todas las partes al menos k + 1.

desde las dos condiciones son mutuamente excluyentes, el número de particiones reunión cualquiera de las condiciones es p (k + 1, n) + p (k, n - k). La función recursiva definida es así:

p(k, n) = 0 if k > n 

p(k, n) = 1 if k = n 

p(k, n) = p(k+1, n) + p(k, n − k) otherwise. 

De hecho, usted puede calcular todos los valores por memoization, para evitar que las llamadas recursivas adicionales.

Editar: Como unutbu mencionado en su comentario, por fin, se debe restar el resultado de 1 a salida de ella, de hecho se calculan todos los valores P como enlace wiki, pero al final cuando se desea resultado de salida, Debe restarlo por 1.

+0

Y para vincular esto con la forma de contar del OP, debemos restar 1 de p (1, n) ya que el OP no está contando 'n' como una partición de' n'. – unutbu

+0

@unutbu sí, pero el resultado final debe restarse de 1, de hecho, todos los P (i, j) se calcularán de la manera escrita anteriormente (en wiki) pero para 'P (n)' (o P (1, n)) (solo valor de salida) se debe restar de 1. Había editado mi respuesta, gracias. –

Cuestiones relacionadas