Mejora de un problema combinatorio sobre vectores ordenados

10

Click here to load reader

Transcript of Mejora de un problema combinatorio sobre vectores ordenados

Page 1: Mejora de un problema combinatorio sobre vectores ordenados

Mejora de un problema combinatorio sobrevectores ordenados

Javier de la Rosa, [email protected] de Sevilla

3 de agosto de 2010

Resumen

Dado el vector de vectores ((a11, . . . , a1l1), . . . , (an1, . . . , anln)), bus-camos la manera mas eficiente en tiempo y espacio de combinar cadauno de los elementos de cada vector con cada uno de los elementos delos vectores restantes, sin que se repita ninguna combinacion y siendoimportante conservar el orden a fin de obtener la solucion k-esima.Para ello se analiza el conjunto de soluciones modelando el problemacomo un arbol primero y como un grafo despues, obteniendo buenascotas de eficiencia. Sin embargo, la solucion que se propone, soportadapor estructuras de datos auxiliares que tambien seran descritas, es li-geramente mejor debido a que consume menos espacio y con un ordende complejidad en tiempo algo menor, siendo dependiente unicamentedel numero total de elementos.

Keywords Optimizacion Combinatoria, Grafos, Arboles, Matrices

1. Planteamiento.

Como consecuencua de un problema mucho mayor (autocompletado ycombinacion de consultas SQL), se presenta la necesidad de, dado un vectorde vectores, combinar sus elementos entre sı de manera muy eficiente, pueseste calculo llega a convertirse en cuello de botella. No se trata de obteneruna cifra numerica, para lo que podrıa utilizarse la combinatoria habitual,sino de calcular cada uno de los vectores resultantes.

1

Page 2: Mejora de un problema combinatorio sobre vectores ordenados

1.1 Modelando el problema como un arbol. 1 PLANTEAMIENTO.

Sea v el vector definido en 1, donde n es el numero de vectores de entrada yli el cardinal del vector i.

v = ((a11, . . . , a1l1), . . . , (an1, . . . , anln)) (1)

Tenemos que devolver todas las combinaciones ordenadas de cada elemen-to de cada vector con cada elemento de los vectores restantes, de maneraque nuestra solucion venga dada por la expresion 2, y el numero total desoluciones t quede definido por 3.

s =

s1...st

=

(a11, . . . , an1)...

. . ....

(a1l1 , . . . , anln)

(2)

t =n∏i=1

(li) (3)

Ejemplificando, para el vector de entrada w (4) obtendrıamos el conjunto desoluciones m (5).

w = ((a1, a2), (b1, b2), (c1, c2)) (4)

m =

(a1, b1, c1)(a1, b1, c2)(a1, b2, c1)(a1, b2, c2)(a2, b1, c1)(a2, b1, c2)(a2, b2, c1)(a2, b2, c2)

(5)

Se describen a continuacion dos formas de abordar el problema.

1.1. Modelando el problema como un arbol.

Analizando el conjunto de soluciones, puede generarse un arbol a partirde un nodo raız que tenga tantas ramas como elementos el primer vector, ypara cada elemento del segundo vector, anadir ramas con los elementos deltercero, etc. De manera que recorriendo las hojas del arbol resultante (figura

2

Page 3: Mejora de un problema combinatorio sobre vectores ordenados

1.2 Modelando el problema como un grafo. 1 PLANTEAMIENTO.

1.1) se obtengan en los caminos seguidos desde la raız las combinaciones queconforman la solucion.

root

kkkkkkkkkkkkkkkk

���

RRRRRRRRRRRRRRRR

a11

zzzzzzzz

���

EEEEEEEE · · ·

��� a1l1

yyyyyyyy

���

FFFFFFFF

an1 · · · anln · · · an1 · · · anln

La unica manera de obtener todas las soluciones usando esta forma deatacar el problema es recorriendo todos los caminos posibles. Usando paraello un algoritmo simple de busqueda en profundidad [1] que recorra todos losnodos obtendrıamos un tiempo O(|V |+ |E|), con el conocido uso de espaciode orden O(|V |). Esto que a priori puede parecer una buena aproximacion,se complica en el momento en que se calculan los valores de |V | y |E|. Paranuestro caso, en el nivel 1 del arbol tenemos l1 nodos; en el 2 habrıa l2 nodospor cada nodo en l1, esto es, l1l2 nodos; de esta manera, el numero de nodosdel nivel i vendrıa definido por 6 y el total queda expresado en 7. Sin necesidadde calcular |E| podemos concluir que el orden espacial es demasiado elevado.

|V |i =⇒n∏i=1

(li) (6)

|V | =n∏j=1

(

j∏i=1

(li)) (7)

1.2. Modelando el problema como un grafo.

Construido el grafo de la figura 1.2 podemos reducir el problema a recorrertodos sus caminos posibles. Dado que se trata de un grafo dirigido y noponderado, pero del que conocemos los nodos de inicio y final, partimosde cada uno de los elementos de a1 y calculamos los caminos posibles delongitud n que terminan en algun elemento de an. Una simple ponderacionde 1 sobre el conjunto de aristas permite aplicar el algoritmo de Dijsktra [2] l1veces hasta obtener todos las soluciones, con lo que la complejidad de nuevodepende del numero de vertices y aristas. Si bien el primero de estos valores

3

Page 4: Mejora de un problema combinatorio sobre vectores ordenados

2 SOLUCION BASADA EN PATRONES.

se corresponde con lo expresado en 8 (el menor posible), el numero de aristases algo mas complejo de calcular. Sabemos que solo existen aristas entre loselementos de cada par de vectores ai y ai+1 y que ademas estos forman unsubgrafo bipartido en el que los nodos de ai+1 son sumideros, luego el numerode aristas que une cada uno de estos sera lili+1. Si hay n−1 grafos bipartidos,el numero total de aristas vendra dado por la expresion 9.

ONMLHIJKa11

�����

��??

??

?

''OOOOOOOOOONMLHIJK· · ·

����

��

�����

��??

??

?ONMLHIJKa1l1

wwo o o o o o o o o

����

��

�����

ONMLHIJKan1 ONMLHIJK· · · ONMLHIJKanln

|V | =n∑i=1

(li) (8)

|E| =n−1∑i=1

(lili+1) (9)

De lo que podemos afirmar que se trata de un grafo denso [4] y, por tanto,susceptible de aplicar la mejora de montıculos de Fibonacci [3] que nos dauna complejidad en tiempo O(|E|+|V | log |V |). Puede apreciarse la reducciondel orden de complejidad, al que en realidad habrıa que anadir la creacionde la estructura en grafo necesaria para una correcta estimacion del espacionecesario. Sin embargo, estos resultados siguen estando por debajo de lasolucion propuesta, por lo que el desarrollo de la obtencion de la cota espacialquedan fuera de este documento.

2. Solucion basada en patrones.

La solucion que proponemos plantea el problema tomando el conjunto desalida como la traspuesta de la matriz S, donde S se define en 10.

S =

a11 . . . an1...

. . ....

a1l1 . . . anln

=⇒ ST =

a11 . . . a1l1...

. . ....

an1 . . . anln

(10)

Cada fila de la matriz traspuesta solo contiene elementos de un unico vectorsiguiendo el patron dado por las expresiones regulares de 11, de forma que ri

4

Page 5: Mejora de un problema combinatorio sobre vectores ordenados

2.1 Conjunto de soluciones. 2 SOLUCION BASADA EN PATRONES.

representa el numero de veces que se repite cada elemento dentro del grupoy r′i indica las veces que el grupo se repite al completo. Al examinar E seaprecia que la longitud de cada ei es igual al numero total de soluciones, porlo que los ındices r y r′ estan relacionados con t y li como se expresa en 12.

ST =⇒ E =

e1...en

=

(ar111 . . . ar11l1

)r′1

...(arnn1 . . . a

rnnln

)r′n

(11)

lirir′i = t (12)

Por construccion, la definion de r es recursiva tal y como se expresa en 13,pero su formulacion nos permite demostrar por induccion la validez de lasexpresiones 14 y 15 (dadas las ρi como se indican en 16).

ri =

{1 ⇔ i = n

li−1ri−1 ⇔ i 6= n(13)

ri =ρili

(14)

r′i =t

ρi(15)

ρi =n∏j=i

(lj) (16)

2.1. Conjunto de soluciones.

Una vez hallados los vectores auxiliares r y r′, obtener un procedimientopara generar el conjunto de soluciones de una sola atacada (en una unica ite-racion por todos los elementos de v) es relativamente sencillo. Analizando unpoco la algoritmia necesaria, en realidad solo hay que pre-calcular los valoresde n y t y los vectores l y r, ya que en cada iteracion los valores de r′i sevan calculando y eliminando, con el consecuente ahorro que supone no man-tener otro vector completo en memoria. Finalmente, nuestro procedimientoquedarıa como se muestra en el algoritmo 1.

5

Page 6: Mejora de un problema combinatorio sobre vectores ordenados

2.2 Solucion k-esima. 2 SOLUCION BASADA EN PATRONES.

Algorithm 1 Algoritmo para la obtencion del conjunto de soluciones

Require: v ← ((a11, . . . , a1l1), . . . , (an1, . . . , anln))Ensure: S ← (s1, ..., st)n← |v|l← (|a1|, . . . , |an|)t←

∏ni=1(li)

r ← {Vector definido en 13}for i from 1 to n dof ← {Vector vacıo}for j from 1 to li dof ← f ∪ (aij)

ri

end forr′i ← t

|f |k ← |S|+ 1sTk ← (f)r

′i

end forreturn ST

Analisis de complejidad. Si obviamos la trasposicion de la matriz deresultados S, realmente no necesaria (las soluciones estarıan en las columnasen lugar de en las filas), este algoritmo itera por todos los elementos de v,por lo que su orden de complejidad es el mınimo de los expuestos hasta elmomento tal y como refleja 17.

O(n∑i=1

li) (17)

En cambio, para la estimacion es espacio obtenemos 18

O(nt) = O(nn∏i=1

(li)) = O(n∏i=1

(lin√n)) (18)

2.2. Solucion k-esima.

Otra de las ventajas de este planteamiento no contempladas en 1.1 o 1.2,es la obtencion de la solucion k-esima, huelga decir que sin calcular previa-mente todo el conjunto de soluciones. Observando 11 y aplicando los mismosconceptos, para un determinado k (equivalente a seleccionar la columna k de

6

Page 7: Mejora de un problema combinatorio sobre vectores ordenados

2.2 Solucion k-esima. 2 SOLUCION BASADA EN PATRONES.

ST , esto es, sTk ), existe un vector ι con cardinal n que contiene los ındicesde cada ai por los cuales se obtienen en orden los elementos implicados en lak-esima solucion; cada una de las ιi viene expresada en funcion de k por laformula 19.

ιi(k) = bk mod liriri

c (19)

Ası, la formula general para la obtencion de la k-esima solucion se define en 20y un procedimiento para la obtencion del conjunto de soluciones basado enla funcion ιi(k) se muestra en el algoritmo 2.

sk = (a1ι1(k), . . . , anιn(k)) (20)

Algorithm 2 Algoritmo basado en la solucion k-esima

Require: v ← ((a11, . . . , a1l1), . . . , (an1, . . . , anln))Ensure: S ← (s1, ..., st)n← |v|l← (|a1|, . . . , |an|)t←

∏ni=1(li)

r ← {Vector definido en 13}for k from 1 to t do

for i from 1 to n doιi ← bk mod liri

ric

ski ← aiιiend for

end forreturn S

Analisis de complejidad. No resulta difıcil ver que la cota asintoticasuperior del algoritmo anterior es, tanto en tiempo como espacio, la expresadaen 21, es decir, peor cota temporal que para el algoritmo 1.

O(nt) (21)

7

Page 8: Mejora de un problema combinatorio sobre vectores ordenados

4 CONCLUSION.

3. Experimentacion.

Los resultados anteriores son facilmente verificables tras la ejecucion dealgunos experimentos. De manera no exhaustiva, podemos someter ambosalgoritmos a un conjunto de datos aleatorio que cuente con variedades de vpara determinados valores de n y t. Como muestra el cuadro 3, para valorespequenos de n el tiempo necesario para completar el proceso parece fluctuarentre uno y otro, quedando sensiblemente peor puntuado el algoritmo 2. Sinembargo, a medida que n aumenta y lo hace consecuentemente t, es evidenteque el algoritmo 1 presenta mejores resultados, llegando, para valores den > 6, a superar a su competidor en mas del 90 % de las ocasiones, resultadoque cuadra perfectamente con el estudio teorico. No obstante, es evidente que

No exp. n Valor medio t ln % mas rapido 1 % mas rapido 2

109 2 46,52 6,78 89,91 % 10,09 %121 3 275,53 6,59 68,60 % 31,40 %104 4 1 342,37 6,04 50,96 % 49,04 %95 5 10 405,91 6,52 56,84 % 43,16 %113 6 66 496,30 6,45 69,03 % 30,97 %106 7 485 391,86 6,50 92,45 % 7,55 %105 8 2 354 423,58 6,38 95,24 % 4,76 %

Cuadro 1: Estadısticas de la experimentacion

son necesarios mas experimentos para obtener resultados contundentes, puesen nuestro caso no se han tenido en cuenta vectores de entrada con valoresde ln por encima de 11.

4. Conclusion.

A lo largo de este documento se han analizado distintas formas de abor-dar un problema de optimizacion combinatoria para, finalmente, proponeruna solucion satisfactoria a partir de los patrones descritos en la solucion.Ademas, se ha dado un metodo general para la obtencion de la k-esima so-lucion que, si a priori podrıa parecer una mejor aproximacion, los calculosposteriores y la experimentacion han demostrado ser peor que el primero delos procedimientos expuestos.

8

Page 9: Mejora de un problema combinatorio sobre vectores ordenados

4 CONCLUSION.

Finalmente, combinando los dos algoritmos, podemos obtener una funcionen el lenguaje de programacion Python que sea capaz de, dada una lista delistas en items y un valor opcional en k, devolver una lista de listas con todaslas soluciones o la solucion que ocupa el k-esimo lugar si un valor para k esproporcionado. El resultado se muestra en 4.

def combine ( items , k=None ) :”””Create a matrix in wich each row i s a t u p l e con ta in ingone o f s o l u t i o n s or k−esima s o l u t i o n .”””l eng th i t ems = len ( items )l eng th s = [ l en ( i ) for i in i tems ]l ength = reduce ( lambda x , y : x ∗ y , l eng th s )r epea t s = [ reduce ( lambda x , y : x ∗ y , l eng th s [ i : ] )

for i in range (1 , l eng th i t ems ) ] + [ 1 ]i f k i s not None :

k = k % length# Python d i v i s i o n i s i n t e g e r d i v i s i o n by d e f a u l ti n d i c e s = [ ( k % ( l eng th s [ i ] ∗ r epea t s [ i ] ) ) / r epea t s [ i ]

for i in range ( l eng th i t ems ) ]return [ i tems [ i ] [ i n d i c e s [ i ] ]

for i in range ( l eng th i t ems ) ]else :

matrix = [ ]for i , item in enumerate ( items ) :

row = [ ]for subset in item :

row . extend ( [ subset ] ∗ r epea t s [ i ] )t imes = length / l en ( row )matrix . append ( row ∗ t imes )

# Transpose the matrix or re turn columns in s t ead rowsreturn z ip (∗matrix )

9

Page 10: Mejora de un problema combinatorio sobre vectores ordenados

REFERENCIAS REFERENCIAS

Referencias

[1] Knuth, Donald E. (1997). The Art Of Computer Programming. Vol 1. 3rded., Boston: Addison-Wesley, ISBN 0-201-89683-4, OCLC 155842391

[2] Dijkstra, E. W. (1959). A note on two problems in connexion with graphs.Numerische Mathematik 1, pp 269-271.

[3] Fredman M. L. & Tarjan R. E. (1987). Fibonacci heaps and their uses inimproved network optimization algorithms. Journal of the ACM 34(3), pp596-615.

[4] Black, P. E. Dictionary of Algorithms and Data Structures, Paul E.Black (ed.), NIST. http://www.itl.nist.gov/div897/sqg/dads/HTML/sparsegraph.html Accedido el 1 de agosto de 2010.

10