SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
Mejora de un problema combinatorio sobre
                vectores ordenados
                        Javier de la Rosa, versae@us.es
                             Universidad de Sevilla
                                  3 de agosto de 2010

                                            Resumen
          Dado el vector de vectores ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln )), bus-
      camos la manera m´s eficiente en tiempo y espacio de combinar cada
                          a
      uno de los elementos de cada vector con cada uno de los elementos de
      los vectores restantes, sin que se repita ninguna combinaci´n y siendo       o
      importante conservar el orden a fin de obtener la soluci´n k-´sima.           o      e
      Para ello se analiza el conjunto de soluciones modelando el problema
      como un ´rbol primero y como un grafo despu´s, obteniendo buenas
                a                                                e
      cotas de eficiencia. Sin embargo, la soluci´n que se propone, soportada
                                                      o
      por estructuras de datos auxiliares que tambi´n ser´n descritas, es li-
                                                              e        a
      geramente mejor debido a que consume menos espacio y con un orden
      de complejidad en tiempo algo menor, siendo dependiente unicamente           ´
      del n´mero total de elementos.
           u

                                            ´
Keywords Optimizaci´n Combinatoria, Grafos, Arboles, Matrices
                   o


1.     Planteamiento.
    Como consecuencua de un problema mucho mayor (autocompletado y
combinaci´n de consultas SQL), se presenta la necesidad de, dado un vector
          o
de vectores, combinar sus elementos entre s´ de manera muy eficiente, pues
                                             ı
este c´lculo llega a convertirse en cuello de botella. No se trata de obtener
      a
una cifra num´rica, para lo que podr´ utilizarse la combinatoria habitual,
                e                      ıa
sino de calcular cada uno de los vectores resultantes.

                                                  1
1.1 Modelando el problema como un arbol.
                                  ´                                 1 PLANTEAMIENTO.


Sea v el vector definido en 1, donde n es el n´mero de vectores de entrada y
                                             u
li 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 manera
que nuestra soluci´n venga dada por la expresi´n 2, y el n´mero total de
                  o                              o        u
soluciones t quede definido por 3.
                                                    
                          s1      (a11 , . . . , an1 )
                     s=.= .            ..       . 
                        .  .                    . 
                           .        .         .    .                 (2)
                                st            (a1l1 , . . . , anln )
                                                n
                                         t=          (li )                        (3)
                                               i=1

Ejemplificando, para el vector de entrada w (4) obtendr´         ıamos el conjunto de
soluciones m (5).
                       w = ((a1 , a2 ), (b1 , b2 ), (c1 , c2 ))                  (4)
                                                     
                                   (a1 , b1 , c1 )
                               (a1 , b1 , c2 )
                                                     
                               (a1 , b2 , c1 )
                                                     
                               (a1 , b2 , c2 )
                          m=                                                  (5)
                                  (a2 , b1 , c1 )   
                               (a2 , b1 , c2 )
                                                     
                               (a2 , b2 , c1 )
                                   (a2 , b2 , c2 )
Se describen a continuaci´n dos formas de abordar el problema.
                         o

1.1.    Modelando el problema como un ´rbol.
                                      a
    Analizando el conjunto de soluciones, puede generarse un arbol a partir
                                                                ´
de un nodo ra´ que tenga tantas ramas como elementos el primer vector, y
               ız
para cada elemento del segundo vector, a˜adir ramas con los elementos del
                                          n
tercero, etc. De manera que recorriendo las hojas del arbol resultante (figura
                                                      ´



                                                2
1.2 Modelando el problema como un grafo.                                1 PLANTEAMIENTO.


1.1) se obtengan en los caminos seguidos desde la ra´ las combinaciones que
                                                    ız
conforman la soluci´n.
                   o

                                           k root RRRR
                                                 
                                        kkk                RRR
                                   kkkkk                     RRR
                                                                 RRR
                              kk kk                                RRR
                           kkk
                      a11 E                   · · ·                     a1l1
                     z  EE                                             y  FFF
                  zzz       EE                                     yyy      FF
                zz             EE                                  yy            FF
              zz                E                              yy               F
        an1          ···         anln          ···                an1     ···      anln

   La unica manera de obtener todas las soluciones usando esta forma de
       ´
atacar el problema es recorriendo todos los caminos posibles. Usando para
ello un algoritmo simple de b´squeda en profundidad [1] que recorra todos los
                              u
nodos obtendr´  ıamos un tiempo O(|V | + |E|), con el conocido uso de espacio
de orden O(|V |). Esto que a priori puede parecer una buena aproximaci´n,    o
se complica en el momento en que se calculan los valores de |V | y |E|. Para
nuestro caso, en el nivel 1 del ´rbol tenemos l1 nodos; en el 2 habr´ l2 nodos
                                a                                    ıa
por cada nodo en l1 , esto es, l1 l2 nodos; de esta manera, el n´mero de nodos
                                                                u
del nivel i vendr´ definido por 6 y el total queda expresado en 7. Sin necesidad
                  ıa
de calcular |E| podemos concluir que el orden espacial es demasiado elevado.
                                                        n
                                        |V |i =⇒              (li )                       (6)
                                                        i=1

                                               n        j
                                     |V | =         (       (li ))                        (7)
                                              j=1 i=1


1.2.    Modelando el problema como un grafo.
   Construido el grafo de la figura 1.2 podemos reducir el problema a recorrer
todos sus caminos posibles. Dado que se trata de un grafo dirigido y no
ponderado, pero del que conocemos los nodos de inicio y final, partimos
de cada uno de los elementos de a1 y calculamos los caminos posibles de
longitud n que terminan en alg´n elemento de an . Una simple ponderaci´n
                                  u                                           o
de 1 sobre el conjunto de aristas permite aplicar el algoritmo de Dijsktra [2] l1
veces hasta obtener todos las soluciones, con lo que la complejidad de nuevo
depende del n´mero de v´rtices y aristas. Si bien el primero de estos valores
               u          e

                                                3
´
                                    2 SOLUCION BASADA EN PATRONES.


se corresponde con lo expresado en 8 (el menor posible), el n´mero de aristas
                                                                u
es algo m´s complejo de calcular. Sabemos que s´lo existen aristas entre los
          a                                           o
elementos de cada par de vectores ai y ai+1 y que adem´s ´stos forman un
                                                             a e
subgrafo bipartido en el que los nodos de ai+1 son sumideros, luego el n´mero
                                                                          u
de aristas que une cada uno de estos ser´ li li+1 . Si hay n−1 grafos bipartidos,
                                        a
el n´mero total de aristas vendr´ dado por la expresi´n 9.
    u                             a                        o

                            HIJK
                            ONML
                             a11 O          ONML
                                            HIJK
                                               ···       ONML
                                                         HIJK
                                                           a1l1
                               ? ?O O   ? o o o ? 
                                        ? O O o ?
                                                 
                                         ? o o O ? 
                                        o ?      O
                                                             
                            HIJK
                            ONML            ONML
                                            HIJK         ONML
                                                         HIJK
                                     o
                                      wo           O O? 
                                                         '
                             an1               ···         anln

                                                n
                                   |V | =           (li )                    (8)
                                             i=1
                                          n−1
                                 |E| =           (li li+1 )                  (9)
                                           i=1

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 da
una complejidad en tiempo O(|E|+|V | log |V |). Puede apreciarse la reducci´no
del orden de complejidad, al que en realidad habr´ que a˜adir la creaci´n
                                                      ıa      n              o
de la estructura en grafo necesaria para una correcta estimaci´n del espacio
                                                                 o
necesario. Sin embargo, estos resultados siguen estando por debajo de la
soluci´n propuesta, por lo que el desarrollo de la obtenci´n de la cota espacial
      o                                                   o
quedan fuera de este documento.


2.     Soluci´n basada en patrones.
             o
    La soluci´n que proponemos plantea el problema tomando el conjunto de
             o
salida como la traspuesta de la matriz S, donde S se define en 10.
                                                            
                   a11 . . . an1                a11 . . . a1l1
            S =  . ...        .  =⇒ S T =  . . .        . 
                  .           . 
                    .          .               ..      .  . 
                                                           .         (10)
                   a1l1 . . . anln              an1 . . . anln
Cada fila de la matriz traspuesta s´lo contiene elementos de un unico vector
                                   o                             ´
siguiendo el patr´n dado por las expresiones regulares de 11, de forma que ri
                 o

                                            4
2.1 Conjunto de soluciones.              ´
                                 2 SOLUCION BASADA EN PATRONES.


representa el n´mero de veces que se repite cada elemento dentro del grupo
                u
y ri indica las veces que el grupo se repite al completo. Al examinar E se
aprecia que la longitud de cada ei es igual al n´mero total de soluciones, por
                                                 u
lo que los ´
           ındices r y r est´n relacionados con t y li como se expresa en 12.
                            a
                                   r                          
                                   e1        (a11 . . . ar11 )r1
                                                1
                                                         1l
                  S T =⇒ E =  .  =                 .
                                .                  .                   (11)
                                                                 
                                    .                 .          
                                               rn        rn rn
                                   en       (an1 . . . anln )

                                   li ri ri = t                           (12)
Por construcci´n, la defini´n de r es recursiva tal y como se expresa en 13,
              o           o
pero su formulaci´n nos permite demostrar por inducci´n la validez de las
                  o                                     o
expresiones 14 y 15 (dadas las ρi como se indican en 16).

                                 1              ⇔i=n
                          ri =                                            (13)
                                 li−1 ri−1      ⇔i=n
                                         ρi
                                    ri =                                  (14)
                                         li
                                         t
                                    ri =                                  (15)
                                         ρi
                                         n
                                 ρi =         (lj )                       (16)
                                        j=i


2.1.    Conjunto de soluciones.
    Una vez hallados los vectores auxiliares r y r , obtener un procedimiento
para generar el conjunto de soluciones de una sola atacada (en una unica ite-
                                                                     ´
raci´n por todos los elementos de v) es relativamente sencillo. Analizando un
    o
poco la algoritmia necesaria, en realidad s´lo hay que pre-calcular los valores
                                           o
de n y t y los vectores l y r, ya que en cada iteraci´n los valores de ri se
                                                        o
van calculando y eliminando, con el consecuente ahorro que supone no man-
tener otro vector completo en memoria. Finalmente, nuestro procedimiento
quedar´ como se muestra en el algoritmo 1.
       ıa




                                        5
2.2 Soluci´n k-´sima.
          o    e                        ´
                                2 SOLUCION BASADA EN PATRONES.


Algorithm 1 Algoritmo para la obtenci´n del conjunto de soluciones
                                                     o
Require: v ← ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln ))
Ensure: S ← (s1 , ..., st )
 n ← |v|
 l ← (|a1 |, . . . , |an |)
 t ← n (li )
         i=1
 r ← {Vector definido en 13}
 for i from 1 to n do
   f ← {Vector vac´         ıo}
   for j from 1 to li do
      f ← f ∪ (aij )ri
   end for
           t
   ri ← |f |
   k ← |S| + 1
   sT ← (f )ri
    k
 end for
 return S T

An´lisis de complejidad. Si obviamos la trasposici´n de la matriz de
    a                                                     o
resultados S, realmente no necesaria (las soluciones estar´ en las columnas
                                                          ıan
en 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 el
momento tal y como refleja 17.
                                        n
                                  O(         li )                       (17)
                                       i=1

En cambio, para la estimaci´n es espacio obtenemos 18
                           o
                                  n                  n
                                                              √
                   O(nt) = O(n         (li )) = O(         (li n n))    (18)
                                 i=1                 i=1


2.2.    Soluci´n k-´sima.
              o    e
    Otra de las ventajas de este planteamiento no contempladas en 1.1 o 1.2,
                                                                       ´
es la obtenci´n de la soluci´n k-´sima, huelga decir que sin calcular previa-
             o              o     e
mente todo el conjunto de soluciones. Observando 11 y aplicando los mismos
conceptos, para un determinado k (equivalente a seleccionar la columna k de

                                        6
2.2 Soluci´n k-´sima.
          o    e                                ´
                                        2 SOLUCION BASADA EN PATRONES.


S T , esto es, sT ), existe un vector ι con cardinal n que contiene los ´
                k                                                       ındices
de cada ai por los cuales se obtienen en orden los elementos implicados en la
k-´sima soluci´n; cada una de las ιi viene expresada en funci´n de k por la
   e            o                                               o
f´rmula 19.
 o
                                          k m´d li ri
                                             o
                               ιi (k) =                                    (19)
                                             ri
As´ la f´rmula general para la obtenci´n de la k-´sima soluci´n se define en 20
    ı,   o                                o           e      o
y un procedimiento para la obtenci´n del conjunto de soluciones basado en
                                        o
la funci´n ιi (k) se muestra en el algoritmo 2.
         o

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



Algorithm 2 Algoritmo basado en la soluci´n k-´sima         o      e
Require: v ← ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln ))
Ensure: S ← (s1 , ..., st )
 n ← |v|
 l ← (|a1 |, . . . , |an |)
 t ← n (li )
         i=1
 r ← {Vector definido en 13}
 for k from 1 to t do
   for i from 1 to n do
      ιi ← k m´d li ri
                     o
                     ri
      ski ← aiιi
   end for
 end for
 return S



An´lisis de complejidad. No resulta dif´ ver que la cota asint´tica
   a                                            ıcil                      o
superior del algoritmo anterior es, tanto en tiempo como espacio, la expresada
en 21, es decir, peor cota temporal que para el algoritmo 1.

                                             O(nt)                        (21)




                                                7
´
                                                          4 CONCLUSION.


3.    Experimentaci´n.
                   o
   Los resultados anteriores son f´cilmente verificables tras la ejecuci´n de
                                  a                                    o
algunos experimentos. De manera no exhaustiva, podemos someter ambos
algoritmos a un conjunto de datos aleatorio que cuente con variedades de v
para determinados valores de n y t. Como muestra el cuadro 3, para valores
peque˜os de n el tiempo necesario para completar el proceso parece fluctuar
      n
entre uno y otro, quedando sensiblemente peor puntuado el algoritmo 2. Sin
embargo, a medida que n aumenta y lo hace consecuentemente t, es evidente
que el algoritmo 1 presenta mejores resultados, llegando, para valores de
n  6, a superar a su competidor en m´s del 90 % de las ocasiones, resultado
                                      a
que cuadra perfectamente con el estudio te´rico. No obstante, es evidente que
                                          o

  No exp. n Valor medio t ln             % m´s r´pido 1
                                            a a           % m´s r´pido 2
                                                             a a
   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 experimentaci´n
                                                         o

son necesarios m´s experimentos para obtener resultados contundentes, pues
                a
en nuestro caso no se han tenido en cuenta vectores de entrada con valores
de ln por encima de 11.


4.    Conclusi´n.
              o
    A lo largo de este documento se han analizado distintas formas de abor-
dar un problema de optimizaci´n combinatoria para, finalmente, proponer
                                  o
una soluci´n satisfactoria a partir de los patrones descritos en la soluci´n.
           o                                                              o
Adem´s, se ha dado un m´todo general para la obtenci´n de la k-´sima so-
      a                    e                            o          e
luci´n que, si a priori podr´ parecer una mejor aproximaci´n, los c´lculos
    o                        ıa                              o        a
posteriores y la experimentaci´n han demostrado ser peor que el primero de
                                o
los procedimientos expuestos.


                                     8
´
                                                           4 CONCLUSION.


   Finalmente, combinando los dos algoritmos, podemos obtener una funci´n     o
en el lenguaje de programaci´n Python que sea capaz de, dada una lista de
                              o
listas en items y un valor opcional en k, devolver una lista de listas con todas
las soluciones o la soluci´n que ocupa el k-´simo lugar si un valor para k es
                          o                  e
proporcionado. El resultado se muestra en 4.

def combine ( items , k=None ) :
    ”””
    Create a m a t r i x i n wich each row i s a t u p l e c o n t a i n i n g
    one o f s o l u t i o n s or k−esima s o l u t i o n .
    ”””
    length items = len ( items )
    l e n g t h s = [ l e n ( i ) for i in i t e m s ]
    l e n g t h = r e d u c e (lambda x , y : x ∗ y , l e n g t h s )
    r e p e a t s = [ r e d u c e (lambda x , y : x ∗ y , l e n g t h s [ i : ] )
                        for i in range ( 1 , l e n g t h i t e m s ) ] + [ 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 t
            indices = [ ( k % ( lengths [ i ] ∗ repeats [ i ] ) ) / repeats [ i ]
                              for i in range ( l e n g t h i t e m s ) ]
            return [ i t e m s [ i ] [ i n d i c e s [ i ] ]
                          for i in range ( l e n g t h i t e m s ) ]
    else :
            matrix = [ ]
            for i , item in enumerate ( i t e m s ) :
                  row = [ ]
                  for s u b s e t in item :
                          row . extend ( [ s u b s e t ] ∗ r e p e a t s [ i ] )
                  t i m e s = l e n g t h / l e n ( row )
                  matrix . append ( row ∗ t i m e s )
           # Transpose t h e m a t r i x or r e t u r n columns i n s t e a d rows
            return z i p (∗ matrix )




                                       9
REFERENCIAS                                                REFERENCIAS


Referencias
[1] Knuth, Donald E. (1997). The Art Of Computer Programming. Vol 1. 3rd
    ed., 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 in
    improved network optimization algorithms. Journal of the ACM 34(3), pp
    596-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

Más contenido relacionado

La actualidad más candente (18)

2 geometría analítica
2 geometría analítica2 geometría analítica
2 geometría analítica
 
Integración múltiple
Integración múltipleIntegración múltiple
Integración múltiple
 
series de fourier
series de fourierseries de fourier
series de fourier
 
Cap5 lec2
Cap5 lec2Cap5 lec2
Cap5 lec2
 
Aplicaciones e.diferenciales
Aplicaciones e.diferencialesAplicaciones e.diferenciales
Aplicaciones e.diferenciales
 
Desigualdades e inecuaciones
Desigualdades e inecuacionesDesigualdades e inecuaciones
Desigualdades e inecuaciones
 
Vector
VectorVector
Vector
 
Cap4
Cap4Cap4
Cap4
 
Geometriaanalitica
GeometriaanaliticaGeometriaanalitica
Geometriaanalitica
 
Cap1
Cap1Cap1
Cap1
 
Sencosen
SencosenSencosen
Sencosen
 
Formulario ecuaciones diferenciales 2
Formulario ecuaciones diferenciales 2Formulario ecuaciones diferenciales 2
Formulario ecuaciones diferenciales 2
 
Solucionparcial2 Cvusta2009 02
Solucionparcial2 Cvusta2009 02Solucionparcial2 Cvusta2009 02
Solucionparcial2 Cvusta2009 02
 
Metodos iterativos
Metodos iterativosMetodos iterativos
Metodos iterativos
 
Capitulo 2 libroinvestigación
Capitulo 2 libroinvestigaciónCapitulo 2 libroinvestigación
Capitulo 2 libroinvestigación
 
Tema ii integrales uts
Tema ii integrales utsTema ii integrales uts
Tema ii integrales uts
 
Semana 12
Semana 12Semana 12
Semana 12
 
Integracion multiple
Integracion multipleIntegracion multiple
Integracion multiple
 

Similar a Mejora de un problema combinatorio sobre vectores ordenados

Similar a Mejora de un problema combinatorio sobre vectores ordenados (20)

2012 01 26
2012 01 262012 01 26
2012 01 26
 
Algebra Enero2007 Primer Parcial
Algebra Enero2007 Primer ParcialAlgebra Enero2007 Primer Parcial
Algebra Enero2007 Primer Parcial
 
Matemática discreta
Matemática discretaMatemática discreta
Matemática discreta
 
Factorizacion.pdf
Factorizacion.pdfFactorizacion.pdf
Factorizacion.pdf
 
Sec 0016 factorizacion
Sec 0016 factorizacionSec 0016 factorizacion
Sec 0016 factorizacion
 
Sec 0016 factorizacion
Sec 0016 factorizacionSec 0016 factorizacion
Sec 0016 factorizacion
 
Met iterativos
Met iterativosMet iterativos
Met iterativos
 
M1pr3 (1)
M1pr3 (1)M1pr3 (1)
M1pr3 (1)
 
Calculo vectorial-washington-armas
Calculo vectorial-washington-armasCalculo vectorial-washington-armas
Calculo vectorial-washington-armas
 
Álgebra Lineal - ESPOL - Angel Guale
Álgebra Lineal - ESPOL - Angel GualeÁlgebra Lineal - ESPOL - Angel Guale
Álgebra Lineal - ESPOL - Angel Guale
 
Sucesiones
SucesionesSucesiones
Sucesiones
 
Capítulo 1 3ra parte (vectores).pdf
Capítulo 1 3ra parte  (vectores).pdfCapítulo 1 3ra parte  (vectores).pdf
Capítulo 1 3ra parte (vectores).pdf
 
Met iterativos
Met iterativosMet iterativos
Met iterativos
 
Jacobi y gauss
Jacobi y gaussJacobi y gauss
Jacobi y gauss
 
Determinantes, inversas y producto cruz
Determinantes, inversas y producto cruzDeterminantes, inversas y producto cruz
Determinantes, inversas y producto cruz
 
E.F. 1214-2010-I
E.F. 1214-2010-IE.F. 1214-2010-I
E.F. 1214-2010-I
 
Estudio del espín mediante la notación de Dirac
Estudio del espín mediante la notación de DiracEstudio del espín mediante la notación de Dirac
Estudio del espín mediante la notación de Dirac
 
Examen Álgebra Lineal 2P 2017 IT
Examen Álgebra Lineal 2P 2017 ITExamen Álgebra Lineal 2P 2017 IT
Examen Álgebra Lineal 2P 2017 IT
 
7. complejos
7. complejos7. complejos
7. complejos
 
Aplicaciones lineales
Aplicaciones linealesAplicaciones lineales
Aplicaciones lineales
 

Más de Javier de la Rosa

Graph Databases in Python (PyCon Canada 2012)
Graph Databases in Python (PyCon Canada 2012)Graph Databases in Python (PyCon Canada 2012)
Graph Databases in Python (PyCon Canada 2012)Javier de la Rosa
 
Neutralización de /l/ por /r/
Neutralización de /l/ por /r/Neutralización de /l/ por /r/
Neutralización de /l/ por /r/Javier de la Rosa
 
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...Javier de la Rosa
 
Databases evolution in CulturePlex Lab
Databases evolution in CulturePlex LabDatabases evolution in CulturePlex Lab
Databases evolution in CulturePlex LabJavier de la Rosa
 
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"Javier de la Rosa
 

Más de Javier de la Rosa (6)

Dr. Glearning for FirefoxOS
Dr. Glearning for FirefoxOSDr. Glearning for FirefoxOS
Dr. Glearning for FirefoxOS
 
Graph Databases in Python (PyCon Canada 2012)
Graph Databases in Python (PyCon Canada 2012)Graph Databases in Python (PyCon Canada 2012)
Graph Databases in Python (PyCon Canada 2012)
 
Neutralización de /l/ por /r/
Neutralización de /l/ por /r/Neutralización de /l/ por /r/
Neutralización de /l/ por /r/
 
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...
BaroqueArt at Arts, Humanities, and Complex Networks — 2nd Leonardo satellite...
 
Databases evolution in CulturePlex Lab
Databases evolution in CulturePlex LabDatabases evolution in CulturePlex Lab
Databases evolution in CulturePlex Lab
 
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"
Presentation of "Hybrid Page Layout Analysis via Tab-Stop Detection"
 

Mejora de un problema combinatorio sobre vectores ordenados

  • 1. Mejora de un problema combinatorio sobre vectores ordenados Javier de la Rosa, versae@us.es Universidad de Sevilla 3 de agosto de 2010 Resumen Dado el vector de vectores ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln )), bus- camos la manera m´s eficiente en tiempo y espacio de combinar cada a uno de los elementos de cada vector con cada uno de los elementos de los vectores restantes, sin que se repita ninguna combinaci´n y siendo o importante conservar el orden a fin de obtener la soluci´n k-´sima. o e Para ello se analiza el conjunto de soluciones modelando el problema como un ´rbol primero y como un grafo despu´s, obteniendo buenas a e cotas de eficiencia. Sin embargo, la soluci´n que se propone, soportada o por estructuras de datos auxiliares que tambi´n ser´n descritas, es li- e a geramente mejor debido a que consume menos espacio y con un orden de complejidad en tiempo algo menor, siendo dependiente unicamente ´ del n´mero total de elementos. u ´ Keywords Optimizaci´n Combinatoria, Grafos, Arboles, Matrices o 1. Planteamiento. Como consecuencua de un problema mucho mayor (autocompletado y combinaci´n de consultas SQL), se presenta la necesidad de, dado un vector o de vectores, combinar sus elementos entre s´ de manera muy eficiente, pues ı este c´lculo llega a convertirse en cuello de botella. No se trata de obtener a una cifra num´rica, para lo que podr´ utilizarse la combinatoria habitual, e ıa sino de calcular cada uno de los vectores resultantes. 1
  • 2. 1.1 Modelando el problema como un arbol. ´ 1 PLANTEAMIENTO. Sea v el vector definido en 1, donde n es el n´mero de vectores de entrada y u li 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 manera que nuestra soluci´n venga dada por la expresi´n 2, y el n´mero total de o o u soluciones t quede definido por 3.     s1 (a11 , . . . , an1 ) s=.= . .. .  .  . .  . . . . (2) st (a1l1 , . . . , anln ) n t= (li ) (3) i=1 Ejemplificando, para el vector de entrada w (4) obtendr´ ıamos el conjunto de soluciones m (5). w = ((a1 , a2 ), (b1 , b2 ), (c1 , c2 )) (4)   (a1 , b1 , c1 ) (a1 , b1 , c2 )   (a1 , b2 , c1 )   (a1 , b2 , c2 ) m=   (5)  (a2 , b1 , c1 )  (a2 , b1 , c2 )   (a2 , b2 , c1 ) (a2 , b2 , c2 ) Se describen a continuaci´n dos formas de abordar el problema. o 1.1. Modelando el problema como un ´rbol. a Analizando el conjunto de soluciones, puede generarse un arbol a partir ´ de un nodo ra´ que tenga tantas ramas como elementos el primer vector, y ız para cada elemento del segundo vector, a˜adir ramas con los elementos del n tercero, etc. De manera que recorriendo las hojas del arbol resultante (figura ´ 2
  • 3. 1.2 Modelando el problema como un grafo. 1 PLANTEAMIENTO. 1.1) se obtengan en los caminos seguidos desde la ra´ las combinaciones que ız conforman la soluci´n. o k root RRRR kkk RRR kkkkk RRR RRR kk kk RRR kkk a11 E · · · a1l1 z EE y FFF zzz EE yyy FF zz EE yy FF zz E yy F an1 ··· anln ··· an1 ··· anln La unica manera de obtener todas las soluciones usando esta forma de ´ atacar el problema es recorriendo todos los caminos posibles. Usando para ello un algoritmo simple de b´squeda en profundidad [1] que recorra todos los u nodos obtendr´ ıamos un tiempo O(|V | + |E|), con el conocido uso de espacio de orden O(|V |). Esto que a priori puede parecer una buena aproximaci´n, o se complica en el momento en que se calculan los valores de |V | y |E|. Para nuestro caso, en el nivel 1 del ´rbol tenemos l1 nodos; en el 2 habr´ l2 nodos a ıa por cada nodo en l1 , esto es, l1 l2 nodos; de esta manera, el n´mero de nodos u del nivel i vendr´ definido por 6 y el total queda expresado en 7. Sin necesidad ıa de calcular |E| podemos concluir que el orden espacial es demasiado elevado. n |V |i =⇒ (li ) (6) i=1 n j |V | = ( (li )) (7) j=1 i=1 1.2. Modelando el problema como un grafo. Construido el grafo de la figura 1.2 podemos reducir el problema a recorrer todos sus caminos posibles. Dado que se trata de un grafo dirigido y no ponderado, pero del que conocemos los nodos de inicio y final, partimos de cada uno de los elementos de a1 y calculamos los caminos posibles de longitud n que terminan en alg´n elemento de an . Una simple ponderaci´n u o de 1 sobre el conjunto de aristas permite aplicar el algoritmo de Dijsktra [2] l1 veces hasta obtener todos las soluciones, con lo que la complejidad de nuevo depende del n´mero de v´rtices y aristas. Si bien el primero de estos valores u e 3
  • 4. ´ 2 SOLUCION BASADA EN PATRONES. se corresponde con lo expresado en 8 (el menor posible), el n´mero de aristas u es algo m´s complejo de calcular. Sabemos que s´lo existen aristas entre los a o elementos de cada par de vectores ai y ai+1 y que adem´s ´stos forman un a e subgrafo bipartido en el que los nodos de ai+1 son sumideros, luego el n´mero u de aristas que une cada uno de estos ser´ li li+1 . Si hay n−1 grafos bipartidos, a el n´mero total de aristas vendr´ dado por la expresi´n 9. u a o HIJK ONML a11 O ONML HIJK ··· ONML HIJK a1l1 ? ?O O  ? o o o ?  ? O O o ? ? o o O ?  o ? O  HIJK ONML ONML HIJK ONML HIJK  o wo  O O? ' an1 ··· anln n |V | = (li ) (8) i=1 n−1 |E| = (li li+1 ) (9) i=1 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 da una complejidad en tiempo O(|E|+|V | log |V |). Puede apreciarse la reducci´no del orden de complejidad, al que en realidad habr´ que a˜adir la creaci´n ıa n o de la estructura en grafo necesaria para una correcta estimaci´n del espacio o necesario. Sin embargo, estos resultados siguen estando por debajo de la soluci´n propuesta, por lo que el desarrollo de la obtenci´n de la cota espacial o o quedan fuera de este documento. 2. Soluci´n basada en patrones. o La soluci´n que proponemos plantea el problema tomando el conjunto de o salida como la traspuesta de la matriz S, donde S se define en 10.     a11 . . . an1 a11 . . . a1l1 S =  . ... .  =⇒ S T =  . . . .   . .  . .  .. . .  . (10) a1l1 . . . anln an1 . . . anln Cada fila de la matriz traspuesta s´lo contiene elementos de un unico vector o ´ siguiendo el patr´n dado por las expresiones regulares de 11, de forma que ri o 4
  • 5. 2.1 Conjunto de soluciones. ´ 2 SOLUCION BASADA EN PATRONES. representa el n´mero de veces que se repite cada elemento dentro del grupo u y ri indica las veces que el grupo se repite al completo. Al examinar E se aprecia que la longitud de cada ei es igual al n´mero total de soluciones, por u lo que los ´ ındices r y r est´n relacionados con t y li como se expresa en 12. a    r  e1 (a11 . . . ar11 )r1 1 1l S T =⇒ E =  .  =  . .  . (11)  . .  rn rn rn en (an1 . . . anln ) li ri ri = t (12) Por construcci´n, la defini´n de r es recursiva tal y como se expresa en 13, o o pero su formulaci´n nos permite demostrar por inducci´n la validez de las o o expresiones 14 y 15 (dadas las ρi como se indican en 16). 1 ⇔i=n ri = (13) li−1 ri−1 ⇔i=n ρi ri = (14) li t ri = (15) ρi n ρi = (lj ) (16) j=i 2.1. Conjunto de soluciones. Una vez hallados los vectores auxiliares r y r , obtener un procedimiento para generar el conjunto de soluciones de una sola atacada (en una unica ite- ´ raci´n por todos los elementos de v) es relativamente sencillo. Analizando un o poco la algoritmia necesaria, en realidad s´lo hay que pre-calcular los valores o de n y t y los vectores l y r, ya que en cada iteraci´n los valores de ri se o van calculando y eliminando, con el consecuente ahorro que supone no man- tener otro vector completo en memoria. Finalmente, nuestro procedimiento quedar´ como se muestra en el algoritmo 1. ıa 5
  • 6. 2.2 Soluci´n k-´sima. o e ´ 2 SOLUCION BASADA EN PATRONES. Algorithm 1 Algoritmo para la obtenci´n del conjunto de soluciones o Require: v ← ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln )) Ensure: S ← (s1 , ..., st ) n ← |v| l ← (|a1 |, . . . , |an |) t ← n (li ) i=1 r ← {Vector definido en 13} for i from 1 to n do f ← {Vector vac´ ıo} for j from 1 to li do f ← f ∪ (aij )ri end for t ri ← |f | k ← |S| + 1 sT ← (f )ri k end for return S T An´lisis de complejidad. Si obviamos la trasposici´n de la matriz de a o resultados S, realmente no necesaria (las soluciones estar´ en las columnas ıan en 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 el momento tal y como refleja 17. n O( li ) (17) i=1 En cambio, para la estimaci´n es espacio obtenemos 18 o n n √ O(nt) = O(n (li )) = O( (li n n)) (18) i=1 i=1 2.2. Soluci´n k-´sima. o e Otra de las ventajas de este planteamiento no contempladas en 1.1 o 1.2, ´ es la obtenci´n de la soluci´n k-´sima, huelga decir que sin calcular previa- o o e mente todo el conjunto de soluciones. Observando 11 y aplicando los mismos conceptos, para un determinado k (equivalente a seleccionar la columna k de 6
  • 7. 2.2 Soluci´n k-´sima. o e ´ 2 SOLUCION BASADA EN PATRONES. S T , esto es, sT ), existe un vector ι con cardinal n que contiene los ´ k ındices de cada ai por los cuales se obtienen en orden los elementos implicados en la k-´sima soluci´n; cada una de las ιi viene expresada en funci´n de k por la e o o f´rmula 19. o k m´d li ri o ιi (k) = (19) ri As´ la f´rmula general para la obtenci´n de la k-´sima soluci´n se define en 20 ı, o o e o y un procedimiento para la obtenci´n del conjunto de soluciones basado en o la funci´n ιi (k) se muestra en el algoritmo 2. o sk = (a1ι1 (k) , . . . , anιn (k) ) (20) Algorithm 2 Algoritmo basado en la soluci´n k-´sima o e Require: v ← ((a11 , . . . , a1l1 ), . . . , (an1 , . . . , anln )) Ensure: S ← (s1 , ..., st ) n ← |v| l ← (|a1 |, . . . , |an |) t ← n (li ) i=1 r ← {Vector definido en 13} for k from 1 to t do for i from 1 to n do ιi ← k m´d li ri o ri ski ← aiιi end for end for return S An´lisis de complejidad. No resulta dif´ ver que la cota asint´tica a ıcil o superior del algoritmo anterior es, tanto en tiempo como espacio, la expresada en 21, es decir, peor cota temporal que para el algoritmo 1. O(nt) (21) 7
  • 8. ´ 4 CONCLUSION. 3. Experimentaci´n. o Los resultados anteriores son f´cilmente verificables tras la ejecuci´n de a o algunos experimentos. De manera no exhaustiva, podemos someter ambos algoritmos a un conjunto de datos aleatorio que cuente con variedades de v para determinados valores de n y t. Como muestra el cuadro 3, para valores peque˜os de n el tiempo necesario para completar el proceso parece fluctuar n entre uno y otro, quedando sensiblemente peor puntuado el algoritmo 2. Sin embargo, a medida que n aumenta y lo hace consecuentemente t, es evidente que el algoritmo 1 presenta mejores resultados, llegando, para valores de n 6, a superar a su competidor en m´s del 90 % de las ocasiones, resultado a que cuadra perfectamente con el estudio te´rico. No obstante, es evidente que o No exp. n Valor medio t ln % m´s r´pido 1 a a % m´s r´pido 2 a a 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 experimentaci´n o son necesarios m´s experimentos para obtener resultados contundentes, pues a en nuestro caso no se han tenido en cuenta vectores de entrada con valores de ln por encima de 11. 4. Conclusi´n. o A lo largo de este documento se han analizado distintas formas de abor- dar un problema de optimizaci´n combinatoria para, finalmente, proponer o una soluci´n satisfactoria a partir de los patrones descritos en la soluci´n. o o Adem´s, se ha dado un m´todo general para la obtenci´n de la k-´sima so- a e o e luci´n que, si a priori podr´ parecer una mejor aproximaci´n, los c´lculos o ıa o a posteriores y la experimentaci´n han demostrado ser peor que el primero de o los procedimientos expuestos. 8
  • 9. ´ 4 CONCLUSION. Finalmente, combinando los dos algoritmos, podemos obtener una funci´n o en el lenguaje de programaci´n Python que sea capaz de, dada una lista de o listas en items y un valor opcional en k, devolver una lista de listas con todas las soluciones o la soluci´n que ocupa el k-´simo lugar si un valor para k es o e proporcionado. El resultado se muestra en 4. def combine ( items , k=None ) : ””” Create a m a t r i x i n wich each row i s a t u p l e c o n t a i n i n g one o f s o l u t i o n s or k−esima s o l u t i o n . ””” length items = len ( items ) l e n g t h s = [ l e n ( i ) for i in i t e m s ] l e n g t h = r e d u c e (lambda x , y : x ∗ y , l e n g t h s ) r e p e a t s = [ r e d u c e (lambda x , y : x ∗ y , l e n g t h s [ i : ] ) for i in range ( 1 , l e n g t h i t e m s ) ] + [ 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 t indices = [ ( k % ( lengths [ i ] ∗ repeats [ i ] ) ) / repeats [ i ] for i in range ( l e n g t h i t e m s ) ] return [ i t e m s [ i ] [ i n d i c e s [ i ] ] for i in range ( l e n g t h i t e m s ) ] else : matrix = [ ] for i , item in enumerate ( i t e m s ) : row = [ ] for s u b s e t in item : row . extend ( [ s u b s e t ] ∗ r e p e a t s [ i ] ) t i m e s = l e n g t h / l e n ( row ) matrix . append ( row ∗ t i m e s ) # Transpose t h e m a t r i x or r e t u r n columns i n s t e a d rows return z i p (∗ matrix ) 9
  • 10. REFERENCIAS REFERENCIAS Referencias [1] Knuth, Donald E. (1997). The Art Of Computer Programming. Vol 1. 3rd ed., 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 in improved network optimization algorithms. Journal of the ACM 34(3), pp 596-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