SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Algortimos de tipo Divide y Vencerás

1. Planteamiento general
2. Determinación del caso base
3. Ejemplos clásicos
  3.1. Búsqueda binaria
  3.2. Algortimos de ordenación
  3.3. Problema de la selección
  3.4. Multiplicación de matrices de Strassen




          1. Planteamiento general


• Idea general
  – Descomponer un problema en subproblemas
    (más pequeños)
  – Resolver cada subproblema
  – Combinar las soluciones




                                                1
1. Planteamiento general

     Función DV(X: Datos del problema)
       si pequeño(X)
       entonces
             S = sencillo(X)
       sino (X1, ..., Xl) = descomponer(X)
             para i = 1 hasta l
             hacer Si = DV(Xi)
             S = combinar(S1, ..., Sl)
       devolver S




          1. Planteamiento general

• Asumiendo la existencia de
  – pequeño(X) - función booleana que determina si
    es práctico aplicar sencillo(X)
  – sencillo(X) - algoritmo práctico para el problema si
    su tamaño es suficientemente pequeño
  – descomponer(X) - función que descompone P en l
    subproblemas P1, ..., Pl con entradas X1, ..., Xl
  – combinar(S1, ..., Sl) - función que combina l
    soluciones Si para Pi, en una única para P




                                                           2
1. Planteamiento general

• Efectividad del enfoque
  – Debe elegirse correctamente el umbral a partir del
    cual aplicar sencillo(X)
  – Las funciones de descomposición y combinación
    deben ser eficientes
  – Los subproblemas deben ser aproximadamente
    del mismo tamaño




         1. Planteamiento general

• Complejidad
  – pequeño(X) tarda un tiempo asimilable a otras
    funciones del esquema
  – sencillo(X) tarda f(n)
  – descomponer(X) y combinar(S1, ... Sl) tardan
    entre los dos g(n)
  – el tamaño de cada subproblema es de n/b




                                                         3
1. Planteamiento general

• Complejidad
  t(n) = f(n) si sencillo(X)
  t(n) = l.t(n/b) + g(n) en otro caso
  y si g(n) ∈ θ(nk)

     t(n) ∈ θ(nk)          si l < bk
     t(n) ∈ θ(nk.log n)    si l = bk
     t(n) ∈ θ(nlog l)      si l > bk




          1. Planteamiento general

• Observación

  – Si l = número de subproblemas
  – Y n/b = tamaño de los subproblemas

  – No necesariamente l = b !!!




                                         4
1. Planteamiento general

• Ejemplo (Multiplicación de grandes enteros)

  – Multiplicar dos números a y b enteros muy
    grandes

  – Algoritmo clásico ∈ θ(n2) con n = número de cifras
    del mayor de los números




          1. Planteamiento general

• Ejemplo (Multiplicación de grandes enteros)

  – Enfoque DyV1
  – Dividir cada número en n/2 cifras
  – Ejemplo a = 981, b = 1234
     • w = 09, x = 81
     • y = 12, z = 34
     • a . b = (102w + x)(102y + z) = 104wy + 102(wz + xy) + xz =
       1080000 + 127800 + 2754 = 1210554




                                                                    5
1. Planteamiento general

• Ejemplo (Multiplicación de grandes enteros)

  – Complejidad DyV1

    t(n) = 1 si n = 1
    t(n) = 4.t(n/2) + n en otro caso

    => t(n) ∈ θ(n2)




           1. Planteamiento general

• Ejemplo (Multiplicación de grandes enteros)

  – Enfoque DyV2
  – No calcular (wz + xy) = (w + x)(y + z) - wy - xz
  – p = wy, q = xz, r = (w + x)(y + z)
     • a . b = 104p + 102(r - p - q) + q




                                                       6
1. Planteamiento general

• Ejemplo (Multiplicación de grandes enteros)
  – Complejidad DyV2
  – Usando el algoritmo clásico para p, q, r,
    ahorramos 25%
  – Además
    t(n) = 1 si n = 1
    t(n) = 3.t(n/2) + n en otro caso
    => t(n) ∈ θ(nlog3) = θ(n1.585)




     2. Determinación del caso base

• Ejemplo (Multiplicación de grandes enteros)

  – Supongamos que usamos el algoritmo DyV2 con

    t(n) = h(n) si n ≤ n0
    t(n) = 3.t(n/2) + g(n) en otro caso
    siendo h(n) = n2 µs el tiempo de la multiplicación
    clásica y g(n) = 16n µs el tiempo de las sumas




                                                         7
2. Determinación del caso base


• La elección del umbral de aplicación de
  sencillo(X) (es decir, pequeño(X)) es
  fundamental

• Si no se elige adecuadamente, el enfoque D
  y V es muy ineficiente




     2. Determinación del caso base

• Ejemplo (Multiplicación de grandes enteros)

  – Si n0 = 1
     • DyV2 tarda 41 segundos para 5000 cifras
     • M. Clásica tarda 25 segundos para 5000 cifras


  – Si n0 = 64
     • DyV2 tarda 6 segundos para 5000 cifras




                                                       8
2. Determinación del caso base

• El umbral depende de
  – los algoritmos
  – las implementaciones
• Cálculo del umbral
  – Calcular la complejidad de los algoritmos
  – Calcular las constantes de la implementación
  – Calcular el n0 tal que los tiempos del algoritmo DV
    y del clásico coincidan en él




               3. Ejemplos clásicos
              3.1. Búsqueda binaria
• Problema
  – Dada una matriz T de n componentes ordenada
    crecientemente (T[i] ≤ T[i+1]), y dado un elemento
    x, encontrar el i tal que
     • 1 ≤ i ≤ n+1
     • T[i-1] < x ≤ T[i]
  – Observación
     • Si x no está en T, se pide dónde debería estar




                                                          9
3. Ejemplos clásicos
             3.1. Búsqueda binaria
• Solución clásica (secuencial)

     Función bsecuencial(T: matriz [1..n] de entero, x: entero) :
       entero
       para i = 1 hasta n
       hacer
              si (x ≤ T[i])
              entonces devolver i
       devolver n+1




              3. Ejemplos clásicos
             3.1. Búsqueda binaria
• Complejidad (secuencial)

  – O(n) en el caso peor
  – Ω(1) en el caso mejor
  – θ((n+1)/2) = θ(n) en media




                                                                    10
3. Ejemplos clásicos
             3.1. Búsqueda binaria
• Enfoque Divide y Vencerás (binaria)

  – Dividir la matriz en dos partes de igual tamaño
  – Buscar en una sola de las dos partes
  – (Para reducir el número de llamadas, mirar
    primero si x puede estar en la matriz)




              3. Ejemplos clásicos
             3.1. Búsqueda binaria


     Función bbinaria(T: matriz [1..n] de entero, x: entero) :
       entero
       si ((n = 0) o (x > T[n]))
       entonces devolver n+1
       sino devolver brecursiva(T,1,n,x)




                                                                 11
3. Ejemplos clásicos
             3.1. Búsqueda binaria

     Función brecursiva(T: matriz [1..n] de entero, i,j,x: entero) :
       entero
       si (i = j)
       entonces devolver i
       k = (i+j) div 2
       si x ≤ T[k]
       entonces devolver brecursivo(T,i,k,x)
       sino devolver brecursivo(T,k+1,j,x)




              3. Ejemplos clásicos
             3.1. Búsqueda binaria
• Complejidad

  t(n) = 1 si n = 1
  t(n) = t(n/2) + g(n) si n = 2i, n > 1
  con g(n) ∈ θ(1)

  => t(n) ∈ θ(log2 n) = θ(log n)




                                                                       12
3. Ejemplos clásicos
             3.1. Búsqueda binaria
• Observaciones

  – Perdemos eficiencia en el caso mejor
     • El caso mejor de bsecuencial es más general
  – Ganamos eficiencia en todos los demás casos
  – La versión iterativa de bbinaria es equivalente en
    tiempo




           3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Problema
  – Dada una matriz T de n componentes, ordenarla
    ascendentemente
     • T[i] ≤ T[i+1] para 1 ≤ i ≤ n-1
  – Disponemos de dos algoritmos que ordenan
    matrices en tiempo O(n2)
     • Ordenación por selección
     • Ordenación por inserción




                                                         13
3. Ejemplos clásicos
       3.2. Algoritmos de ordenación
• Idea de un algoritmo de tipo D y V
   – Descomponer la matriz original en dos partes
   – Ordenar cada parte por separado
   – Combinar las partes ordenadas
• Dos enfoques
   – Descomposición simple, combinación compleja
   – Descomposición compleja, combinación simple




            3. Ejemplos clásicos
       3.2. Algoritmos de ordenación


• Ordenación por mezcla
   – Dividir la matriz por la mitad
   – Ordenar cada mitad
   – Mezclar las mitades ordenadas
• Precisa espacio auxiliar (no es in situ)




                                                    14
3. Ejemplos clásicos
 3.2. Algoritmos de ordenación
Procedimiento ordmezcla(T: matriz [1..n+1] de entero, i,j:
  entero)
  U, V: matriz [1..n+1] de entero
  si (i < j)
  entonces
          k = (i+j) div 2
          para l = i hasta k hacer U[l] = T[l]
          para l = k+1 hasta j hacer V[l] = T[l]
          ordmezcla(U,i,k)
          ordmezcla(V,k+1,j)
          mezclar(U,V,T,k)




      3. Ejemplos clásicos
 3.2. Algoritmos de ordenación
Procedimiento mezclar(U,V,T: matriz [1..n+1] de entero,
  i,j,k: entero)
  U[k+1] = ∞; V[j+1] = ∞
  {marcadores para evitar comparaciones}
  i1 = i; j1 = k+1 {índices}
  para k2 = i hasta j
  hacer si (U[i1] < V[j1])
          entonces T[k2] = U[i2]
                  i2 = i2 +1
          sino    T[k2] = V[j2]
                  j2 = j2 +1




                                                             15
3. Ejemplos clásicos
       3.2. Algoritmos de ordenación
• Complejidad
  – La descomposición y la mezcla se hacen en
    tiempo lineal
    t(n) = 2t(n div 2) + g(n) si n es par
    t(n) = t(n div 2) + t(n div 2 +1) + g(n) si n es impar

    t(n) = 2t(n/2) + g(n) si n = 2i
    con g(n) ∈ θ(n)




            3. Ejemplos clásicos
       3.2. Algoritmos de ordenación
• Complejidad

    t(n) ∈ θ(n.log2 n)

  – Precisa mucho espacio auxiliar
  – Caso base: j -i suficientemente pequeño =>
    ordenar por inserción




                                                             16
3. Ejemplos clásicos
      3.2. Algoritmos de ordenación


• Ordenación rápida (Hoare)
  – Se elige un elemento “pivote”
  – Se desplazan a un lado los elementos menores
    que él y a otro los mayores
  – Se ordenan las submatrices
  – No hace falta combinar los resultados




           3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Observaciones

  – Para que los subcasos queden equilibrados, la
    elección ideal del pivote es la mediana

  – La descomposición
     • no debe necesitar espacio auxiliar (in situ)
     • debe hacerse en una sola pasada




                                                      17
3. Ejemplos clásicos
 3.2. Algoritmos de ordenación
Procedimiento pivote(T: matriz [1..n] de entero, i,j, var l:
  entero)
  p = T[i]; k = i; l = j+1
  repetir k = k+1 hasta (T[k] > p ó k ≥ j)
  repetir l = l -1 hasta (T[l] ≤ p)
  mientras (k < l)
  hacer intercambiar(T,k,l)
         repetir k = k+1 hasta (T[k] > p)
         repetir l = l -1 hasta (T[l] ≤ p)
  intercambiar(T,i,l)




      3. Ejemplos clásicos
 3.2. Algoritmos de ordenación


Procedimiento ordrapida(T: matriz [1..n] de entero, i,j:
  entero)
  si (i < j)
  entonces
          pivote(T,i,j,l)
          ordrapida(T,i,l-1)
          ordrapida(T,l+1,j)




                                                               18
3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Complejidad
  – El tamaño de los subproblemas depende de la
    posición donde va el elemento pivote
  – La posición del pivote depende de los datos del
    problema
  – Estudio del mejor y peor casos, y en media




           3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Complejidad (peor caso)
  – El peor caso se da cuando los subproblemas
    están más desequilibrados (por ejemplo, T
    ordenada)

    t(n) = t(n-1) + t(1) + g(n)
    con g(n) ∈ θ(n) (cálculo del pivote)
    => t(n) ∈ θ(n2)




                                                      19
3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Complejidad (mejor caso)
  – El mejor caso se da cuando los subproblemas
    están perfectamente equilibrados (por ejemplo,
    cuando el elemento pivote es siempre la mediana
    de la submatriz correspondiente)

    t(n) = 2t(n/2) + g(n) si n = 2i
    con g(n) ∈ θ(n) => t(n) ∈ θ(n.log n)




           3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Complejidad (en media)
  – Suposiciones
     • Los n elementos de T son distintos
     • pivote(T,1,n,l) asigna a l una posición cualquiera entre 1
       y n => todas las posiciones equiprobables
  – Se estudia el número medio de llamadas y
    operaciones adicionales
    => t(n) ∈ θ(n.log n)




                                                                    20
3. Ejemplos clásicos
      3.2. Algoritmos de ordenación
• Observaciones
  – Una versión práctica
     • Tomar la mediana de T[1], T[n/2], T[n]
  – Situación general
     • Los elementos se repiten => modificar pivote(T,i,j,l) para
       obtener pivote(T,i,j,k,l) de modo que entre k y l estén los
       elementos repetidos
  – Se puede lograr θ(n.log n) pero con una constante
    oculta alta




            3. Ejemplos clásicos
       3.3. Problema de la selección
• Problema
  – Dada una matriz T de n componentes con
    elementos desordenados, encontrar el k-esimo
    elemento más pequeño
     • Si k = 1, se busca el mínimo
     • Si k = n, se busca el máximo
     • Si k = n/2, se busca la mediana (elemento que deja a su
       izda. el 50% de los datos, y a su dcha. el otro 50%)
     • Si k = 1/4, 1/2 y 3/4, se buscan los cuartiles
     • Si k = 1/10, 1/5, 3/10, ..., 9/10, se buscan los deciles




                                                                     21
3. Ejemplos clásicos
       3.3. Problema de la selección
• Algoritmo sencillo
  – Ordenar la matriz
  – Seleccionar el elemento en la posición k
• Complejidad
  – Usando la ordenación rápida
     O(n2) en el caso peor
     O(n.log n) en el caso mejor y en media




            3. Ejemplos clásicos
       3.3. Problema de la selección
• Opción
  – Usar el procedimiento pivote(T,i,j,l)
  – El pivote queda en la posición l
     • Si l = k, hemos acertado
     • Si l > k, hay que buscar el elemento en las casillas de i a
       l-1
     • Si l < k, hay que buscar el elemento en las casillas de
       l+1 a k




                                                                     22
3. Ejemplos clásicos
       3.3. Problema de la selección
     Función seleccion(T: matriz [1..n] de entero, k: entero):
       entero
       i = 1; j = n
       pivote(T,i,j,l)
       mientras (k ≠ l)
       hacer si (l > k)
               entonces j = l-1
               sino i = l+1
               pivote(T,i,j,l)
       devolver T[l]




            3. Ejemplos clásicos
       3.3. Problema de la selección
• Complejidad

  – Depende de los datos de entrada, porque se basa
    en el procedimiento pivote

  – Caso mejor
     • Acertamos a la primera
       t(n) ∈ θ(n)




                                                                 23
3. Ejemplos clásicos
       3.3. Problema de la selección
• Complejidad
  – Caso peor
     • Por ejemplo, k = 1 y T = [9, 1, 2, 3, 4, 5, 6, 7, 8]
       t(n) ∈ θ(n2)


  – En media
     • Se hace un número logarítmico de llamadas a pivote(),
       cada una con coste lineal
       t(n) ∈ θ(n.log n)




          3. Ejemplos clásicos
    3.4. Multiplicación de matrices de
                  Strassen

• Problema
  – Multiplicar dos matrices de nxn componentes


• Solución elemental
  – La que viene dada por la definición clásica




                                                               24
3. Ejemplos clásicos
    3.4. Multiplicación de matrices de
                  Strassen

     Función multiplicar(A,B: matriz [1..n][1..n] de entero):
       matriz [1..n][1..n] de entero
       R : matriz [1..n][1..n] de entero
       para i = 1 hasta n
       hacer para j = 1 hasta n
              hacer R[i][j] = 0
                       para k = 1 hasta n
                       hacer R[i][j] = R[i][j] + A[i][k] . B[k][j]
       devolver R




          3. Ejemplos clásicos
    3.4. Multiplicación de matrices de
                  Strassen
• Complejidad
  – t(n) ∈ θ(n3)


• Enfoque Divide y vencerás
  – Descomponer las matrices en menores de tamaño
    inferior




                                                                     25
3. Ejemplos clásicos
    3.4. Multiplicación de matrices de
                  Strassen
• Descomposición

       A11 A12              B11 B12                R11 R12
  A=                  B=                      R=
       A21 A22              B21 B22                R21 R22

                    R11 = A11xB11 + A12xB21
                    R12 = A11xB12 + A12xB22
                    R21 = A21xB11 + A22xB21
                    R22 = A21xB12 + A22xB22




          3. Ejemplos clásicos
    3.4. Multiplicación de matrices de
                  Strassen
• Complejidad

  t(n) = 1 si n ≤ 2
  t(n) = 8t(n/2) + n2 si n > 2, n = 2i

  => t(n) ∈ θ(n3)




                                                             26
3. Ejemplos clásicos
     3.4. Multiplicación de matrices de
                   Strassen
• Reducción del número de multiplicaciones
  (Strassen, 1970)
   P = (A11+A22) (B11+B22)
   Q = (A21+A22)B11                 R11 = P+S-T+V
   R’ = A21(B12-B22)                R12 = R’+T
   S = A22(B21-B11)          =>     R21 = Q+S
   T = (A11+A12)B22                 R22 = P+R-Q+U
   U = (A21-A11) (B11+B12)
   V = (A12-A22) (B21+B22)




           3. Ejemplos clásicos
     3.4. Multiplicación de matrices de
                   Strassen
• Complejidad

  t(n) = 1 si n ≤ 2
  t(n) = 7t(n/2) + n2 si n > 2, n = 2i

  => t(n) ∈ θ(nlog2 7) = θ(n2,81)




                                                    27

Mais conteúdo relacionado

Mais procurados

3.metodo directo
3.metodo directo3.metodo directo
3.metodo directo
rjvillon
 
Metodologia de la programacion recursividad
Metodologia de la programacion   recursividadMetodologia de la programacion   recursividad
Metodologia de la programacion recursividad
victdiazm
 
Capitulo4 pdf
Capitulo4 pdfCapitulo4 pdf
Capitulo4 pdf
elchayo
 
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérezApuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
MateoLeonidez
 
Algoritmos para matlab
Algoritmos para matlabAlgoritmos para matlab
Algoritmos para matlab
Vitoto96
 
Dgb6 1 2_4 integración por sustitución trigonométrica
Dgb6 1 2_4 integración por sustitución trigonométricaDgb6 1 2_4 integración por sustitución trigonométrica
Dgb6 1 2_4 integración por sustitución trigonométrica
Moonwalk
 

Mais procurados (20)

Back Tracking
Back TrackingBack Tracking
Back Tracking
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
Integrales indefinidas 1
Integrales indefinidas 1Integrales indefinidas 1
Integrales indefinidas 1
 
Solución de Ecuaciones Diferenciales Ordinarias por los Métodos de Euler, Run...
Solución de Ecuaciones Diferenciales Ordinarias por los Métodos de Euler, Run...Solución de Ecuaciones Diferenciales Ordinarias por los Métodos de Euler, Run...
Solución de Ecuaciones Diferenciales Ordinarias por los Métodos de Euler, Run...
 
3.metodo directo
3.metodo directo3.metodo directo
3.metodo directo
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
Metodo de integración POR PARTES.
Metodo de integración POR PARTES.Metodo de integración POR PARTES.
Metodo de integración POR PARTES.
 
Metodologia de la programacion recursividad
Metodologia de la programacion   recursividadMetodologia de la programacion   recursividad
Metodologia de la programacion recursividad
 
2 integracion
2 integracion2 integracion
2 integracion
 
1. integración por sustitución
1. integración por sustitución1. integración por sustitución
1. integración por sustitución
 
Capitulo4 pdf
Capitulo4 pdfCapitulo4 pdf
Capitulo4 pdf
 
Integración por sustitución o cambio de variable
Integración por sustitución o cambio de variableIntegración por sustitución o cambio de variable
Integración por sustitución o cambio de variable
 
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérezApuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
Apuntes de calculo integral fracciones parciales (9) pof. luis castro pérez
 
Integralindefinida
IntegralindefinidaIntegralindefinida
Integralindefinida
 
INTEGRALES INDEFINIDAS POR CAMBIO DE VARIABLE
INTEGRALES INDEFINIDAS POR CAMBIO DE VARIABLEINTEGRALES INDEFINIDAS POR CAMBIO DE VARIABLE
INTEGRALES INDEFINIDAS POR CAMBIO DE VARIABLE
 
Algoritmos para matlab
Algoritmos para matlabAlgoritmos para matlab
Algoritmos para matlab
 
Aplicaciones de la derivada
Aplicaciones de la derivadaAplicaciones de la derivada
Aplicaciones de la derivada
 
Dgb6 1 2_4 integración por sustitución trigonométrica
Dgb6 1 2_4 integración por sustitución trigonométricaDgb6 1 2_4 integración por sustitución trigonométrica
Dgb6 1 2_4 integración por sustitución trigonométrica
 
Fracciones parciales
Fracciones parcialesFracciones parciales
Fracciones parciales
 
Integral por partes
Integral por partesIntegral por partes
Integral por partes
 

Destaque (10)

Algoritmo divide y vencerás
Algoritmo divide y vencerásAlgoritmo divide y vencerás
Algoritmo divide y vencerás
 
Divide y venceras
Divide y vencerasDivide y venceras
Divide y venceras
 
Vectores y Matrices
Vectores y MatricesVectores y Matrices
Vectores y Matrices
 
Expansión Térmica - Ejemplo 02
Expansión Térmica - Ejemplo 02Expansión Térmica - Ejemplo 02
Expansión Térmica - Ejemplo 02
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Digestión en Rumiantes
Digestión en RumiantesDigestión en Rumiantes
Digestión en Rumiantes
 
Capitulo 3. difusión en estado sólido
Capitulo 3. difusión en estado sólidoCapitulo 3. difusión en estado sólido
Capitulo 3. difusión en estado sólido
 
Ejemplos De Sistemas De Numeracion
Ejemplos De Sistemas De NumeracionEjemplos De Sistemas De Numeracion
Ejemplos De Sistemas De Numeracion
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Arboles02
Arboles02Arboles02
Arboles02
 

Semelhante a Fundamentos Divide Y Venceras

Soluciones por series
Soluciones por seriesSoluciones por series
Soluciones por series
Kike Prieto
 

Semelhante a Fundamentos Divide Y Venceras (20)

Recurrencias
RecurrenciasRecurrencias
Recurrencias
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Expresiones algebraicas
Expresiones algebraicasExpresiones algebraicas
Expresiones algebraicas
 
Practica Programacion Ii 2003 2004
Practica Programacion Ii 2003 2004Practica Programacion Ii 2003 2004
Practica Programacion Ii 2003 2004
 
Cap2
Cap2Cap2
Cap2
 
Matemáticas BI
Matemáticas  BIMatemáticas  BI
Matemáticas BI
 
Ecuaciones y desigualdades.
Ecuaciones y desigualdades. Ecuaciones y desigualdades.
Ecuaciones y desigualdades.
 
Apuntes formulas fundamentales_de_integración
Apuntes formulas fundamentales_de_integraciónApuntes formulas fundamentales_de_integración
Apuntes formulas fundamentales_de_integración
 
Soluciones por series
Soluciones por seriesSoluciones por series
Soluciones por series
 
Ecuaciones de RecurrenciaEcuaciones .pptx
Ecuaciones de RecurrenciaEcuaciones .pptxEcuaciones de RecurrenciaEcuaciones .pptx
Ecuaciones de RecurrenciaEcuaciones .pptx
 
Metodos iterativos
Metodos iterativosMetodos iterativos
Metodos iterativos
 
Sucesiones, inducción y sumatorias
Sucesiones, inducción y sumatoriasSucesiones, inducción y sumatorias
Sucesiones, inducción y sumatorias
 
Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2
 
Ana1 8
Ana1 8Ana1 8
Ana1 8
 
An 04 metodos-directos
An 04 metodos-directosAn 04 metodos-directos
An 04 metodos-directos
 
Paralela8
Paralela8Paralela8
Paralela8
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
 
Expresiones algebraicas, Producto Notable
Expresiones algebraicas, Producto NotableExpresiones algebraicas, Producto Notable
Expresiones algebraicas, Producto Notable
 
Hernandez Sanchez Isaac
Hernandez Sanchez IsaacHernandez Sanchez Isaac
Hernandez Sanchez Isaac
 
Subirblog
SubirblogSubirblog
Subirblog
 

Mais de Salvador Fernández Fernández

10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
Salvador Fernández Fernández
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
Salvador Fernández Fernández
 

Mais de Salvador Fernández Fernández (20)

Servicio web soap en java con net beans
Servicio web soap en java con net beansServicio web soap en java con net beans
Servicio web soap en java con net beans
 
Web services
Web servicesWeb services
Web services
 
Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)
 
Práctica nominas
Práctica nominasPráctica nominas
Práctica nominas
 
Ejemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra funciónEjemplo de paso de funciones como parámetros a otra función
Ejemplo de paso de funciones como parámetros a otra función
 
Ejemplo usopunteros
Ejemplo usopunterosEjemplo usopunteros
Ejemplo usopunteros
 
Solucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectoresSolucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectores
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 
Introducción a Enterprise Java Beans
Introducción a Enterprise Java BeansIntroducción a Enterprise Java Beans
Introducción a Enterprise Java Beans
 
Colorear fotografias en blanco y negro
Colorear fotografias en blanco y negroColorear fotografias en blanco y negro
Colorear fotografias en blanco y negro
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
 
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
 
Wallpaper natural
Wallpaper naturalWallpaper natural
Wallpaper natural
 
SQL
SQLSQL
SQL
 
Cableado Estructurado de Red
Cableado Estructurado de RedCableado Estructurado de Red
Cableado Estructurado de Red
 
Redes De Computadores UOC
Redes De Computadores UOCRedes De Computadores UOC
Redes De Computadores UOC
 
Java orientado a objetos
Java orientado a objetosJava orientado a objetos
Java orientado a objetos
 
PlanificacióN Temporal Esquema Voraz Tecnoacademy
PlanificacióN Temporal Esquema Voraz TecnoacademyPlanificacióN Temporal Esquema Voraz Tecnoacademy
PlanificacióN Temporal Esquema Voraz Tecnoacademy
 
Disco Flexible 5 1 4
Disco Flexible 5 1 4Disco Flexible 5 1 4
Disco Flexible 5 1 4
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 

Fundamentos Divide Y Venceras

  • 1. Algortimos de tipo Divide y Vencerás 1. Planteamiento general 2. Determinación del caso base 3. Ejemplos clásicos 3.1. Búsqueda binaria 3.2. Algortimos de ordenación 3.3. Problema de la selección 3.4. Multiplicación de matrices de Strassen 1. Planteamiento general • Idea general – Descomponer un problema en subproblemas (más pequeños) – Resolver cada subproblema – Combinar las soluciones 1
  • 2. 1. Planteamiento general Función DV(X: Datos del problema) si pequeño(X) entonces S = sencillo(X) sino (X1, ..., Xl) = descomponer(X) para i = 1 hasta l hacer Si = DV(Xi) S = combinar(S1, ..., Sl) devolver S 1. Planteamiento general • Asumiendo la existencia de – pequeño(X) - función booleana que determina si es práctico aplicar sencillo(X) – sencillo(X) - algoritmo práctico para el problema si su tamaño es suficientemente pequeño – descomponer(X) - función que descompone P en l subproblemas P1, ..., Pl con entradas X1, ..., Xl – combinar(S1, ..., Sl) - función que combina l soluciones Si para Pi, en una única para P 2
  • 3. 1. Planteamiento general • Efectividad del enfoque – Debe elegirse correctamente el umbral a partir del cual aplicar sencillo(X) – Las funciones de descomposición y combinación deben ser eficientes – Los subproblemas deben ser aproximadamente del mismo tamaño 1. Planteamiento general • Complejidad – pequeño(X) tarda un tiempo asimilable a otras funciones del esquema – sencillo(X) tarda f(n) – descomponer(X) y combinar(S1, ... Sl) tardan entre los dos g(n) – el tamaño de cada subproblema es de n/b 3
  • 4. 1. Planteamiento general • Complejidad t(n) = f(n) si sencillo(X) t(n) = l.t(n/b) + g(n) en otro caso y si g(n) ∈ θ(nk) t(n) ∈ θ(nk) si l < bk t(n) ∈ θ(nk.log n) si l = bk t(n) ∈ θ(nlog l) si l > bk 1. Planteamiento general • Observación – Si l = número de subproblemas – Y n/b = tamaño de los subproblemas – No necesariamente l = b !!! 4
  • 5. 1. Planteamiento general • Ejemplo (Multiplicación de grandes enteros) – Multiplicar dos números a y b enteros muy grandes – Algoritmo clásico ∈ θ(n2) con n = número de cifras del mayor de los números 1. Planteamiento general • Ejemplo (Multiplicación de grandes enteros) – Enfoque DyV1 – Dividir cada número en n/2 cifras – Ejemplo a = 981, b = 1234 • w = 09, x = 81 • y = 12, z = 34 • a . b = (102w + x)(102y + z) = 104wy + 102(wz + xy) + xz = 1080000 + 127800 + 2754 = 1210554 5
  • 6. 1. Planteamiento general • Ejemplo (Multiplicación de grandes enteros) – Complejidad DyV1 t(n) = 1 si n = 1 t(n) = 4.t(n/2) + n en otro caso => t(n) ∈ θ(n2) 1. Planteamiento general • Ejemplo (Multiplicación de grandes enteros) – Enfoque DyV2 – No calcular (wz + xy) = (w + x)(y + z) - wy - xz – p = wy, q = xz, r = (w + x)(y + z) • a . b = 104p + 102(r - p - q) + q 6
  • 7. 1. Planteamiento general • Ejemplo (Multiplicación de grandes enteros) – Complejidad DyV2 – Usando el algoritmo clásico para p, q, r, ahorramos 25% – Además t(n) = 1 si n = 1 t(n) = 3.t(n/2) + n en otro caso => t(n) ∈ θ(nlog3) = θ(n1.585) 2. Determinación del caso base • Ejemplo (Multiplicación de grandes enteros) – Supongamos que usamos el algoritmo DyV2 con t(n) = h(n) si n ≤ n0 t(n) = 3.t(n/2) + g(n) en otro caso siendo h(n) = n2 µs el tiempo de la multiplicación clásica y g(n) = 16n µs el tiempo de las sumas 7
  • 8. 2. Determinación del caso base • La elección del umbral de aplicación de sencillo(X) (es decir, pequeño(X)) es fundamental • Si no se elige adecuadamente, el enfoque D y V es muy ineficiente 2. Determinación del caso base • Ejemplo (Multiplicación de grandes enteros) – Si n0 = 1 • DyV2 tarda 41 segundos para 5000 cifras • M. Clásica tarda 25 segundos para 5000 cifras – Si n0 = 64 • DyV2 tarda 6 segundos para 5000 cifras 8
  • 9. 2. Determinación del caso base • El umbral depende de – los algoritmos – las implementaciones • Cálculo del umbral – Calcular la complejidad de los algoritmos – Calcular las constantes de la implementación – Calcular el n0 tal que los tiempos del algoritmo DV y del clásico coincidan en él 3. Ejemplos clásicos 3.1. Búsqueda binaria • Problema – Dada una matriz T de n componentes ordenada crecientemente (T[i] ≤ T[i+1]), y dado un elemento x, encontrar el i tal que • 1 ≤ i ≤ n+1 • T[i-1] < x ≤ T[i] – Observación • Si x no está en T, se pide dónde debería estar 9
  • 10. 3. Ejemplos clásicos 3.1. Búsqueda binaria • Solución clásica (secuencial) Función bsecuencial(T: matriz [1..n] de entero, x: entero) : entero para i = 1 hasta n hacer si (x ≤ T[i]) entonces devolver i devolver n+1 3. Ejemplos clásicos 3.1. Búsqueda binaria • Complejidad (secuencial) – O(n) en el caso peor – Ω(1) en el caso mejor – θ((n+1)/2) = θ(n) en media 10
  • 11. 3. Ejemplos clásicos 3.1. Búsqueda binaria • Enfoque Divide y Vencerás (binaria) – Dividir la matriz en dos partes de igual tamaño – Buscar en una sola de las dos partes – (Para reducir el número de llamadas, mirar primero si x puede estar en la matriz) 3. Ejemplos clásicos 3.1. Búsqueda binaria Función bbinaria(T: matriz [1..n] de entero, x: entero) : entero si ((n = 0) o (x > T[n])) entonces devolver n+1 sino devolver brecursiva(T,1,n,x) 11
  • 12. 3. Ejemplos clásicos 3.1. Búsqueda binaria Función brecursiva(T: matriz [1..n] de entero, i,j,x: entero) : entero si (i = j) entonces devolver i k = (i+j) div 2 si x ≤ T[k] entonces devolver brecursivo(T,i,k,x) sino devolver brecursivo(T,k+1,j,x) 3. Ejemplos clásicos 3.1. Búsqueda binaria • Complejidad t(n) = 1 si n = 1 t(n) = t(n/2) + g(n) si n = 2i, n > 1 con g(n) ∈ θ(1) => t(n) ∈ θ(log2 n) = θ(log n) 12
  • 13. 3. Ejemplos clásicos 3.1. Búsqueda binaria • Observaciones – Perdemos eficiencia en el caso mejor • El caso mejor de bsecuencial es más general – Ganamos eficiencia en todos los demás casos – La versión iterativa de bbinaria es equivalente en tiempo 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Problema – Dada una matriz T de n componentes, ordenarla ascendentemente • T[i] ≤ T[i+1] para 1 ≤ i ≤ n-1 – Disponemos de dos algoritmos que ordenan matrices en tiempo O(n2) • Ordenación por selección • Ordenación por inserción 13
  • 14. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Idea de un algoritmo de tipo D y V – Descomponer la matriz original en dos partes – Ordenar cada parte por separado – Combinar las partes ordenadas • Dos enfoques – Descomposición simple, combinación compleja – Descomposición compleja, combinación simple 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Ordenación por mezcla – Dividir la matriz por la mitad – Ordenar cada mitad – Mezclar las mitades ordenadas • Precisa espacio auxiliar (no es in situ) 14
  • 15. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación Procedimiento ordmezcla(T: matriz [1..n+1] de entero, i,j: entero) U, V: matriz [1..n+1] de entero si (i < j) entonces k = (i+j) div 2 para l = i hasta k hacer U[l] = T[l] para l = k+1 hasta j hacer V[l] = T[l] ordmezcla(U,i,k) ordmezcla(V,k+1,j) mezclar(U,V,T,k) 3. Ejemplos clásicos 3.2. Algoritmos de ordenación Procedimiento mezclar(U,V,T: matriz [1..n+1] de entero, i,j,k: entero) U[k+1] = ∞; V[j+1] = ∞ {marcadores para evitar comparaciones} i1 = i; j1 = k+1 {índices} para k2 = i hasta j hacer si (U[i1] < V[j1]) entonces T[k2] = U[i2] i2 = i2 +1 sino T[k2] = V[j2] j2 = j2 +1 15
  • 16. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad – La descomposición y la mezcla se hacen en tiempo lineal t(n) = 2t(n div 2) + g(n) si n es par t(n) = t(n div 2) + t(n div 2 +1) + g(n) si n es impar t(n) = 2t(n/2) + g(n) si n = 2i con g(n) ∈ θ(n) 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad t(n) ∈ θ(n.log2 n) – Precisa mucho espacio auxiliar – Caso base: j -i suficientemente pequeño => ordenar por inserción 16
  • 17. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Ordenación rápida (Hoare) – Se elige un elemento “pivote” – Se desplazan a un lado los elementos menores que él y a otro los mayores – Se ordenan las submatrices – No hace falta combinar los resultados 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Observaciones – Para que los subcasos queden equilibrados, la elección ideal del pivote es la mediana – La descomposición • no debe necesitar espacio auxiliar (in situ) • debe hacerse en una sola pasada 17
  • 18. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación Procedimiento pivote(T: matriz [1..n] de entero, i,j, var l: entero) p = T[i]; k = i; l = j+1 repetir k = k+1 hasta (T[k] > p ó k ≥ j) repetir l = l -1 hasta (T[l] ≤ p) mientras (k < l) hacer intercambiar(T,k,l) repetir k = k+1 hasta (T[k] > p) repetir l = l -1 hasta (T[l] ≤ p) intercambiar(T,i,l) 3. Ejemplos clásicos 3.2. Algoritmos de ordenación Procedimiento ordrapida(T: matriz [1..n] de entero, i,j: entero) si (i < j) entonces pivote(T,i,j,l) ordrapida(T,i,l-1) ordrapida(T,l+1,j) 18
  • 19. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad – El tamaño de los subproblemas depende de la posición donde va el elemento pivote – La posición del pivote depende de los datos del problema – Estudio del mejor y peor casos, y en media 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad (peor caso) – El peor caso se da cuando los subproblemas están más desequilibrados (por ejemplo, T ordenada) t(n) = t(n-1) + t(1) + g(n) con g(n) ∈ θ(n) (cálculo del pivote) => t(n) ∈ θ(n2) 19
  • 20. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad (mejor caso) – El mejor caso se da cuando los subproblemas están perfectamente equilibrados (por ejemplo, cuando el elemento pivote es siempre la mediana de la submatriz correspondiente) t(n) = 2t(n/2) + g(n) si n = 2i con g(n) ∈ θ(n) => t(n) ∈ θ(n.log n) 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Complejidad (en media) – Suposiciones • Los n elementos de T son distintos • pivote(T,1,n,l) asigna a l una posición cualquiera entre 1 y n => todas las posiciones equiprobables – Se estudia el número medio de llamadas y operaciones adicionales => t(n) ∈ θ(n.log n) 20
  • 21. 3. Ejemplos clásicos 3.2. Algoritmos de ordenación • Observaciones – Una versión práctica • Tomar la mediana de T[1], T[n/2], T[n] – Situación general • Los elementos se repiten => modificar pivote(T,i,j,l) para obtener pivote(T,i,j,k,l) de modo que entre k y l estén los elementos repetidos – Se puede lograr θ(n.log n) pero con una constante oculta alta 3. Ejemplos clásicos 3.3. Problema de la selección • Problema – Dada una matriz T de n componentes con elementos desordenados, encontrar el k-esimo elemento más pequeño • Si k = 1, se busca el mínimo • Si k = n, se busca el máximo • Si k = n/2, se busca la mediana (elemento que deja a su izda. el 50% de los datos, y a su dcha. el otro 50%) • Si k = 1/4, 1/2 y 3/4, se buscan los cuartiles • Si k = 1/10, 1/5, 3/10, ..., 9/10, se buscan los deciles 21
  • 22. 3. Ejemplos clásicos 3.3. Problema de la selección • Algoritmo sencillo – Ordenar la matriz – Seleccionar el elemento en la posición k • Complejidad – Usando la ordenación rápida O(n2) en el caso peor O(n.log n) en el caso mejor y en media 3. Ejemplos clásicos 3.3. Problema de la selección • Opción – Usar el procedimiento pivote(T,i,j,l) – El pivote queda en la posición l • Si l = k, hemos acertado • Si l > k, hay que buscar el elemento en las casillas de i a l-1 • Si l < k, hay que buscar el elemento en las casillas de l+1 a k 22
  • 23. 3. Ejemplos clásicos 3.3. Problema de la selección Función seleccion(T: matriz [1..n] de entero, k: entero): entero i = 1; j = n pivote(T,i,j,l) mientras (k ≠ l) hacer si (l > k) entonces j = l-1 sino i = l+1 pivote(T,i,j,l) devolver T[l] 3. Ejemplos clásicos 3.3. Problema de la selección • Complejidad – Depende de los datos de entrada, porque se basa en el procedimiento pivote – Caso mejor • Acertamos a la primera t(n) ∈ θ(n) 23
  • 24. 3. Ejemplos clásicos 3.3. Problema de la selección • Complejidad – Caso peor • Por ejemplo, k = 1 y T = [9, 1, 2, 3, 4, 5, 6, 7, 8] t(n) ∈ θ(n2) – En media • Se hace un número logarítmico de llamadas a pivote(), cada una con coste lineal t(n) ∈ θ(n.log n) 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Problema – Multiplicar dos matrices de nxn componentes • Solución elemental – La que viene dada por la definición clásica 24
  • 25. 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen Función multiplicar(A,B: matriz [1..n][1..n] de entero): matriz [1..n][1..n] de entero R : matriz [1..n][1..n] de entero para i = 1 hasta n hacer para j = 1 hasta n hacer R[i][j] = 0 para k = 1 hasta n hacer R[i][j] = R[i][j] + A[i][k] . B[k][j] devolver R 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Complejidad – t(n) ∈ θ(n3) • Enfoque Divide y vencerás – Descomponer las matrices en menores de tamaño inferior 25
  • 26. 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Descomposición A11 A12 B11 B12 R11 R12 A= B= R= A21 A22 B21 B22 R21 R22 R11 = A11xB11 + A12xB21 R12 = A11xB12 + A12xB22 R21 = A21xB11 + A22xB21 R22 = A21xB12 + A22xB22 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Complejidad t(n) = 1 si n ≤ 2 t(n) = 8t(n/2) + n2 si n > 2, n = 2i => t(n) ∈ θ(n3) 26
  • 27. 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Reducción del número de multiplicaciones (Strassen, 1970) P = (A11+A22) (B11+B22) Q = (A21+A22)B11 R11 = P+S-T+V R’ = A21(B12-B22) R12 = R’+T S = A22(B21-B11) => R21 = Q+S T = (A11+A12)B22 R22 = P+R-Q+U U = (A21-A11) (B11+B12) V = (A12-A22) (B21+B22) 3. Ejemplos clásicos 3.4. Multiplicación de matrices de Strassen • Complejidad t(n) = 1 si n ≤ 2 t(n) = 7t(n/2) + n2 si n > 2, n = 2i => t(n) ∈ θ(nlog2 7) = θ(n2,81) 27