Diseño y análisis de algoritmos

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Programación de Computadores
Sesión 13 Tipos de datos Estruturados Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Programación de Computadores
Programación de Computadores
FIUBAODD - Curso Servetto1 Resolución de Consultas Consultas en el Modelo Booleano Consultas en el Modelo Vectorial Consultas Especiales.
SENTENCIAS SECUENCIALES
Estructura selectiva anidada
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
Fundamentos de Programación
Diseño y análisis de algoritmos
Paricial IV Ing. Esmeralda Elizabeth Rodríguez Rodríguez
Estructura General de Un Programa Programación Estructurada
Seminario de Actualización - Excel Avanzado y Macros
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
Curso de Programación 1 Plan 97
Bloque 2: Divide y Vencerás
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 1: Consideraciones acerca de la eficiencia.
Unidad 4: Análisis de algoritmos (parte II)
IBD Plan 2003 Clase 4. UNLP - Facultad de InformáticaIBD - CLASE 4 2 Archivos - Búsqueda Búsqueda de información (costo) # de comparaciones (operaciones.
Algoritmos de Búsqueda
Cont. Arbol Binario de Búsqueda
Casos de estudio Estudiaremos tres problemas
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
Arboles Binarios de expresiones
Estructuras de Control
Algoritmos de ordenación
Material de apoyo Unidad 8 Estructura de datos
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
1 Concurrencia Procesos y Programas. 2 Establecer Comunicación entre procesos (memoria común)
Introducción al análisis de algoritmos
Algoritmos.
Ordenación y Búsquedas1UVM Ordenación y Búsqueda.
Introducción a la Programación
Estructuras de Datos Arreglos.
Búsqueda. Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y.
Algoritmos de búsqueda
Métodos de búsqueda Unidad 6.
CC3001 Algoritmos y Estructuras de Datos
Programación IMC José Andrés Vázquez Flores. Definición Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un.
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Programación I Arreglos II- Matrices.
Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Figure: Algoritmos Conceptos básicos. Programación: 1.Establecer una secuencia de acciones que: puedan ser ejecutadas por el procesador realicen una.
Diseño y análisis de algoritmos Clasificación II.
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
Control de Flujo.
Programación I Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)
Definir un vector Forma general Variable=[tipo]*tamaño Tipo: es el valor inicial con el cual quedarán llenas todas las posiciones creadas del vector. Tamaño:
Análisis y Diseño de Algoritmos
Tema 8: Tipos de Datos Estructurados I
Estructura de Datos En C++
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
Estructuras de control Resolución de problemas y algoritmos.
Recursividad Un objeto se dice que es recursivo si él mismo forma parte de su definición. Ejemplos de objetos recursivos: Una locomotora es un tren Un.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Programación de Computadores
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Diseño y análisis de algoritmos Análisis de Algoritmos II.
METODOS DE BUSQUEDA EN C++ Oscar Michel Ruiz León

75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
 producto+=el  Resultado de multiplicar. Factor o factores son los números que se multiplican. Esto quiere decir que un factor x factor = producto.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Estructuras de Decisión en Visual Basic 6.0
Resolución de problemas y algoritmos
Transcripción de la presentación:

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

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

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

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.

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

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,

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

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.

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

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

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

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

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