Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Análisis de Algoritmos: Divide y Vencerás y Búsqueda Binaria - Prof. Pantrigo, Apuntes de Ingeniería del Software

El algoritmo divide y vencerás aplicado a problemas de complejidad y a la ordenación de vectores mediante el algoritmo mergesort. Además, se incluye la búsqueda binaria en vectores ordenados. Se comparan los casos promedio y peor de tiempo de ejecución de estos algoritmos.

Tipo: Apuntes

2012/2013

Subido el 12/10/2013

blueeyes3334
blueeyes3334 🇪🇸

3.9

(40)

24 documentos

1 / 18

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
4. Divide y vencerás
1
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
4. Divide y vencerás
Antonio Pérez Carrasco
4. Divide y vencerás
3
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Introducción
4. Divide y vencerás
4
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Introducción
Técnica informática de diseño de algoritmos
que resuelve un problema grande
descomponiéndolo en problemas más
pequeños iguales
La técnica se aplica de manera recursiva
4. Divide y vencerás
5
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Introducción
Condiciones que deben cumplirse:
Poder dividir el problema en
subproblemas:
del mismo tipo que el original
más pequeños que el original
disjuntos entre sí
del mismo/similar tamaño entre sí
Poder resolver problemas pequeños de
manera directa
Debe ser posible combinar posteriormente
las subsoluciones obtenidas de manera
eficiente
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Vista previa parcial del texto

¡Descarga Análisis de Algoritmos: Divide y Vencerás y Búsqueda Binaria - Prof. Pantrigo y más Apuntes en PDF de Ingeniería del Software solo en Docsity!

  1. Divide y vencerás

1

http://www.dlsi1.etsii.urjc.es

4. Divide y vencerás Diseño y Análisis de Algoritmos

Antonio Pérez Carrasco

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Introducción

  1. Divide y vencerás

4

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Introducción • Técnica informática de diseño de algoritmos

que resuelve un problema grandedescomponiéndolo en problemas máspequeños

iguales

  • La técnica se aplica de manera

recursiva

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Introducción • Condiciones

que deben cumplirse:

  • Poder dividir el problema en

subproblemas:^ • del

mismo tipo

que el original

  • más pequeños

que el original

  • disjuntos

entre sí

  • del

mismo/similar tamaño entre sí

  • Poder resolver problemas pequeños de

manera directa

  • Debe ser

posible combinar

posteriormente

las

subsoluciones

obtenidas de manera

eficiente

  1. Divide y vencerás

6

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Introducción •^

Pasos de aplicación de la técnica:

  1. Se plantea un problema para

dividir

•^

Subproblemas del

mismo tipo

•^

Subproblemas

más pequeños

  1. Resolución

de cada subproblema

•^

Caso base:

directo

•^

Caso recursivo:

llamadas recursivas

  1. Combinación

de las subsoluciones obtenidas

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

2.1º

2.2º

2.3º

2.4º

2.5º

Introducción

  1. Divide y vencerás

8

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Introducción •^

División en

k

subproblemas

-^

k^

pequeño

-^

k^

independiente del tamaño de la entrada

-^

Subproblemas

de igual tamaño entre sí

-^

Por eficiencia, subproblemas

no solapados

-^

k^

= 1, problemas de simplificación

-^

Ejemplo: factorial

-^

Versión iterativa fácil de encontrar

-^

Esquema de

código sencillo y legible

-^

Técnica

recursiva

-^

Quizá no buen comportamiento en memoria

-^

Quizá no buen comportamiento en tiempo

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Máximo de un vector

  1. Divide y vencerás

15

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Análisis de complejidad en DYV

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Análisis de complejidad en DYV • Tenemos un problema de tamaño

n

  • Cuando dividimos un problema, obtenemos

k^

subproblemas

  • El

tamaño de los subproblemas

será

n

/ b

siendo

b

una constante

  • Orden p de complejidad

de división y

combinación

n

k

n’=n/b

  1. Divide y vencerás

17

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Análisis de complejidad en DYV • Función de recurrencias

T(n) =

g(n)

caso base

T(n)=

T(n) =

k · T(n / b) + f(n)

caso recursivo

k ≥ 1 , b ≥ 2f(n) = c·n

p^ Є

O(n

p), p entero

  • f(n)

= tiempo requerido para dividir el problema y combinar las subsoluciones

  • g(n)

= tiempo requerido para calcular solución del caso base

  • T(n)

= tiempo total para el algoritmo

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Análisis de complejidad en DYV • Si se realizan

k llamadas recursivas

(k

subproblemas) de

tamaño n/b

, y el orden de

complejidad de las operaciones de

división y

combinación es p

(c·n

p^ Є

Θ(n

p), p entero)

  • Resultado para T(n):

T(n) =

Θ(n

p) ,

k < b

p

T(n) є

Θ(n

p^ · log n) ,

k = b

p

T(n) =

Θ(n

log

kb

k > b

p

  • No calculamos T(n), sólo el orden de

complejidad

  1. Divide y vencerás

19

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Análisis de complejidad en DYV • Problema:

  • En un problema de Divide y Vencerás

cualquiera, dividimos nuestro problemarecursivamente en 4 subproblemas detamaño la mitad que el original y con laslabores de división y combinación acotadaspor O(n). ¿Cuál es el orden decomplejidad?^ k=4b=2p=

k^

?^

pb

4

?^

(^12)

4

^

(^12)

k^

b

p

Θ(n

log

k)b

Θ(n

log

(^42) ) = Θ(n

2 )

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Búsqueda en vectores

  1. Divide y vencerás

21

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Búsqueda en vectores: b. dicotómica Tenemos un vector ordenado:•^

Queremos encontrar un número x

-^

El número x puede no estar

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Búsqueda en vectores: b. dicotómica ¿En cuántos subproblemas dividimos el

problema inicial? Secuencial: Caso promedio y caso peor: O(n)DYV: Caso promedio y caso peor: O(log n)•^

¿Por qué? T(n) = Θ(n

p^

· log n) , k = b

p

k=1, dividimos el problema en un subproblemap=0, no hay operación de combinaciónb=2, el tamaño del subproblema es la mitad

1 = 2

0

  1. Divide y vencerás

27

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: mergesort • Permite paralelización• Es el algoritmo que mejor comportamiento

tiene con estructuras de acceso complejo,como listas enlazadas

  • Realiza un 39% menos de comparaciones en

el peor caso que Quicksort en el caso medio

  • Mergesort, caso peor: 2n-1 llamadas rec.• Quicksort, caso peor: n llamadas recursivas
  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: mergesort • Código public static void mergeSort (int[] v){

ordenarPorMezcla (v, 0, v.length-1);

} public static void mergeSort(int[] v, int inf, int sup){

if (inf<sup) {

int medio = (inf+sup)/2;

(inf+sup+1)/2;

mergeSort (v, inf, medio);

v,inf, medio-

mergeSort (v, medio+1, sup);

v,medio,sup

merge (v, inf, medio, sup);

// implicaciones

} }

  1. Divide y vencerás

29

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: mergesort • Funcionamiento del método “merge”

v1 v

v

v v

v

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: mergesort • Variaciones del método “merge”

  • Un vector auxiliar independiente en cada

subllamada

  • Un subvector auxiliar independiente en

cada subllamada

  • Un vector auxiliar para todas las

subllamadas

  • Complejidad mergesort:

k=

b=

p=

Θ(n

1

log n) = Θ(n log n)

  1. Divide y vencerás

31

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ordenación rápida:1. Selección de un

pivote

  1. Mover

el resto de elementos

-^

Los

menores

del pivote, a su

izquierda

-^

Los

mayores

del pivote, a su

derecha

  1. Al final, el

pivote

queda

ordenado

-^

Mejor caso: en el centro Θ(n·log n)

-^

Caso medio: aprox. centro, Θ(n·log n)

-^

Peor caso: en un extremo Θ(n

2 )

  1. Aplicación recursiva del algoritmo sobre

las mitades, separadas por el pivote

  1. Divide y vencerás

33

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ordenación rápida,

selección de pivote

–^

Cualquier elemento

: no cálculo adicional

-^

Riesgo de mala elección, poca eficiencia

-^

Recorrer lista para “

adivinar

” elemento

central, O(n) •^

Asegura que el algoritmo sea Θ(n·log n)

-^

Introduce cálculos, eficiencia baja

-^

Tres elementos, elegir el

valor en medio

-^

Muy pocos cálculos

-^

Relativamente fiable en caso medio

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ejemplo–^

Tomamos como pivote el primerelemento^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley

Capítulo 7, Sección 4, Pág. 262

  1. Divide y vencerás

39

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ejemplo–^

Se reanuda la búsqueda^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley

Capítulo 7, Sección 4, Pág. 262

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ejemplo–^

Los punteros se cruzan^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley

Capítulo 7, Sección 4, Pág. 262

  1. Divide y vencerás

41

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort •^

Ejemplo–^

Se intercambia el pivote con el elementono mayor^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley

Capítulo 7, Sección 4, Pág. 262

-^

Ordenación recursiva de cada mitad

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Ordenación de vectores: quicksort Algoritmo

•^

Tomamos como pivote el primer elemento

-^

Buscamos el primer elemento mayor que elpivote y el último no mayor que el pivote

-^

Se intercambian los dos elementosencontrados

-^

Si los punteros no se han cruzado, vamos alpunto 2º

-^

Se intercambia el pivote con el elemento nomayor

-^

Ordenación recursiva de las dosmitades, separadas por el pivote

  1. Divide y vencerás

43

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Mediana de dos vectores

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Mediana de dos vectores • Problema:

  • Dos vectores

x

e

y

ordenados de manera

no decreciente, ambos de longitud n

-^ x y Queremos calcular cuál de los elementos de^ los dos vectores sería la mediana del vectorresultante de la unión de esos dos vectores

  1. Divide y vencerás

45

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Mediana de dos vectores • Problema:

  • El vector resultante,

z

, también ordenado,

tiene longitud 2n

  • La mediana es el elemento “central”, que

tiene tantos elementos a su izquierda comoa su derecha

  • Este algoritmo nos da el elemento que será

la mediana del vector resultante, no realizala mezcla de los vectores z

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Mediana de dos vectores • Resolviendo...:

  • Caso base: n=
    • La mediana es el valor mínimo de los dos
      • Caso general
        • Buscamos mediana de

x

y de

y

,^ m

y x m

y

  • Si

m

= x m

, entoncesy

m

es igual a z

m

y x m

y

x y z

  1. Divide y vencerás

51

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen)

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Algoritmo clásico:

– C

=ij

A

ik^

Bkj

;^

i,j = 1 .. N

for (int i=0; i<n; i++)

for (int j=0; j<n; j++)

for (int k=0; k<n; k++)

C[i][j]=+A[i][k]B[k][j];*

  • Objetivos de Volker Strassen:
    • Reducir el número de multiplicaciones

aumentando el número de sumas/restasy el número de variables auxiliares

  • Algoritmo clásico: Θ(n
  • Algoritmo Strassen: Θ(n

log

(^72) )= Θ(n

2,

N-1K=

  1. Divide y vencerás

53

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Tenemos dos matrices:

x^

  • Algoritmo clásico:

a^ – c11 = a11 · b11 + a12 · b21– c12 = a11 · b12 + a12 · b22– c21 = a21 · b11 + a22 · b21– c22 = a21 · b12 + a22 · b22– 8 multiplicaciones– 4 sumas

b^

c

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Tenemos dos matrices:

x^

  • Algoritmo Strassen:

a^ – m1 = (a21 + a22 - a11)·(b22 - b12 + b11)– m2 = a11 · b11– m3 = a12 · b21– m4 = (a11 - a21) · (b22 - b12)– m5 = (a21 + a22) · (b12 - b11)– m6 = (a12 - a21 + a11 - a22 ) · b22– m7 = a22 · (b11 + b22 - b12 - b21)

b^

c

  1. Divide y vencerás

55

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Tenemos dos matrices:

x^

  • Algoritmo Strassen:

a^ – c11 = m2 + m3– c12 = m1 + m2 + m5 + m6– c21 = m1 + m2 + m4 – m7– c22 = m1 + m2 + m4 + m5– 7 multiplicaciones– 24 sumas (reducible)

b^

c

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Caso 2

n^ x 2

n: x

  • Algoritmo Strassen:

multiplicaciones de matrices

nxn

sumas (reducible) de matrices

nxn

  • Casos donde n no es potencia de 2 :
    • Ampliamos filas y columnas con ceros

hasta que n sea potencia de 2

  • Se opera con normalidad
    1. Divide y vencerás

57

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de matrices (Strassen) • Sólo si

n>

se notan mejorías

  • Es

más costoso

de implementar y mantener

  • No es paralelizable

fácilmente mientras que

el algoritmo clásico sí

  • El algoritmo clásico precisa espacio adicional

constante, mientras que Strassen necesitaun

espacio mucho mayor

  • Valor teórico

más que práctico

  • Hay actualmente

algoritmos mejores:

Strassen: Θ(n

log

(^72) )= Θ(n

2,

Coppersmith y Winograd: Θ(n

2,

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de enteros

  1. Divide y vencerás

63

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Multiplicación de enteros Con esta versión, O(n

1,

) < O(n

Diferencia menor que entre n

2 y n·log n

El algoritmo sólo es interesante para números

muy grandes La mejor implementación:- no usará base 10 sino la mayor base que

pueda multiplicarse por hardware

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y Vencerás multidimensional

  1. Divide y vencerás

65

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Generalización de la técnica Trabajamos en un

entorno m-dimensional

(hasta ahora era unidimensional) Al resolver

un problema de tamaño n

•^

Dos

problemas de

tamaño n/

en entorno

m-dimensional

-^

Un

problema de

tamaño n

en entorno

(m-

1)-dimensional

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Problema geométrico:•^

Conjunto S de puntos

-^

P=(p

,p 1

) domina a Q=(q 2

,q 1

) si 2

p^1

q

1

y p

q 2

2

•^

Rango de p=Nº de puntos dominados

Hallar rango de

cada punto:¿idea intuitivapara resolver?

p

q

  1. Divide y vencerás

67

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Resolvemos...:•^

Calculamos el rango para cada puntocomparándolo con los puntos restantes Punto[]

puntos=new

Punto[...];

...public

void

calculaRangos()

{

for

(int

i=0;

i<this.puntos.length;

i++)

for

(int

j=0;

j<this.puntos.length;

j++)

if^

(puntos[i].domina(puntos[j]))

puntos[i].incRango();

} Orden de complejidad: O(n

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Resolvemos con DYV:•^

Línea vertical L que

divide

S en dos, A y B:

La línea es la mediana del conjunto de las abscisas(primera coordenada) de los puntos de S

-^

Resolvemos recursivamente los dos subconjuntos

-^

Combinamos

los resultados

obtenidos:–^

Ningún punto de A dominaa ninguno de B

-^

Un punto P de B dominará auno Q de A si p

q 2

2

p

q A^

B L

  1. Divide y vencerás

69

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Resolvemos con DYV:•^

Cuando consideremos de nuevo S–^

El rango de los puntos de A será igual

-^

Añadir a puntos de B el nºde puntos de A que domina

-^

Para ello: •^

Proyectamos en L lospuntos

-^

Recorremos L: –^

Vamos sumando puntos de A

-^

Cuando encontremos punto de B,le sumamos a su rango el númerode puntos de A encontrados

p

q A^

B A A B B^ A B L

  1. Divide y vencerás

http://www.dlsi1.etsii.urjc.es

Diseño y Análisis de Algoritmos

Divide y vencerás multidimensional Hemos resuelto con DYV:•^

Hemos resuelto dos problemas de tamañon/2 en espacio m-dimensional

-^

Hemos resuelto un únicoproblema de tamaño n enun espacio (m-1)-dimensional

-^

Orden de complejidad:O(n log

n) 2

p

q A^

B L