Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Documentos relacionados
Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Multiplicación de matrices simétricas

Estructura de Datos. Complejidad de Algoritmos. Algoritmo. Algoritmo. Mauricio Solar Lorna Figueroa

Análisis y Diseño de Algoritmos

Estructuras de Datos y Algoritmos

La eficiencia de los programas

Análisis de algoritmos. Recursividad

Análisis de Algoritmos

Análisis y Diseño de Algoritmos. Complejidad Computacional

IN34A - Optimización

Notación Asintótica 2

Tema: Programación Dinámica.

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Recursividad... un análisis posterior. Aurelio Sanabria Introducción a la programación

Tema: Programación Dinámica.

Análisis y Diseño de Algoritmos

Introducción y Comportamiento Asintótico

Diseño y Análisis de Algoritmos

Recursividad Definición

Tema 3. Análisis de costes

Un algoritmo es una serie de pasos lógicos y organizados que describe el proceso que se debe seguir, para dar solución a un problema específico.

TEMA 3: Estructuras de Control: Iterativas

Introducción al análisis de algoritmos

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Introducción al Análisis del Coste de Algoritmos

Programación de Ordenadores

Introducción a la Computación

Tema 06: Recursividad

Funciones recursivas

Tema: Programación Dinámica.

Ordenamiento (Sorting)

Complejidad de los Algoritmos

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Programación II Recursividad Dr. Mario Rossainz López

Análisis de algoritmos

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Programación (PRG) PRÁCTICA 10. Algoritmos de búsqueda

Especificación de programas. Algoritmos y Estructuras de Datos I. Correctitud de ciclos

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Complejidad de algoritmos recursivos

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

1. Introducción al análisis de algoritmos

Ingeniería del software I 9 - Diseño detallado

Tema 4.- Recursión e iteración

4 horas. 96 horas. Competencias Especificas: Construye algoritmos analizando su complejidad mediante técnicas y métodos documentados.

UNIVERSIDAD MAYOR DE SAN SIMON FACULTAD DE CIENCIAS Y TECNOLOGÍA PLAN GLOBAL COMPUTACION I

Programación Dinámica

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Tiempo de Ejecución. Midiendo el Tiempo de Ejecución

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Ejercicios sobre recursividad

Tema 7: Recursividad

Unidad de Competencia I Elementos de Competencia Requerimientos de información

Exponencial, lineal y logarítmico

Introducción a la programación

Recursividad. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Aritmética en Haskell

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Matemática y programación

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Tema 2.- Caracterización de la informática La informática como disciplina científica Sub-áreas de la disciplina.

Tema 03: Programación estructurada

PROGRAMA: COMPUTACION I

ALGORITMOS INTRODUCCIÓN ALGORITMOS INTRODUCCIÓN AL ANÁLISIS Y AL DISEÑO DE AL ANÁLISIS Y AL DISEÑO DE UNIVERSIDAD AUTÓNOMA METROPOLITANA

INSTITUTO NACIONAL SUPERIOR DEL PROFESORADO TÉCNICO - TÉCNICO SUPERIOR EN INFORMÁTICA APLICADA - PROGRAMACIÓN I

Variables, expresiones y sentencias

Introducción a la programación: Algoritmos

UAA Sistemas Electrónicos Estructura de Datos Muñoz / Serna

Complejidad de Algoritmos

Carlos A. Rivera-Morales. Precálculo 2

Tema 01: Algoritmia y diagramas de flujo. Estructuras de datos (Prof. Edgardo A. Franco)

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

PRÁCTICA FUNDAMENTOS DE ALGORITMOS (Estructuras de Repetición II) Objetivos

Parte I: El computador y el proceso de programación

Ordenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Demostración. Cota inferior de complejidad tiempo para sorting

LÓGICA COMPUTACIONAL. Descripción del CURSO

Colegio Juan de la Cierva. PROGRAMACIÓN DIDÁCTICA Asignatura: MATEMÁTICAS Curso: 6º Etapa: PRIMARIA Curso académico:

Apuntes de Teórico PROGRAMACIÓN 3

Algoritmos de Ordenación

INTRODUCCION AL DISEÑO EDUCATIVO Andrea Paola Leal Rivero. La Academia al servicio de la Vida

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

Curso: Teoría de la Computación. Unidad 2, Sesión 7: Complejidad computacional

Programación Estructurada. Complementos de Informática Tema 2: Programación Estructurada y Programación Modular. Números Amigos

Estructuras de Control

COMPUTABILIDAD Y COMPLEJIDAD

Algoritmos y Programas

Metodología de Desarrollo de Programas

Instituto José Manuel Estrada - Villa de Soto. Asignatura: Desarrollo de Soluciones Informáticas. Curso: 5to I. Docente: Contreras, María Elena

Introducción a la Computación. Primer Cuatrimestre de 2017

Árboles de Decisión Árboles de Sintaxis

Programación dinámica: un último ejemplo

ESTRUCTURA SECUENCIAL ESTRUCTURA SELECTIVA

DATOS DE IDENTIFICACIÓN DEL CURSO Ciencias Computacionales Estructuras y algoritmos

CONTENIDOS Y CRITERIOS DE EVALUACIÓN MATEMÁTICAS 6º ED.

CAPITULO ALGORITMOS Y PROGRAMAS CONTENIDO

Transcripción:

Introducción Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Algoritmos y Algoritmia Problemas e instancias Primer Cuatrimestre 2014 Algoritmos y Algoritmia Algoritmos y Algoritmia un problema computacional consiste en una caracterización de un conjunto de datos de entrada, junto con una especificación de la salida deseada en base a cada entrada un algoritmo es una secuencia bien determinada de acciones elementales que transforma los datos de entrada en datos de salida con el objetivo de resolver un problema computacional para cada algoritmo es necesario aclarar cuáles son las operaciones elementales y cómo están representados los datos de entrada y de salida en general se representarán los algoritmos por medio de un pseudocódigo informal un programa consiste en la especificación formal de un algoritmo por medio de un lenguaje de programación, de forma que pueda ser ejecutado por una computadora la algoritmia es el estudio sistemático del diseño y análisis de algoritmos. Problemas de la Algoritmia correctitud eficiencia aproximación { finalización resuelve el problema? { cantidad de recursos se puede mejorar? { cálculo numérico se puede aproximar mejor?

Problemas e instancias un problema computacional tiene una o más instancias, valores particulares para los datos de entrada, sobre las cuales se puede ejecutar un algoritmo para resolver el problema ejemplo: el problema computacional MULTIPLICACIÓN DE DOS NÚMEROS ENTEROS tiene por ejemplo las siguientes instancias: multiplicar 345 por 4653, multiplicar 2637 por 10000, multiplicar 32341 por 1, etc. un problema computacional abarca a otro problema computacional si las instancias del segundo pueden ser resueltas como instancias del primero en forma directa. ejemplo: MULTIPLICACIÓN DE UN ENTERO POR 352 es un problema computacional que es abarcado por el problema MULTIPLICACIÓN DE DOS NÚMEROS ENTEROS. es claro que para cada algoritmo la cantidad de recursos (tiempo, memoria) utilizados depende fuertemente de los datos de entrada. En general, la cantidad de recursos crece a medida que crece el tamaño de la entrada el análisis de esta cantidad de recursos no es viable de ser realizado instancia por instancia se introducen las funciones de cantidad de recursos en base al tamaño de la entrada. Este tamaño puede ser la cantidad de dígitos para un número, la cantidad de elementos para un arreglo, la cantidad de caracteres de una cadena, etc. en ocasiones es útil definir el tamaño de la entrada en base a dos o más magnitudes. Por ejemplo, para un grafo es frecuente utilizar la cantidad de nodos y la de arcos dado un algoritmo A, el tiempo de ejecución t A (n) de A es la cantidad de pasos, operaciones o acciones elementales que debe realizar el algoritmo al ser ejecutado en una instancia de el espacio e A (n) de A es la cantidad de datos elementales que el algoritmo necesita al ser ejecutado en una instancia de tamaño n, sin contar la representación de la entrada ni de la salida estas definiciones son ambiguas ( porqué?) ambigüedades de la definición de tiempo de ejecución: No está claramente especificado cuáles son las operaciones o los datos elementales. Este punto quedará determinado en cada análisis en particular, dependiendo del dominio de aplicación Dado que puede haber varias instancias de, no está claro cuál de ellas es la que se tiene en cuenta para determinar la cantidad de recursos necesaria para resolver este último punto se definen distintos tipos de análisis de algoritmos

tipos de análisis de algoritmos: análisis en el peor caso: se considera el máximo entre las cantidades de recursos insumidas por todas las instancias de análisis caso promedio: se considera el promedio de las cantidades de recursos insumidas por todas las instancias de análisis probabilístico: se considera la cantidad de recursos de cada instancia de pesado por su probabilidad de ser ejecutada análisis en el mejor caso: se considera el mínimo entre las cantidades de recursos insumidas por todas las instancias de nos concentraremos en general a analizar el peor caso, debido a que constituye una cota superior al total de los recursos insumidos por el algoritmo. Conocerla nos asegura que no se superará esa cantidad para muchos algoritmos, el peor caso es el que ocurre más seguido debido al uso de la notación asintótica, el caso promedio o probabilístico es muchas veces el mismo que el peor caso no se necesita conocer la distribución de probabilidades para todas las instancias de un mismo tamaño, como sería necesario en el análisis probabilístico en la mayor parte de los casos, es más fácil de analizar matemáticamente MULTIPLICACIÓN DE DOS NÚMEROS ENTEROS Algoritmos: se considerará entonces que un algoritmo es más eficiente que otro para resolver el mismo problema si su tiempo de ejecución (o espacio) en el peor caso tiene un crecimiento menor Clásico 1 2 3 4 3 9 2 4 2 9 4 3 1 9 6 2 1 2 1 0 5 5 4 A la inglesa 1 2 3 4 1 9 6 2 2 9 4 3 3 9 2 4 1 2 1 0 5 5 4 A la rusa 981 1234 1234 490 2468 245 4936 4936 122 9872 61 19744 19744 30 39488 15 78976 78976 7 157952 157952 3 315904 315904 1 631808 631808 1210554

ORDENAR UN ARREGLO ORDENAR UN ARREGLO Algoritmo: Ordenamiento por Inserción FOR j ::= 2 TO n x ::= A[j] i ::= j-1 WHILE i> 0 and A[i]>x A[i+1] ::= A[i] i ::= i-1 ENDWHILE A[i+1] ::= x ENDFOR costo veces c 1 n c 2 n 1 c 3 n 1 c 4 n 1 j=1 t j c 5 n 1 j=1 (t j 1) c 6 n 1 j=1 (t j 1) c 8 n 1 Algoritmo: Ordenamiento por Inserción Costo de la ejecución del algoritmo: n 1 n 1 T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 t j + c 5 (t j 1) + j=1 j=1 n 1 +c 6 (t j 1) + c 8 (n 1) j=1 n 1 n 1 = (c 1 + c 2 + c 3 + c 8 )n (c 2 + c 3 + c 8 ) + (c 4 + c 5 + c 6 ) t j (c 5 + c 6 ) 1 j=1 j=1 demasiado complicado para ser útil. No es posible simplificar veremos más adelante como tratar estas funciones NÚMEROS DE FIBONACCI Algoritmo: naïve, recursivo { i si i = 0 o i = 1 F n = F n 1 + F n 2 si i 2 function FIB1(n) IF n<2 return n ELSE return Fib1(n-1)+Fib1(n-2) Algoritmo: naïve, recursivo definiendo el tiempo de ejecución del algoritmo anterior, se obtiene la siguiente recurrencia { a si n < 2 T FIB1 (n) = T FIB1 (n 1) + T FIB1 (n 2) + b si n 2 asi como está, esta función tampoco es útil para analizar y comparar el algoritmo

Algoritmo: algoritmo iterativo simple function FIB2(n) i::= 1; j ::= 0 FOR k ::= 1 TO n j ::= i+j i ::= j-i ENDFOR return j T FIB2 (n) = b + n k=1 costo (c 1 + c 2 + c 3 ) + d veces b 1 c 1 n k=1 1 c 2 n i=1 1 c 3 n i=1 1 d 1 Algoritmo: algoritmo iterativo complejo function FIB3(n) i ::= 1; j,k ::= 0; h ::= 1; WHILE n>0 IF n es impar t ::= j*h j ::= i*h+j*k+t i ::= i*k+t ENDIF t ::= h^2 h ::= 2*k*h+t k ::= k^2+t n ::= n div 2 ENDWHILE Comparación de los tres algoritmos para NUMERO DE FIBONACCI Algoritmo: algoritmo iterativo complejo no analizaremos la correctitud del algoritmo calculando el tiempo de ejecución se tiene logn T FIB3 (n) = c1 + k=1 logn c2 + k=1 no sólo estamos suponiendo que sumas y restas se computan en tiempo constante (como en FIB2), sino también productos y cuadrados c3 implementando los algoritmos en una máquina determinada, y con las herramientas que se introducirán se puede establecer: T FIB1 (n) ((1 + 5)/2) n 20 segundos T FIB2 (n) 15n microsegundos T FIB3 (n) 1/4logn milisegundos

Comparación de los tres algoritmos para NUMERO DE FIBONACCI n 10 20 30 50 100 10.000 10 6 10 8 Fib1 8 mseg 1 seg 2 min 21 días 10 9 años Fib2 1/6 mseg 1/3 mseg 1/2 mseg 4/4 mseg 1,5 mseg 150 mseg 15 seg 25 min Fib3 1/3 mseg 2/5 mseg 1/2 mseg 1/2 mseg 1/2 mseg 1 mseg 1,5 mseg 2 mseg estos son tiempos absolutos, dependientes de una implementación y del hardware subyacente sin embargo, la relación entre estos tiempos se mantendrá cambiando implementación y/o hardware Se puede concluir a partir de los ejemplos anteriores que: 1. no interesa tanto nivel de detalle como para individualizar el costo de cada sentencia. Además, esto haría el análisis dependiente del lenguaje de programación y de la plataforma de ejecución 2. es importante aceptar el principio de invarianza, que establece que un mismo algoritmo puede ser implementado con diferencia de factores constantes en distintos lenguajes o plataformas 3. no es superfluo buscar la eficiencia, puede significar la diferencia entre obtener las soluciones del problema o no. El avance del hardware no tiene tanto impacto como el avance en los algoritmos 4. se necesitan herramientas matemáticas que ayuden a manejar las fórmulas de los tiempos de ejecución