










Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
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
1 / 18
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!











1
http://www.dlsi1.etsii.urjc.es
Antonio Pérez Carrasco
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
4
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
que resuelve un problema grandedescomponiéndolo en problemas máspequeños
iguales
recursiva
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
que deben cumplirse:
subproblemas:^ • del
mismo tipo
que el original
que el original
entre sí
mismo/similar tamaño entre sí
manera directa
posible combinar
posteriormente
las
subsoluciones
obtenidas de manera
eficiente
6
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Pasos de aplicación de la técnica:
dividir
Subproblemas del
mismo tipo
Subproblemas
más pequeños
de cada subproblema
Caso base:
directo
Caso recursivo:
llamadas recursivas
de las subsoluciones obtenidas
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
1º
2º
3º
4º
5º
2.1º
2.2º
2.3º
2.4º
2.5º
8
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
15
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
n
k^
subproblemas
tamaño de los subproblemas
será
n
/ b
siendo
b
una constante
de división y
combinación
17
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
= tiempo requerido para dividir el problema y combinar las subsoluciones
= tiempo requerido para calcular solución del caso base
= tiempo total para el algoritmo
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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)
T(n) =
Θ(n
p) ,
k < b
p
T(n) є
Θ(n
p^ · log n) ,
k = b
p
T(n) =
Θ(n
log
kb
k > b
p
complejidad
19
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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 )
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
21
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Queremos encontrar un número x
-^
El número x puede no estar
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
27
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
tiene con estructuras de acceso complejo,como listas enlazadas
el peor caso que Quicksort en el caso medio
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
} }
29
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
…
…
v1 v
v
v v
…
v
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
subllamada
cada subllamada
subllamadas
k=
b=
p=
Θ(n
1
log n) = Θ(n log n)
31
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Ordenación rápida:1. Selección de un
pivote
el resto de elementos
-^
Los
menores
del pivote, a su
izquierda
-^
Los
mayores
del pivote, a su
derecha
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 )
las mitades, separadas por el pivote
33
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Ejemplo–^
Tomamos como pivote el primerelemento^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley
Capítulo 7, Sección 4, Pág. 262
39
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Ejemplo–^
Se reanuda la búsqueda^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley
Capítulo 7, Sección 4, Pág. 262
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
Ejemplo–^
Los punteros se cruzan^ “Fundamentos de Algoritmia”, G. Brassard, P. Bratley
Capítulo 7, Sección 4, Pág. 262
41
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
43
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
45
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
z
, también ordenado,
tiene longitud 2n
tiene tantos elementos a su izquierda comoa su derecha
la mediana del vector resultante, no realizala mezcla de los vectores z
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
x
y de
y
,^ m
y x m
y
m
= x m
, entoncesy
m
es igual a z
m
y x m
y
x y z
51
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
=ij
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];*
aumentando el número de sumas/restasy el número de variables auxiliares
log
(^72) )= Θ(n
2,
N-1K=
53
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
x^
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
x^
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
55
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
x^
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
n^ x 2
n: x
multiplicaciones de matrices
nxn
sumas (reducible) de matrices
nxn
hasta que n sea potencia de 2
57
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
n>
se notan mejorías
más costoso
de implementar y mantener
fácilmente mientras que
el algoritmo clásico sí
constante, mientras que Strassen necesitaun
espacio mucho mayor
más que práctico
algoritmos mejores:
Strassen: Θ(n
log
(^72) )= Θ(n
2,
Coppersmith y Winograd: Θ(n
2,
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
63
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
65
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
67
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
69
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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
http://www.dlsi1.etsii.urjc.es
Diseño y Análisis de Algoritmos
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