54
Divide y vencer´ as Dise˜ no y An´ alisis de Algoritmos

Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras

Diseno y Analisis de Algoritmos

Page 2: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Contenidos

Contenidos

1 Introduccion

2 Transforma y venceras

3 Decrementa y venceras

4 Divide y venceras

URJC DAA 2 / 54

Page 3: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Introduccion

Introduccion

URJC DAA 3 / 54

Page 4: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Introduccion

Divide y venceras

Uno de los mas importantes paradigmas de diseno algorıtmico

Se basa en la resolucion de un problema dividiendolo en dos o massubproblemas de igual tipo o similar

El proceso continua hasta que estos llegan a ser lo suficientementesencillos como para que se resuelvan directamente

Al final, las soluciones a cada uno de los subproblemas se combinanpara dar una solucion al problema original

Muchos algoritmos basados en esta estrategia son recursivos

Tambien hay algoritmos iterativos de divide y venceras

URJC DAA 4 / 54

Page 5: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Introduccion

Simplificacion y descomposicion de problemas

Las palabras clave en este tema van a ser la simplificacion y ladescomposicion de problemas

Veremos tres estrategias para simplificar y descomponer problemas:

Transforma y venceras

Decrementa y venceras

Divide y venceras

URJC DAA 5 / 54

Page 6: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Transforma y venceras

URJC DAA 6 / 54

Page 7: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Transforma y venceras

Esta estrategia tambien se denomina reduccion

Esta tecnica procura resolver un problema transformandolo en otromas simple, conocido, o para el que existan algoritmos eficientes

Problema A

transformación

Problema B

solución B

resoluciónsencilla

o eficiente

resolucióndifícil

o ineficiente

solución A

paso sencillo

URJC DAA 7 / 54

Page 8: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Encontrar la mediana de un array desordenado

Sea un array v de n numeros

1 Ordenar el array v −→ Θ(n log n)

2 Devolver

v [(n + 1)/2] si n es impar

v [n/2] + v [1 + n/2]

2si n es par

4 2 5 5 6 1 0 3 4 5 8 7

42 5 5 610 3 4 5 87

ordenar

4.5

URJC DAA 8 / 54

Page 9: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Estimacion del valor de π

Planteamos un problema alternativo

Buscamos una aproximacion del perımetro p de un cırculo deradio R

p = 2πR ⇒ π =p

2R

Aproximamos un cırculo con un polıgono regular inscrito ocircunscrito al cırculo

El perımetro del polıgono inscrito pi nos dara una cota inferior de p

El perımetro del polıgono circunscrito pc nos dara una cota superiorde p

pi2R≤ π ≤ pc

2R

URJC DAA 9 / 54

Page 10: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Estimacion del valor de π

Comenzamos por un polıgono regular inscrito (por ejemplo, unhexagono), cuyo perımetro sera 6R

A continuacion, doblamos el numero de lados, obteniendo una mejoraproximacion

Dodecágonoregular

Hexágonoregular

El perımetro de un polıgono con el doble de lados se puede obtenerfacilmente a partir del primero

Los perımetros de los polıgonos circunscritos se pueden obtener de losperımetros de los polıgonos inscritos

URJC DAA 10 / 54

Page 11: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Estimacion del valor de π

R

y

L/2

x

lL'

URJC DAA 11 / 54

Page 12: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Estimacion del valor de π

Si el lado de un polıgono inscrito mide L, se puede hallar la longitud un lado delpolıgono l con el doble de lados

R2 = y 2 +(L

2

)2 ⇒ y =

√R2 −

(L2

)2x = R − y = R −

√R2 −

(L2

)2

l =

√(L2

)2+ R2 + R2 −

(L2

)2 − 2R

√R2 −

(L2

)2= R

√2−

√4−

( LR

)2

El lado L′ de un polıgono circunscrito se puede hallar a partir del lado L de unpolıgono inscrito

L′

R=

L

y⇒ L′ =

LR

y

la estimacion de π se obtiene a partir de los perımetros hallados:

L · numero de lados

2R≤ π ≤ L′ · numero de lados

2R

URJC DAA 12 / 54

Page 13: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Otros metodos para estimar del valor de π

Simulacion Monte Carlo Integracion numerica

Series

arctan x = x− x3

3+

x5

5− x7

7+ . . . para x = 1 ⇒ π

4= 1− 1

3+

1

5− 1

7+ . . .

URJC DAA 13 / 54

Page 14: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Raız cuadrada

Deseamos hallar√a

Transformamos el problema en el de hallar un cero de una funcion

x =√a → x2 = a → x2 − a = 0

Por tanto, querremos hallar un cero de la funcion y = x2 − a

Como x sera generalmente un numero real, nos podemos conformarcon una aproximacion

Hay varios metodos para resolver este nuevo problema, por ejemplo:

Metodo de Newton-Raphson (que veremos a continuacion)

Metodo de biparticion (de “decrementa y venceras”)

URJC DAA 14 / 54

Page 15: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Metodo de Newton-RaphsonSe trata de un metodo iterativo, que parte de un valor inicial x0, y aplica lasiguiente regla para hallar un cero de la funcion f (x):

xn+1 = xn −f (xn)

f ′(xn)

En cada iteracion se busca la recta tangente a f (x) que pasa por el punto(xn, f (xn))

El corte de la recta con el eje de abscisas constituye el nuevo punto xn+1

URJC DAA 15 / 54

Page 16: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Metodo de Newton-Raphson

El metodo surge del desarrollo de f (x) en serie de Taylor, para unentorno del punto xn:

f (x) = f (xn) + f ′(xn)(x − xn) + (x − xn)2f ′′(xn)

2!+ ...

Si se trunca el desarrollo a partir del termino de grado 2, se obtiene larecta tangente (que pasa por el punto (xn, f (xn)))

Posteriormente evaluamos en xn+1:

f (xn+1) = f (xn) + f ′(xn)(xn+1 − xn)

Si asumimos que xn+1 tiende hacia el cero de la funcion, podemossustituir f (xn+1) = 0, obteniendose el algoritmo

URJC DAA 16 / 54

Page 17: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Raız cuadrada - metodo de Newton-RaphsonDebemos aplicar la regla para f (x) = x2 − a, con f ′(x) = 2x

xn+1 = xn −x2n − a

2xn=

2x2n2xn− x2n − a

2xn=

x2n + a

2xn

−1 0 1 2 3 4 5 6−25

−20

−15

−10

−5

0

5

10

15

20

25

xn

xn+1

f (x) = x2 − 13

URJC DAA 17 / 54

Page 18: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Transforma y venceras

Factorizacion LU

Supongamos que queremos resolver un sistema de ecuaciones Ax = b repetidasveces, para muchos valores diferentes de b, pero para la misma matriz A

Para acelerar el calculo se puede realizar una factorizacion LU

Sea A una matriz cuadrada en invertible, buscamos una factorizacion A = LU,donde L es triangular inferior, y U triangular superior (del mismo tamano). Parauna matrix de 3× 3 tendrıamos:a11 a12 a13

a21 a22 a23a31 a32 a33

=

l11 0 0l21 l22 0l31 l32 l33

u11 u12 u130 u22 u230 0 u33

Para resolver el sistema Ax = b ahora se van a resolver dos, pero mas sencillos:

Ax = LUx = b ⇒ Ly = b, Ux = y

Una descomposicion es util cuando hay que hacer repetidas operaciones con lamatriz A

URJC DAA 18 / 54

Page 19: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Decrementa y venceras

URJC DAA 19 / 54

Page 20: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Decrementa y venceras

La descomposicion de un problema genera un solo subproblema

La solucion al subproblema puede ser la solucion al problema original

Para otros problemas se requiere realizar alguna operacion adicionalcon la solucion al subproblema

Problema

solución

operaciónsencilla

Subproblema

decrementa

URJC DAA 20 / 54

Page 21: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Busqueda binaria en un array ordenado

Se compara el elemento central con el elemento a buscar

Si no se encuentra se busca en alguna de las dos mitades

T (n) =

a si n = 1b + T (n/2) si n ≥ 2

∈ Θ(log n)

URJC DAA 21 / 54

Page 22: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Metodo de biparticion

Metodo para hallar un cero de una funcion f continua en un intervalo [a, b]

Los signos de f (a) y f (b) son distintos

Se busca un cero en la mitaddel intervalo c = (a + b)/2

Si no se encuentra se busca en[a, c] o [c , b]

Se repite el proceso hasta unadeterminada precision ε (hastaque el ancho del intervalo seamenor que 2ε)

URJC DAA 22 / 54

Page 23: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Ordenacion por seleccion

1 Encontrar el menor elemento de una lista

2 Intercambiarlo con el primero de la lista

3 Aplicar el algoritmo de nuevo al resto de la lista (toda la lista salvo elprimer elemento)

problema (tamaño n)

problema (tamaño n-1)

Observad que se ha omitido a proposito mostrar mas niveles parailustrar 2, 3, 4. . . elementos ordenados

Solo se muestra la descomposicion necesaria para realizar el diseno

URJC DAA 23 / 54

Page 24: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Algoritmo de Euclides

La reduccion del tamano del problema no siempre es tan obvia

El algoritmo de Euclides encuentra el maximo comun divisor de dosnumeros naturales

Hay dos versiones

mcd1(m, n) =

n si m = 0mcd1(n,m) si m > nmcd1(m, n −m) si (m ≤ n) y (m 6= 0)

mcd2(m, n) =

n si m = 0mcd2(n%m,m) si m 6= 0

En cada paso nos vamos acercando al caso base

URJC DAA 24 / 54

Page 25: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Algoritmo de Euclides - Demostracion mcd1

mcd1(m, n) =

n si m = 0mcd1(n,m) si m > nmcd1(m, n −m) si (m ≤ n) y (m 6= 0)

Supongamos que m ≤ n (en caso contrario el propio algoritmo intercambialos parametros)

m = az , n = bz , con a ≤ b

z son los factores primos (maximo comun multiplo)a y b no comparten factores primos

Hacemos b = a + c

n = bz = (a + c)z = (a1 · · · ak + c1 · · · cl)zNo se puede sacar factor comun. Si se pudiera serıa otro factor de z .a, c no comparten primos

Por tanto, dado que z = mcd1(az , bz) = mcd1(az , cz), y c = b − atenemos:

mcd1(m, n) = mcd1(az , bz) = mcd1(az , cz) = mcd1(m, n −m)

URJC DAA 25 / 54

Page 26: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Algoritmo de Euclides - Demostracion mcd2

mcd2(m, n) =

n si m = 0mcd2(n %m,m) si m 6= 0

Supongamos que m ≤ n (en caso contrario el propio algoritmo intercambia losparametros)

m = az , n = bz , con a ≤ b

z son los factores primosa y b no comparten factores primos

Hacemos b = ac + d , donde c y d son el cociente y el resto de b/a

a y d no pueden compartir factores, de lo contrario serıan tambien factores de b

Por tanto:

z = mcd2(az , bz) = mcd2(dz , az)⇒ mcd2(m, n) = mcd2(n %m,m)

URJC DAA 26 / 54

Page 27: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Decrementa y venceras

Potencia en tiempo Θ(log n)

513 = 511012 = 1 · 58 + 1 · 54 + 0 · 52 + 1 · 51

Algoritmo iterativo:

aux e e %2 suma51 13 1 51

52 6 0 0 + 51

54 3 1 54 + 0 + 51

58 1 1 58 + 54 + 0 + 51

Algoritmo recursivo (se calculan potencias de la mitad de tamano, yluego se combina su resultado):

b0 = 1be = be/2 · be/2 para e parbe = b · b(e−1)/2 · b(e−1)/2 para e impar

Sin embargo, como los subproblemas son identicos, solo se calculanuna vez, obteniendose un algoritmo eficiente

URJC DAA 27 / 54

Page 28: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Divide y venceras

URJC DAA 28 / 54

Page 29: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Divide y venceras

La descomposicion de un problema genera varios subproblemas

Las soluciones a los subproblemas se combinan para generar lasolucion al problema original, la cual puede requerir alguna operacionadicional

solución

combinaSubproblemadivide

Subproblema

Subproblema

Problema

URJC DAA 29 / 54

Page 30: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Maximo de un vector de numeros

Caso base

Si el vector tiene tamano 1 se devuelve el elemento

Descomposicion

m1 = maximo de la primera mitad del vector

m2 = maximo de la segunda mitad del vector

Combinacion

maximo = maxm1,m2

max(v) =

v [1] si n = 1max(max(v [1 : n/2]),max(v [n/2 + 1 : n])) si n > 1

n = v .length

URJC DAA 30 / 54

Page 31: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Maximo de un vector de numeros

¿Conseguimos un algoritmo mas eficiente que una busqueda lineal?

No. Sea cual sea nuestra estrategia tenemos que mirar todos loselementos del vector

Este problema tiene una cota inferior Ω(n)

T (n) =

1 si n = 11 + 2T (n/2) si n > 1

A pesar de dividir el problema por dos, pero tenemos que resolver dosproblemas

El arbol de recursion tiene del orden de 2h nodos, donde h es la alturadel arbol

Pero en este problema h = log2 n, y el numero de nodos es n

T (n) ∈ Θ(n)

URJC DAA 31 / 54

Page 32: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Maximo de un vector de numeros

1 public static int max2 (int[] v)

2 return maxDyV (v, 0, v.length-1);

3

4 private static int max (int m, int n)

5 return (m>n?m:n);

6

7 public static int maxDyV (int[] v, int inf, int sup)

8 if (inf==sup)

9 return v[inf];

10 else

11 int medio = (inf+sup)/2;

12 return max (maxDyV (v, inf, medio),

13 maxDyV (v, medio+1, sup));

14

15

URJC DAA 32 / 54

Page 33: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Merge-sort

Sea un vector de tamano n

Algoritmo de ordenacion en tiempo Θ(n log n)

En todos los casos: mejor, peor, y medio

Memoria auxiliar

Θ(n) en todos los casos: mejor, peor, y medio

Se denominan: “out-of-place”: se requiere un vector auxiliar de tamanon. Es decir, la ordenacion no se realiza en el propio vector

URJC DAA 33 / 54

Page 34: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Merge-sort

Caso base

Si el vector tiene tamano 1 se devuelve el elemento

Descomposicion

Se divide el vector en dos, generalmente por la mitad, y se ordenan lasdos partes por separado

Combinacion

Se mezclan las dos mitades ordenadas

T (n) =

1 si n = 1n + 2T (n/2) si n > 1

¿Cual es el tiempo si no se divide el vector por la mitad, sino segunun 10 % y 90 %?

Tambien Θ(n log n)

URJC DAA 34 / 54

Page 35: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Merge-sort

Paso a paso

38 27 43 3 9 82 10

38 27 43 3 9 82 10

38 27 43 3 9 82 10

38 27 43 3 9 82 10

3827 433 9 82 10

3 27 38 43 9 10 82

3 27 38 439 10 82

Parte izquierda

Parte derecha

Vector ordenado

URJC DAA 35 / 54

Page 36: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Merge-sort

Para disenar el codigo, es mejor pensar en este esquema

38 27 43 3 9 82 10

38 27 43 3 9 82 10

3 27 38 43 9 10 82

3 27 38 439 10 82

Descomponer el problema

Ordenar subproblemas

Combiar soluciones

URJC DAA 36 / 54

Page 37: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion del Merge-sort I

1 void mergeSort1 (int[] v)

2 ordenarPorMezcla1 (v, 0, v.length-1);

3

4

5 void ordenarPorMezcla1 (int[] v, int inf, int sup)

6 if (inf<sup)

7 int medio = (inf+sup)/2;

8 ordenarPorMezcla1 (v, inf, medio);

9 ordenarPorMezcla1 (v, medio+1, sup);

10 mezclar1 (v, inf, medio, sup);

11

12

URJC DAA 37 / 54

Page 38: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion del Merge-sort I

Mezcla ineficiente (puede ocasionar errores en tiempo de ejecucion)

1 void mezclar1 (int[] v, int inf, int medio, int sup)

2 //vector auxiliar de longitud n (lento)

3 int[] vAux = new int[v.length];

4 ...

Mezcla eficiente

1 void mezclar1_mejor (int[] v, int inf, int medio, int sup)

2 //vector auxiliar de longitud exacta

3 int[] vAux = new int[sup-inf+1];

4 ...

URJC DAA 38 / 54

Page 39: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion alternativa del Merge-sort II

El parametro auxiliar debe pasarse por referencia

1 void mergeSort2 (int[] v)

2 //vector auxiliar de longitud n, se propaga

3 int[] vAux = new int[v.length];

4

5 ordenarPorMezcla2 (v, 0, v.length-1, vAux);

6

7

8 void ordenarPorMezcla2 (int[] v, int inf, int sup, int[] vAux)

9 if (inf<sup)

10 int medio = (inf+sup)/2;

11 ordenarPorMezcla2 (v, inf, medio, vAux);

12 ordenarPorMezcla2 (v, medio+1, sup, vAux);

13 mezclar2 (v, inf, medio, sup, vAux);

14

15

1 void mezclar2 (int[] v, int inf, int medio, int sup, int [] vAux)

2 ...

URJC DAA 39 / 54

Page 40: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Quick-sort

Caso base

Si el vector tiene tamano 1 se devuelve el elemento

Descomposicion

Se escoge un elemento “pivote”

Se divide el vector en tres partes:

Parte izquierda: elementos menores o iguales que el pivote

El propio pivote

Parte derecha: elementos mayores que el pivote

Posteriormente se ordenan las partes izquierda y derecha

Combinacion

Trivial: el vector ya esta ordenado, no hay que hacer nada mas

URJC DAA 40 / 54

Page 41: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Quick-sort

Esquema:

26 5 37 1 61 11 59

Descomponer el problema

Ordenar subproblemas

Combiar soluciones

15 48 19

265 371 6111 5915 4819

265 371 6111 5915 4819

265 371 6111 5915 4819

trivial

URJC DAA 41 / 54

Page 42: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Quick-sort

Caso mejor (el elemento pivote esta en la mitad)

T (n) =

1 si n = 12T (n/2) + Θ(n) si n > 1

⇒ Θ(n log n)

Caso peor (un subvector queda siempre vacıo)

T (n) =

1 si n = 1T (0) + T (n − 1) + Θ(n) si n > 1

⇒ Θ(n2)

URJC DAA 42 / 54

Page 43: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Quick-sort

Algoritmo de ordenacion rapido en la practica

Caso peor: Θ(n2)

Caso mejor: Θ(n log n)

Caso medio: Θ(n log n)

Suele superar a otros algoritmos Θ(n log n) al utilizar mejor lasjerarquıas de memoria

Memoria auxiliar

O(n)

Puede ser “out-of-place” o “in-place” (la ordenacion no se realiza en elpropio vector)

URJC DAA 43 / 54

Page 44: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion del Quick-sort

1 void quickSort (int[] v)

2 ordenarRapido (v, 0, v.length-1);

3

4

5 void ordenarRapido (int[] v, int inf, int sup)

6 if (inf<sup)

7 int med = partir (v, inf, sup);

8 if (inf<med) ordenarRapido (v, inf, med-1);

9 if (med<sup) ordenarRapido (v, med+1, sup);

10

11

URJC DAA 44 / 54

Page 45: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion del Quick-sort

1 int partir (int[] v, int inf, int sup)

2 int piv = v[inf];

3 int izq = inf+1;

4 int dcha = sup;

5 int temp;

6 do

7 for (; v[izq]<=piv && izq<sup ; izq++);

8 for (; v[dcha]>piv /*&&dcha>inf*/; dcha--);

9 if (izq<dcha)

10 temp = v[izq];

11 v[izq] = v[dcha];

12 v[dcha] = temp;

13

14 while (izq<dcha);

15 /* v[inf] <-> v[dcha] */

16 temp = v[inf];

17 v[inf] = v[dcha];

18 v[dcha] = temp;

19 return dcha;

20

URJC DAA 45 / 54

Page 46: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion del Quick-sort, metodo partir

4 3 5 6 2 1

izq dcha

piv intercambio

4 3 1 6 2 5

izq dcha

piv intercambio

4 3 1 2 6 5

izqdcha

piv intercambio

2 3 1 4 6 5

Hay otras implementaciones que no escogen el primer elemento como pivote

URJC DAA 46 / 54

Page 47: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Traspuesta de una matriz

Sea una matriz A de dimensiones n× n, donde n es una potencia de 2

Se puede definir su traspuesta AT dividiendo la matriz en bloques:

A =

A11 A12

A21 A22

⇒ AT =

AT11 AT

21

AT12 AT

22

URJC DAA 47 / 54

Page 48: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion de la traspuesta de una matriz

1 void trasponer (int[][] m)

2 trasponerDyV1 (m, 0, m.length-1, 0, m.length-1);

3

4

5 void trasponerDyV1 (int[][] m,

6 int fInicio, int fFin, int cInicio, int cFin)

7 // caso basico de 1x1

8 if (fInicio<fFin)

9 int fMedio = (fInicio+fFin)/2;

10 int cMedio = (cInicio+cFin)/2;

11 trasponerDyV1 (m, fInicio, fMedio, cInicio, cMedio);

12 trasponerDyV1 (m, fInicio, fMedio, cMedio+1, cFin);

13 trasponerDyV1 (m, fMedio+1, fFin, cInicio, cMedio);

14 trasponerDyV1 (m, fMedio+1, fFin, cMedio+1, cFin);

15 intercambiar (m, fMedio+1, cInicio, fInicio, cMedio+1, fFin-fMedio);

16

17

URJC DAA 48 / 54

Page 49: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Implementacion de la traspuesta de una matriz

1 void intercambiar (int[][] m,int fIniA, int cIniA,

2 int fIniB, int cIniB, int dimen)

3 for (int i=0; i<=dimen-1; i++)

4 for (int j=0; j<=dimen-1; j++)

5 int aux = m[fIniA+i][cIniA+j];

6 m[fIniA+i][cIniA+j] = m[fIniB+i][cIniB+j];

7 m[fIniB+i][cIniB+j] = aux;

8

9

URJC DAA 49 / 54

Page 50: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Traspuesta de una matriz no cuadrada

Tambien puede implementarse cuando n no es una potencia de dos, oincluso cuando la matriz no es cuadrada

Se pueden usar matrices de tamano fijo:

A

C D

B

espacio no usado espacio no usado

matriz original matriz nueva (copia auxiliar)

AT CT

BT DT

Por supuesto, tambien se puede usar memoria dinamica

URJC DAA 50 / 54

Page 51: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Multiplicacion de matricesLa division de una matriz en bloques tiene varias ventajas:

Simplifica operaciones algebraicas

Se puede aprovechar para construir algoritmos eficientes que haganbuen uso de la memoria cache

Para realizar una multiplicacion hay varias formas de dividir la matriz

A · B =

(A1

A2

)·(B1 B2

)=

(A1B1 A1B2

A2B1 A2B2

)

A · B =(A1 A2

)·(

B1

B2

)=(A1B1 + A2B2

)

A · B =

(A11 A12

A21 A22

)·(

B11 B12

B21 B22

)=

(A11B11 + A12B21 A11B12 + A12B22

A21B11 + A22B21 A21B12 + A22B22

)

URJC DAA 51 / 54

Page 52: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Multiplicacion de matrices - complejidad

Sea A una matriz de p × q, y B una matriz de q × r

El producto C = AB requiere O(pqr) operaciones

Considerese que las matrices son cuadradas de dimension n × n, y lasiguiente descomposicion:

A·B =

(A11 A12

A21 A22

)·(

B11 B12

B21 B22

)=

(A11B11 + A12B21 A11B12 + A12B22

A21B11 + A22B21 A21B12 + A22B22

)

T (n) =

1 si n = 18T (n/2) + 4Θ(n2) si n > 1

8 multiplicaciones (de matrices de n/2× n/2)

4 sumas (de matrices de n/2× n/2)

Por el teorema maestro: T (n) = Θ(nlog2 8) = Θ(n3)

URJC DAA 52 / 54

Page 53: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Multiplicacion de matrices - algoritmo de Strassen

La operacion basica mas costosa es la multiplicacion

El algoritmo de Strassen consigue reducir el numero demultiplicaciones

Considerese la siguiente descomposicion:(A11 A12

A21 A22

)·(

B11 B12

B21 B22

)=

(C11 C12

C21 C22

)

M1 = (A11 + A22)(B11 + B22)M2 = (A21 + A22)B11

M3 = A11(B12 − B22)M4 = A22(B21 − B11)M5 = (A11 + A12)B22

M6 = (A21 − A11)(B11 + B12)M7 = (A12 − A22)(B21 + B22)

C11 = M1 + M4 −M5 + M7

C12 = M3 + M5

C21 = M2 + M4

C22 = M1 −M2 + M3 + M6

URJC DAA 53 / 54

Page 54: Diseno~ y An alisis de Algoritmos...Divide y vencer as Transforma y vencer as Estimaci on del valor de ˇ Comenzamos por un pol gono regular inscrito (por ejemplo, un hex agono), cuyo

Divide y venceras Divide y venceras

Multiplicacion de matrices - algoritmo de Strassen

Con esa factorizacion el algoritmo requiere

7 multiplicaciones

18 sumas

T (n) =

1 si n = 17T (n/2) + 18Θ(n2) si n > 1

Por el teorema maestro: T (n) = Θ(nlog2 7) = Θ(n2,807)

Solo es mas eficiente que una multiplicacion ordinaria si el tamano delas matrices es muy elevado

Actualmente hay un algoritmos en O(n2,376) (Coppersmith -Winograd)

En la practica la mejor estrategia para acelerar el producto de dosmatrices consiste en aprovechar la estructura jerarquica de la memoria

URJC DAA 54 / 54