Cómo calcular la suma de subconjuntos individuales de todos los subconjuntos en un rango dado de manera eficiente

Un conjunto dado de longitud N tendrá 2 ^ N subconjuntos. Entonces, la complejidad mínima (simplemente para enumerar todos los subconjuntos) es O (2 ^ N).

Cuando enumere todos los conjuntos en orden creciente de longitud del conjunto, encontrará que los conjuntos más grandes (digamos la longitud 4) se forman eligiendo uno de los conjuntos más pequeños (longitud 3) y agregando un elemento que aún no está en el conjunto.

Entonces, si está almacenando la suma de elementos en un conjunto más pequeño, simplemente tiene que agregarle el nuevo número para obtener la suma del conjunto más grande. (p. ej. suma de {1,2} = 3, suma de {1,2,4} = 3 + 4 = 7)

Esto evitaría iterar sobre todos los elementos para cada subconjunto para calcular la suma (que será aproximadamente O (N * 2 ^ N), en realidad menor, ya que no todos los subconjuntos son de longitud N. Sería realmente suma (i * 2 ^ i ) para i = 0 a N).

Entonces, al almacenar todas las sumas de subconjuntos, su algoritmo permanecerá O (2 ^ N) ya que cada vez que agrega un número constante y no itera. Pero necesitará memoria adicional de O (2 ^ N)