Vous êtes sur la page 1sur 19

Anlisis de algoritmos

Clases 14 y 15: Divide y vencers (DyV)


Solicitado: Tarea 03: Investigacin e implementacin de 2 algoritmos que empleen DyV M. en C. Edgardo Adrin Franco Martnez http://computacion.cs.cinvestav.mx/~efranco
@efranco_escom

edfranco@ipn.mx

Contenido
Introduccin Divide y vencers Observaciones Complejidad de divide y vencers Ejemplo 01: Bsqueda del mximo y del mnimo
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Introduccin
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

En la cultura popular, divide y vencers hace referencia a un refrn que implica resolver un problema difcil, dividindolo en partes ms simples tantas veces como sea necesario, hasta que la resolucin de las partes se torna obvia. La solucin del problema principal se construye con las soluciones encontradas.
En las ciencias de la computacin, el trmino divide y vencers hace referencia a uno de los ms importantes paradigmas de diseo algortmico.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

El mtodo est basado en la resolucin recursiva de un problema dividindolo en dos o ms subproblemas de igual tipo o similar. El proceso contina hasta que stos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solucin al problema original.

Analizar y disear algoritmos de DyV son tareas que lleva tiempo dominar. Al igual que en la induccin, a veces es necesario sustituir el problema original por uno ms complejo para conseguir realizar la recursin, y no hay un mtodo sistemtico de generalizacin.
5

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Esta tcnica es la base de los algoritmos eficientes para casi cualquier tipo de problema como, por ejemplo, algoritmos de ordenamiento (quicksort, mergesort, entre muchos otros), multiplicar nmeros grandes (Karatsuba), anlisis sintcticos (anlisis sintctico top-down) y la transformada discreta de Fourier.

Divide y vencers
El mtodo divide y venceras consistente en descomponer el problema que hay que resolver en una serie de subproblemas, resolver estos subproblemas y combinar despes los resultados para obtener la solucin del problema original, pero de menor tamao, y se resuelven usando la misma tcnica.
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

De esta forma el mtodo se expresa de manera natural mediante un algoritmo recursivo.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Tenemos un problema complejo al cual dividimos en subproblemas mas pequeos a resolver. Para resolver cada subproblema seguimos el mismo procedimiento hasta que llegamos a un problema que es trivial. Una vez resueltos los subproblemas los combinamos para dar solucin al problema original.

fun divide_y_venceras(x: problema) dev y:solucin si pequeo(x) entonces y:=metodo_directo(x) si no {descomponer x en k >= 1 problemas ms pequeos} {x1, x2, ..., kx}:=descomponer(x)} {resolver recursivamente los subproblemas} para j=1 hasta k hacer yj:= divide_y_venceras(xj) fin para {combinar los yj para obtener una solucin y para x} y:=combinar(y1, ..., yk) fin si La funcin pequeo(x) es un predicado que fin
determina si el tamao del problema x es suficientemente pequeo para ser resuelto sin dividir ms. Si es ese el caso, el problema se resuelve mediante la funcin mtodo_directo(x).

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

La funcin complejidad para un problema de tamao n es un sistema de ecuaciones recurrentes de la forma: () = ()

() = () + () +
=1

([])

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Para que la aplicacin del mtodo divide y vencers, convenga debe cumplirse que las operaciones descomponer y combinar sean bastante eficientemente, que el nmero de subproblemas generados sea pequeo, y que los subproblemas sean aproximadamente del mismo tamao y no solapen entre s.

, () =

+ ,
=1

> 0

Donde () es el tiempo del algoritmo divide_y_venceras, () es el tiempo que toma combinar las soluciones y () es el tiempo del metodo_directo.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Si el problema es de tamao , y los tamaos de los subproblemas 1 , 2 , , son, respectivamente, 1 , 2 , , , podemos describir el coste en tiempo del algoritmo divide_y_venceras mediante la siguiente recurrencia:

10

Observaciones
1. En primer lugar, el nmero k debe ser pequeo e independiente de una entrada determinada.
En el caso particular de los algoritmos Divide y Vencers que contienen slo una llamada recursiva, es decir k=1, hablamos de algoritmos de simplificacin.
Tal es el caso del algoritmo recursivo que resuelve el clculo del factorial de un nmero, que sencillamente reduce el problema a otro subproblema del mismo tipo de tamao ms pequeo. Tambin es un algoritmo de simplificacin el de bsqueda binaria en un vector.
11
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Si la solucin de los subproblemas no es independiente el tiempo de ejecucin de estos algoritmos ser exponencial.
Tal es el caso la serie de Fibonacci, la cual, a pesar de ajustarse al esquema general y de tener slo dos llamadas recursivas, tan slo se puede considerar un algoritmo recursivo pero no clasificarlo como diseo Divide y Vencers.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

2. Desde un punto de vista de la eficiencia de los algoritmos Divide y Vencers, es muy importante conseguir que los subproblemas son independientes, es decir, que no existe solapamiento entre ellos.

12

Si la solucin de los subproblemas no tiene un coste similar para todos puede pasar que el coste caiga en un coste poco beneficioso que si se resolviera con el algoritmo clsico.
Tal es el caso del algoritmo de ordenacin rpida, si al realizar la particin del vector nos encontramos con que el pivote queda casi al principio o al final del vector, tendremos que el tiempo de ejecucin del algoritmo est en (2 ), mientras que si esta prximo a la mitad del vector, estar en ( log()).

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

3. Debe haber reparto de carga, es decir, la divisin de los subproblemas debe ser lo ms equilibrada posible.

13

Complejidad de divide y vencers


El diseo Divide y Vencers produce algoritmos recursivos cuyo tiempo de ejecucin se puede expresar mediante una ecuacin en recurrencia del tipo: , 1 < = (/) + , Donde , son nmeros reales, y son nmeros naturales, y donde > 0, > 0, 0 > 1. El valor de representa el nmero de subproblemas, / es el tamao de cada uno de ellos, y la expresin representa el coste de descomponer el problema inicial en los subproblemas y el de combinar las soluciones para producir la solucin del problema original, o bien el de resolver un problema elemental.
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

14

Las diferencias surgen de los distintos valores que pueden tomar y , que en definitiva determinan el nmero de subproblemas y su tamao. Lo importante es observar que en todos los casos la complejidad es de orden polinmico o polilogartmico pero nunca exponencial. Los algoritmos recursivos pueden alcanzar una complejidad exponencial en muchos casos. Esto se debe normalmente a la repeticin de los clculos que se produce al existir solapamiento en los subproblemas en los que se descompone el problema original.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

La solucin a esta ecuacin, puede alcanzar distintas complejidades. ( ) < = ( log ) = ( ) >

15

Ejemplo 01: Bsqueda del mximo y del mnimo


Mtodo directo
MaxMin (A: array [1..N] of tipo; var Max, Min: tipo) Max = A[1] Min = A[1] para i=2, 3, ..., N si A[i]>Max Max = A[i] en otro caso si A[i]<Min Min = A[i]
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Operacin bsica: Asignaciones a Max y Min.


Complejidad temporal Peor caso: Los nmeros estn hasta el final el mximo y el mnimo. () = + 1 ()

16

Divide y vencers
MaxMinDV (i, j: integer; var Max, Min: tipo) si i<j-1 mit = (i+j) div 2 MaxMinDV (i, mit, Max1, Min1) MaxMinDV (mit+1, j, Max2, Min2) /*Combinar*/ si Max1>Max2 Max= Max1 en otro caso Max = Max2 si Min1<Min2 Min = Min1 en otro caso Min = Min2 /*Caso base*/ en otro caso si i=j-1 si A[i]>A[j] Max = A[i] ; Min = A[j] en otro caso Max = A[j] ; Min= A[i] en otro caso Max = A[i] ; Min = Max
Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

Operacin bsica: Asignaciones a Max, Min, Max1, Min1, Max2 y Min2. Complejidad temporal Peor caso: Los nmeros estn hasta el final el mximo y el mnimo.

2, 1 2 2(/2) + 2, > 2

() ( ())

17

En el ejemplo anterior la complejidad temporal no obtuvo un beneficio al utilizar un algoritmo que emplea la tcnica de DyV, si se piensa como una aplicacin a funcionar bajo la idea de un proceso monoprocesador, pero si se considera que la solucin de los problemas parciales es independiente y se utiliza una idea de procesamiento paralelo, probablemente el potencial de un algoritmo como este se vera reflejado en los tiempos de procesamiento de problemas para n muy grandes.

Anlisis de algoritmos Clases 14 y 15: Divide y vencers (DyV) Prof. Edgardo Adrin Franco Martnez

18

Tarea03: Investigacin e implementacinde 2 algoritmos que empleen DyV


Anlisis de algoritmos Clases 10 y 11: Anlisis de algoritmos Iterativos Prof. Edgardo Adrin Franco Martnez

Investigar dos algoritmos ms que empleen la tcnica divide y vencers e implementarlos, documentar sus aplicaciones y las mejoras que presentan respecto a su equivalente algoritmo clasico.

*Se entregar antes del da Jueves 18 de Abril de 2013 (23:59:59 hora limite) con el nombre: "NombreApellido_Tarea03". *Portada y encabezados de pagina.

1.

19

Vous aimerez peut-être aussi