Está en la página 1de 5

EL SUBSET SUM PROBLEM

Este problema es conocido en la algortmica por ser NP [0]. Es decir, dada su intratabilidad no hay
ningn algoritmo que demore un tiempo razonable (polinmico) para solucionarlo.

Hay formas de clculo poco convencionales para solucionar este problema pero slo las
mencionamos debido a que van por otra direccin. La computacin : Molecular por ADN, cuntica,
adabitica, de burbujas de jabn, basada en engranajes, etc. [4]

Para el caso especial donde la suma s es la mitad de la suma total de los elementos Toth y Martello le
llaman Value independent Knapsack Problem o Stickstacking Problem [6]. Y otros prefieren decir
que es un caso especial del Problema de la Mochila donde los pesos y los valores son iguales [2].

ALGORITMOS CONOCIDOS

Un algoritmo exacto por fuerza bruta puede disearse seleccionando los subconjuntos tomados de a
1, de a 2, de a 3, ..., de a n . Y verificando si la unin de ellos forma un conjunto cuyos elementos
suman s.

Esta idea es claramente intratable.

Un algoritmo pseudo-Polinomial basado en [1] toma como tcnica la programacin dinmica.

Sea Mn x s una tabla booleana donde

i 1in j 0 js

M(i,j) = 1 si existe un subconjunto de A={ a1,a2,,ai }

para el cual la suma de todos sus elementos es exactamente j

0 e.o.c

Casos base: Ntese que M(1,j)=1

si y slo si

j=0 j=ai

Definiremos j<0 M(i,j) = 0


La relacin de recurrencia

para 1<in,0 js es:

M(i,j)= max{ M(i-1,j), M(i-1,j-ai) }

Ntese que, cuando la tabla est llena, la respuesta est en M(n,s): Si es 1 el problema de particin
tiene solucin (un rastreo o traceback puede hallarla), en otro caso no.

Ejemplo:

A = { a1,a2,a3,a4,a5 }= { 1,9,5,3,8 }

La suma deseada es s=13.

La tabla M llena es:

Y la respuesta es que la particin s existe: A = { a1,a2,a4 }= { 1,9,3 }

Como las columnas de la matriz van hasta la mitad de la suma de los elementos, si alguno de ellos es
muy grande, por ejemplo ai=2n, entonces la matriz ser de por lo menos 2n/2 columnas, haciendo que
el llenado de la matriz demore un tiempo O(n2n). De ah que no sea polinomial en trminos del
tamao de la entrada n.

Algoritmos heursticos

Hay algunas ideas heursticas [2][5][6][7] que buscan una aproximacin a la solucin, es decir, hallar
un subconjunto A cuya suma se acerque por debajo a s. Aqu las exponemos a grandes rasgos:

Llamaremos Sol a la solucin que se construye.


El algoritmo G (algoritmo Greedy) consiste en aadir a1 a Sol si es menor que s, aadir a2 a Sol si la
nueva Sol es menor que s, etc. Ntese que G no ordena los ai.

c'<-s

Para i=1..n

Si ai < c Entonces c <- c-ai; Sol <- Sol ai

FinPara

AproximacionObtenida <- s-c

El algoritmo Gext (Greedy extendido) consiste en ejecutar G para hallar Sol por un lado y buscar el
mximo de los ai por otro. Luego elegir de entre ambos el valor ms cercano a s, que no lo sobrepase.

El algoritmo GR (Random Greedy) consiste en elegir los ai que ingresan a Sol ya no de izquierda a
derecha (sin ordenarlos) sino al azar (obviamente se aaden mientras su suma no supere s).

Se llama GR(t) a la ejecucin t veces del GR y a la seleccin de la mejor solucin de entre las t
obtenidas.

Llamaremos GS (Greedy sorteado) a la ejecucin (con selecciones de izquierda a derecha) del


algoritmo G, pero con la inclusin de un preprocesamiento: Ordenar los ai de modo decreciente.
Ntese que esto aade un tiempo O(nlogn).

Martello y Toth proponen correr el algoritmo G, n veces: Primero con los n elementos de A, luego con
los n-1 elementos (sin contar a1), luego con los n-2 elementos (sin contar a1 ni a2, etc.).

Y elegir la mejor solucin hallada en estas n ejecuciones. Es interesante cmo mejora esta idea al
algoritmo G original.

Dado un nivel de alejamiento de la solucin (error) (0<<1), otros algoritmos dividen los elementos
ai en pequeos (c) y el resto que son los grandes: Y hallan una solucin slo para el conjunto de
elementos grandes.

Johnson propuso obtener todos los subconjuntos de a lo ms (1/ -1) elementos grandes (por ej. con
=0.1 seran subconjuntos de a 10 elementos) y con la mejor aproximacin seguir asignando los otros
elementos pequeos a travs del algoritmo G.
Fischetti sugiere hacer un otro procesamiento con los elementos grandes: Agruparlos en q (1/ -1)
buckets; elegir un elemento de cada bucket; la mejor seleccin ser la que tenga una aproximacin
mayor a s. Se toma ella y los elementos pequeos se asignan a travs del algoritmo G.

Ibarra y Lawler trabajan bajo la idea de escalar los ai grandes y por lo tanto s.

Por ejemplo ai = int(ai/K) donde K=b/n donde b=max{ai}

Los elementos pequeos se asignan a travs del algoritmo G.

Przydatek propone el RGLI(t) (Random Greedy con mejoramiento local Local Improvement-): Por
cada trial obtiene una solucin (por ej. al azar); consideramos cada ai de esa solucin y vemos si
podemos reemplazarlo por otro aj que no est pero que haga la nueva suma ms cercana a s (sin
superarlo). Przydatek se refiere a esto ltimo como el heurstico de Balas y Zemel. Se elige la mejor
solucin de todos los trials.

Kellerer tambin divide los elementos en grandes y pequeos. Estos ltimos se asignan a travs del
algoritmo G.

Con los elementos grandes se plantea una idea que aqu la simplificamos mucho:

Los valores de las columnas en la solucin de programacin dinmica (1..s ) y que hacen intratable al
problema, se reducen (relajan) a otro conjunto ms pequeo. Se dividen el rango [1,s] en k
subintrvalos ]js, (j+1)s] j donde k=ceil(1/), y tomando los relevantes: El menor y el mayor
valor de cada intrvalo.

La complejidad O(ns) cambiar a algo semejante a O(n/).


BIBLIOGRAFA

[0] http://cs.mcgill.ca/~lyepre/pdf/assignment2-solutions/subsetSumNPCompleteness.pdf

[1] Garey Michel, Johnson David. (1979). Computers and intractability: A Guide to the

Theory of NP-Completeness. W.H Freeman and company.

[2] Kellerer H., Pferschy U., D. (2004). Knapsack problems. Springer.

[3] Zhao Chenyu. (2011). Partition problem: A fast greedy solution

http://stackoverflow.com/questions/6669460/the-partition-problem

[4] Mihai Oltean, Oana Muntean. (2009). Solving the subset-sum problem with a light-

based device.

http://www.cs.ubbcluj.ro/~moltean/optical/optical_subset_sum.pdf

[5] Przydatek Bartosz. (2002). A Fast Approximation Algorithm for the Subset-Sum

Problem.

ftp://ftp.inf.ethz.ch/pub/crypto/publications/Przyda02.ps

[6] Ye Yuli, Borodin Allan. (2008). Priority Algorithms for the Subset-Sum Problem.

http://www.cs.toronto.edu/~bor/Papers/priority-subset-sum.pdf

[7] Martello S., Toth P. (1990). Knapsack Problems: Algorithms and Computer

Implementations. Wiley.