La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos"— Transcripción de la presentación:

1 Diseño y análisis de algoritmos
Técnica de diseño “Dividir y Conquistar”

2 Temario Técnica de diseño “Dividir y Conquistar” Aplicaciones
Búsqueda binaria Multiplicación de matrices Par de puntos más cercanos

3 Técnica de diseño “dividir y conquistar”
Búsqueda binaria Problema: Dado un arreglo de enteros a[1..n], ordenado en forma creciente, y un entero x, se quiere encontrar un índice i tal que a[i]=x o –1, si no se encuentra. Este algoritmo se puede ver como un caso especial de DyC donde el tamaño de la subinstancia es 1. En estos casos la técnica se denomina simplificación. Si los datos no están ordenados, nada se sabe de ellos, por lo que se requiere una búsqueda secuencial: Function Bsecuencial(x:item):index; FOR i:=1TO n DO IF a[i]=x then RETURN i; END FOR IF i=n then REURN –1. En el mejor caso la búsqueda secuencial se comporta En el peor caso

4 Técnica de diseño “dividir y conquistar”
Búsqueda binaria Problema: Si se sabe que los datos están ordenados, entonces se puede aplicar DyC determinando En cual mitad del arreglo, debería estar x , y buscar recursivamente en esa mitad. Function BBinaria(L,R:index;x:item):index; Var k:index; IF L>=R then IF a[R]=x then RETURN i ELSE RETURN -1 ELSE BEGIN k:=(L+R) DIV 2 IF x<=a[k] then return BBinaria(L,k) return BBinaria(k+1,R) END Análisis, cáda vez la cantidad de datos, arevisar se reduce a la mitad por lo que la recurrencia: Resolviendo se tiene para el peor caso. También para el mejor caso, se Podría mejorar algo para el mejor caso ??. Se puede hacer una versión iterativa.

5 Técnica de diseño “dividir y conquistar”
Multiplicación de Matrices, algoritmo de Strassen Problema: Sean A y B dos matrices de n x n, se quiere calcular su producto C tal que El algoritmo básico tiene un tiempo do orden ya que cada uno de los elementos de la matriz resultado se calcula en un tiempo La idea del algoritmo de Strassen es dividir las matrices en cuatro submatrices, y y resolver el producto original en base a operaciones sobre estas partes. A11 A12 B11 B12 C11 C12 x = A21 A22 B21 B22 C21 C22

6 Técnica de diseño “dividir y conquistar”
Multiplicación de Matrices, algoritmo de Strassen Se han reducido el número de multiplicaciones de matrices a costa de aumentar sumas, restas e introducir variables auxiliares, en forma análoga al problema de multiplicación de números grandes. Se llega a: Donde,

7 Técnica de diseño “dividir y conquistar”
Multiplicación de Matrices, algoritmo de Strassen Aplicando la misma técnica de DyC usada para la multiplicación de números grandes, se pueden identificar siete multiplicaciones (7 llamadas recursivas) y 15 sumas y restas de matrices de n x n ,las cuales tienen un tiempo y suponiendo que n es potencia de 2 se obtiene la siguiente recurrencia: La solución es Dado que el algoritmo DyC es asintóticamente mejor que el algoritmo básico. Para matrices cuyos n no son potencia de 2, es necesario completarlas con 0’s hasta llegar a potencia de 2 Según estudios empíricos, para que se noten mejoras con respecto al algoritmo clásico, n debe ser superior a 100, y la matriz densa. Se conocen algoritmos técnicamente mejores,(la cota superior está en La estrategia es dividir la matriz en bxb partes y se busca una forma de calcular el producto con k componentes generados a partir de operaciones escalares en las partes tal que

8 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos Sea un conjunto de n puntos en el plano (se supondrá que están en el primer cuadrante, sino hay que transformar las coordenadas). Problema: Se requiere encontrar el para de puntos más cercanos junto con la distancia mínma. El algoritmo básico para resolver este problema, tiene que testear exahustivamente todo par de puntos , es decir una combinación de Por lo que su tiempo de ejecución esta en La idea es aplicar DyC particionando el espacio de puntos, por medio de una recta m en dos partes iguales, según el eje x. Se encuentran así y distancias mínimas en cada parte.

9 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos y Pero la solución al problema original no se encuentra tan fácil, a partir de estos valores. El par de puntos puede estar repartido entre los dos espacios, por lo que ni ni necesariamente son la solución. Se debe crear una franja de ancho 2d alrededor de la recta m siendo: Luego se busca si existe una distancia menor que d en esa zona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x m franja

10 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos y Si existe en franja una distancia entonces ésa es la solución En caso contrario la solución para la partición actual es d . Para que el algoritmo DyC sea más eficiente que el algoritmo básico debe tenerse quidado que la sobrecarga producto de la partición y la combinación sean de una complejidad menor a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x m franja

11 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos Suponiendo una estructura de datos P: array [1..n] of coordenadas, se proponen un Function PuntosMasCercanos(P):real; If n es suficientemente pequeño then return algoritmoBasico(P) Else m := punto medio coordenadas x de puntos de P Crear :=Puntos MasCercanos( ) Crear franja con ancho 2d alrededor de m := algoritmo especial(Franja) return End if end

12 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos Implementación: La creación de las subinstancias, es decir de las particiones en forma eficiente implica tener ordenado el conjunto de puntos por la coordenada x. Es posible ordenar el arreglo P una sola vez al comienzo de la ejecución. Usando un algoritmo de ordenminento eficiente se puede estimar una sobrecarga adicional de por única vez. Para la creación de Franja y la búsqueda (algoritmo especial) eficiente en ese arreglo se debe considerar: Ordenar el arreglo P por coordenada y Partirlo de acuerdo a si cada punto pertenece o no a la franja Por cada punto, considerar sólo la distancia a 7 siguientes.(Se cubrirán todos los puntos en la franja) Asumiendo la sobrecarga de un orden se tiene la recurrencia para n pequeño otro caso

13 Técnica de diseño “dividir y conquistar”
Par de puntos más cercanos Esta rrecurrencia no se puede resolver con el teorema maestro, pero da que es mejor que la solución simple, especialmente cuando el número de puntos crece. Se puede mejorar el tiempo a costa de incorporar como entrada al algoritmo un arreglo ordenado por coordenadas y , además del arreglo P ordenado por coordenadas x. Se elimina el ordenamiento en cada llamada recursiva, realizándose una única vez al comienzo del algoritmo , por lo que el proceso de creación de franja se puede hacer entonces en tiempo lineal. Si se usa esta solución, entonces, en la fase de partición, también se deben dividir los arreglos ordenados por y en cada llamada recursiva; pero esto también puede hacerce en tiempo lineal a partir del arreglo completo ordenado por y. La recurrencia queda entonces para n pequeño otro caso Por lo que


Descargar ppt "Diseño y análisis de algoritmos"

Presentaciones similares


Anuncios Google