Estoy en busca de un algoritmo, pero no sé bien cómo ponerlo en práctica. Lo que es más importante, no sé qué google. Peor aún, no estoy seguro de que se puede hacer en el polinomio de tiempo.
Dado un conjunto de números (dicen, {1, 4, 5, 9}), quiero enumerar todos los subconjuntos de este conjunto (su juego de poder, en realidad) en un orden determinado: aumento de la suma de los elementos.
Por ejemplo, dada {1, 4, 5, 9}, los subconjuntos deben ser enumerados en este orden, "más pequeño" de los conjuntos de primera:
{} = 0
{1} = 1
{4} = 4
{5} = 5
{1, 4} = 5
{1, 5} = 6
{9} = 9
{4, 5} = 9
{1, 9} = 10
{1, 4, 5} = 10
{4, 9} = 13
{5, 9} = 14
{1, 4, 9} = 14
{1, 5, 9} = 15
{4, 5, 9} = 18
{1, 4, 5, 9} = 19
Esto se siente como una impía mezcla entre una búsqueda en anchura y una búsqueda en profundidad, pero no puedo envolver mi cabeza alrededor de la forma adecuada para la mezcla de estas dos estrategias de búsqueda.
Mi espacio de búsqueda es muy grande ($2^{64}$ elementos) así que no puedo precompute de todos ellos frente y ordenarlas. En esa nota, yo también no es necesario enumerar la totalidad del espacio de búsqueda -- los más de 4.096 subconjuntos está bien, por ejemplo.
¿Alguien puede dar alguna sugerencia o incluso alguna pista para google? Muchas gracias.