Capítulo 6. ANÁLISIS DE ALGORITMOS

Slides:



Advertisements
Presentaciones similares
Algoritmos y Programas
Advertisements

Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Estructura de Datos Hugo Araya Carrasco Hugo Araya Carrasco.
Introducción a los Algoritmos
¿ Que es la complejidad de un algoritmo ?
Técnico en programación de Software
Ciclo de desarrollo del software
Tema 3 Revisión de diversos métodos robustos aplicados en algunos problemas fotogramétricos.
UNIVERSIDAD LATINA (UNILA) II.- ANALISIS DE ALGORITMOS
Investigación Operativa
Definición Los Algoritmos Genéticos son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. los Algoritmos Genéticos.
Programación de Computadores
Proceso de información en la computadora
Ecuaciones de recurrencia
Análisis de Algoritmos
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación
Análisis de Algoritmos
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Fundamentos de programación
Introducción al análisis de algoritmos
Algoritmos.
TIPOS DE DATOS ABSTRACTOS

Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
ESTRUCTURA DE DATOS ESD-243
Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
Fundamentos de programación Organización de una computadora.
Divide y vencerás 1. Método general.
Análisis de algoritmos
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
4.  Métodos matemáticos.
Universidad Nacional de Colombia Curso Análisis de Datos Cuantitativos.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
CONCEPTOS BÁSICOS FUNDACIÓN UNIVERSITARIA LOS LIBERTADORES Fredys Alberto Simanca Herrera Programación Estructurada Semana Bogotá, D.C
Parte II. Algorítmica. 4. Programación dinámica.
Métodos de Análisis Ingenieril
Parte I. Estructuras de Datos.
Análisis y Diseño de Algoritmos
Una introducción a la computación evolutiva
ALGORITMOS La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió.
Parte I. Estructuras de Datos.
Análisis de Algoritmos
Tema 7: NOTACIONES ASINTÓTICAS
Parte I. Estructuras de Datos.
Introducción: Problemas, programas, estructuras y algoritmos
Programación de Computadores (IWI-131)
Introducción a los programas
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Metodología de la programación
Rendimiento de la CPU y sus factores
DEV- C++ ·include <iostream> Int x x=x+2(x)
ALGORÍTMICA Ingeniería Técnica en Informática de Gestión y de Sistemas curso Teoría: Domingo Giménez Seminario C: José María Rodríguez Prácticas.
Elaboración de algoritmos usando lógica de programación
Diagrama de Flujo Diagrama de flujo sencillo con los pasos a seguir si una lámpara no funciona. El diagrama de flujo o diagrama de actividades es la representación.
Conalep Coacalco Algoritmos Recursivos
Unidad TemáticaI. Conceptos Básicos Horas Prácticas10 Horas Teóricas8 Horas Totales18 Objetivo El alumno determinará las entradas, procesos y salidas.
Introducción a los TADs
Tema 3: Complejidad Estructura de Datos
Ciclo de desarrollo del software
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Números y Fracciones 1.Los números naturales y los enterosLos números naturales y los enteros 2.Números primosNúmeros primos 3.Máximo común divisor y mínimo.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Transcripción de la presentación:

Capítulo 6. ANÁLISIS DE ALGORITMOS ALGORÍTMICA estudia: Diseño de algoritmos: esquemas para resolver problemas. Divide y vencerás, avance rápido, programación dinámica, Backtracking, Branch & Bound Análisis de algoritmos: recursos necesarios para resolver el problema con el algoritmo elegido. Ocupación de memoria, tiempo de ejecución. De manera que se pueda decidir qué algoritmo es mejor para nuestro problema y entrada. Objetivo: Dado un problema concreto encontrar la “mejor” forma de resolverlo.

Introducción: PROGRAMACIÓN Estructura de datos programación modelización Tipo abstracto de datos Modelo matemático Estructura de datos Problema real Algoritmo en lenguaje natural Programa en seudolenguaje Programa ejecutable algorítmica

Algoritmo Conjunto de reglas para resolver un problema. Debe ser: Definible. En seudocódigo, pero pueda dar lugar a un programa. De un conjunto de datos de entrada producir unos datos de salida, en un número finito de pasos (tiempo de ejecución finito). Además debemos diseñar algoritmos eficientes: que el tiempo para acabar sea “razonable”. Determinista si para la misma entrada produce siempre la misma salida. No determinista en caso contrario (redondeos, probabilistas, paralelos, …)

Ejemplos de ALGORITMOS Algoritmo de Euclides Dados dos enteros a y b, a>b obtener el m.c.d. Hacer r:=a mod b Si r=0 devolver b En otro caso 3.1. a:=b 3.2. b:=r 3.3. Volver al paso 1 Algoritmo de al-Khawarizmi Resolver x2+bx=c Tomar la mitad de b Multiplicarlo por sí mismo Sumarle c Tomar la raíz cuadrada Restarle la mitad de b

Análisis de algoritmos Estudio de los recursos que necesita la ejecución de un algoritmo. diseñar algoritmos eficientes: que usan pocos recursos: memoria tiempo otros (memoria secundaria, tiempo de programación, …) Pero también importante que los resultados sean correctos. Dependiendo del campo de trabajo puede ser más importante la corrección o la eficiencia. No confundir con análisis de un problema. Hay otros criterios importantes: facilidad de mantenimiento, portabilidad, reutilización, ...

Análisis de algoritmos Para decidir: qué algoritmo programar qué algoritmo utilizar en resolver un problema para una cierta entrada detectar fallo en programa que no funciona bien

Factores que influyen en la medición de recursos Factores externos al algoritmo: Ordenador, otras tareas usando el procesador, sistema operativo, lenguaje de programación, compilador, opciones de compilación, implementación del algoritmo, ... Tamaño del problema: volumen de los datos de entrada Fórmula del tiempo u ocupación de memoria en función de ese tamaño. Contenido de los datos. Para un mismo tamaño de entrada puede influir la distribución de los datos caso más favorable, tm(n) y mm(n) más desfavorable, tM(n) y mM(n) y promedio, tp(n) y mp(n)

Análisis de algoritmos Se intenta obtener: el tiempo de ejecución para un cierto tamaño de entrada, t:N→R+, t(n) Contando el número de instrucciones que se ejecutan o algún tipo de instrucción la ocupación de memoria para un cierto tamaño de entrada, m:N→R+, m(n) Que es la memoria necesaria para que pueda ejecutarse Como influyen factores externos al algoritmo lo que normalmente se estudia la forma en que crece t(n) y m(n), y se utilizan notaciones asintóticas: , O, , o Con las que se acota la función o se obtiene la forma en que crece

Análisis a priori – a posteriori Identificar cómo programarlo. Ver si merece la pena usar ese algoritmo u otro. Determinar el mejor de dos algoritmos. Determinar el tamaño de problema que se puede resolver. A posteriori: Determinar causa de mal funcionamiento. Decidir qué programa usar en la solución de un problema con un cierto tamaño y forma de la entrada.

Ej: Cálculo del factorial fact(n): si n=1 devolver 1 en otro caso devolver (fact(n-1)*n) tiempo: t(n)=t(n-1)+a=t(n-2)+2*a= ... =t(1)+(n-1)*a memoria: m(n)=m(n-1)+c=m(n-2)+2*c= ... =m(1)+(n-1)*c

Ej: Torres de Hanoi Hanoi(origen,destino,pivote,discos): si discos=1 moveruno(origen,destino) en otro caso Hanoi(origen,pivote,destino,discos-1) Hanoi(pivote,destino,origen,discos-1)

Ej: Torres de Hanoi Número de movimientos: t(1)=1 t(n)=2t(n-1)+1, si n>1 Expandiendo la recurrencia: t(n) = 2 t(n-1) +1 = 2 (2t(n-2)+1) +1 = 22 t(n-2) +1+2 = 22 (2t(n-3)+1) +1+2 = 23 t(n-3)+1+2+22 …. 2n-1 t(1)+1+2+…+ 2n-2 = 2n-1

Tiempo promedio tp(n) = S(n) t() * p() Conteo de instrucciones afectadas por probabilidad: Ej: búsqueda secuencial con centinela i=0 a[n+1]=x repetir i=i+1 hasta a[i]=x tp(n)=2+2*p/n+4*p/n+...+2*n*p/n+(2*n+2)*(1-p)= 2n+4-p(n+1)

Ej: Algoritmo de Euclides Calcular m.c.d(m,n), con m>n repetir r = resto(m/n) m = n n = r hasta r =0 mcd = m t(m,n) = a , si m múltiplo de n t(m,n) = b+t(n,resto(m/n)) , si m no es múltiplo de n

Comparación de algoritmos 1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n-1 1.5 si xi>xi+1 1.6 cambiar 1.7 fin=false 2.1 para i=1,2,…,n-1 2.2 para j=i+1,…,n 2.3 si xi>xj 2.4 cambiar

1. 1. fin=false 1. 2. mientras no fin 1. 3. fin=true 1. 4 1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n-1 1.5 si xi>xi+1 1.6 cambiar 1.7 fin=false Caso más favorable: Entrada 1,2,3,4: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 1.4 (i=3) , 1.5 1.4 (sale) 1.2 (sale) Total 11 instrucciones Entrada 1,2,…,n: 1.1 , 1.2, 1.3 , 1.4 (i=1) , 1.5 1.4 (i=2) , 1.5 … 1.4 (i=n-1) , 1.5 1.4 (sale) 1.2 (sale) Total 2n+3 instrucciones

2. 1. para i=1,2,…,n-1 2. 2. para j=i+1,…,n 2. 3. si xi>xj 2. 4 2.1 para i=1,2,…,n-1 2.2 para j=i+1,…,n 2.3 si xi>xj 2.4 cambiar Caso más favorable: Entrada 1,2,…,n: 2.1 (i=1), 2.2 (j=2), 2.3 … 2.2 (j=n), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.1 (i=n-1), 2.2 (j=n), 2.3 2.1 (sale) Total n2+n-1 instrucciones Entrada 1,2,3,4: 2.1 (i=1), 2.2 (j=2), 2.3 2.2 (j=3), 2.3 2.2 (j=4), 2.3 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 2.1 (i=3), 2.2 (j=4), 2.3 2.1 (sale) Total 19 instrucciones

1. 1. fin=false 1. 2. mientras no fin 1. 3. fin=true 1. 4 1.1 fin=false 1.2 mientras no fin 1.3 fin=true 1.4 para i=1,2,…n-1 1.5 si xi>xi+1 1.6 cambiar 1.7 fin=false Caso más desfavorable: Entrada 4,3,2,1: 1.1 , 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (3421) , 1.7 1.4 (i=2) , 1.5 , 1.6 (3241) , 1.7 1.4 (i=3) , 1.5 , 1.6 (3214) , 1.7 1.4 (sale) 1.2 , 1.3 , 1.4 (i=1) , 1.5 , 1.6 (2314) , 1.7 1.4 (i=2) , 1.5 , 1.6 (2134) , 1.7 1.4 (i=3) , 1.5 1.4 (sale) … ¿instrucciones?

2. 1. para i=1,2,…,n-1 2. 2. para j=i+1,…,n 2. 3. si xi>xj 2. 4 2.1 para i=1,2,…,n-1 2.2 para j=i+1,…,n 2.3 si xi>xj 2.4 cambiar Caso más desfavorable: Entrada 4,3,2,1: 2.1 (i=1), 2.2 (j=2), 2.3 , 2.4 (3421) 2.2 (j=3), 2.3 , 2.4 (2431) 2.2 (j=4), 2.3 , 2.4 (1432) 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3 , 2.4 (1342) 2.2 (j=4), 2.3 , 2.4 (1243) 2.1 (i=3), 2.2 (j=4), 2.3 , 2.4 (1234) 2.1 (sale) ¿instrucciones?

Estudio experimental Realizarlo y comparar con el teórico para detectar posibles errores y mejoras. Experimentos para distintos tamaños de problema. Experimentos para caso más favorable y desfavorable. Para tiempo promedio generando entradas aleatorias (rand). Experimentos con partes distintas del programa. Realizar experimentos repetidos. Comparar las gráficas con las teóricas (ajustes por mínimos cuadrados), teniendo en cuenta variaciones por uso de la memoria. Si la comparación con el estudio teórico no es satisfactoria revisar el algoritmo o los experimentos.