1/16. Coste de Algoritmos. 8 de abril de 2018

Documentos relacionados
Introducción al Análisis del Coste de Algoritmos

Análisis y Diseño de Algoritmos

1. Introducción al análisis de algoritmos

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos

Conceptos Fundamentales del Análisis de Algoritmos II

1. 1. Introducción al concepto de algoritmia

Análisis de Algoritmos

Análisis de algoritmos

La eficiencia de los programas

Análisis matemático de algoritmos no recursivos

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

Programación 2. Lección 8. Caracterización asintótica de la eficiencia de un algoritmo

Algoritmos y Complejidad

Técnicas y Herramientas. Algoritmos y Complejidad. Técnicas de Demostración. Técnicas y Herramientas. Herramientas Matemáticas Básicas

Análisis de la Complejidad de Algoritmos

Tema 3. Análisis de costes

Introducción y Comportamiento Asintótico

Análisis de Algoritmos

Análisis de Algoritmos

Programación Análisis de Algoritmos: Tiempo de Ejecución (Introducción)

Programación. Curso 2005/2006. Tema 3: Complejidad computacional

Análisis de Algoritmos

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

Notación Asintótica 2

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

Notación Asintótica. Programación Avanzada

Análisis de algoritmos

Estructuras de Datos y Algoritmos

Tema 5- Diseño Recursivo y Eficiente. Tema 5- Diseño Recursivo y. Descomposición recursiva ascendente de un vector. Etapas del diseño recursivo

Análisis de algoritmos.

Programación II. Mario Aldea Rivas Programación II 04/04/11 1. Mario Aldea Rivas Programación II 04/04/11 2

Diseño y Análisis de Algoritmos

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

Fundamentos de Programación Entera. A. Revisión. Carlos Testuri Germán Ferrari

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

CI2612: Algoritmos y Estructuras de Datos II. Nociones básicas. Objetivos. Algoritmos. Blai Bonet

Demostrando cotas inferiores: Arboles de decisión

Complejidad computacional y asintótica

Algoritmos y problemas

Algoritmos: Análisis de algoritmos

Análisis de Algoritmos Primer Problemario Prof. Miguel A. Pizaña 22 de Mayo de 2007

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (ii)

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

Tema 2 Fundamentos de Complejidad Algorítmica

COMPLEJIDAD Y EFICIENCIA DE ALGORITMOS

1. Algoritmo, programa y pseudocódigo. Introducción al estudio de algoritmos. Ejemplos

dit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas

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

Análisis asintótico de algoritmos

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Capítulo 1 LA COMPLEJIDAD DE LOS ALGORITMOS

Introducción a la Programación

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

Análisis Amortizado. Diseño y Análisis de Algoritmos Cátedra de Programación Carrera de Ingeniería de Sistemas Prof. Isabel Besembel Carrera

Algoritmos y Complejidad

cc3001 Métodos Matemáticos

Introducción al análisis de algoritmos

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

Análisis de Algoritmos

Esquema de Dividir y Vencer

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (i)

ELO320 Estructuras de Datos y Algoritmos. Complejidad. Tomás Arredondo Vidal

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

Temas. Objetivo 12:00

1. Planteamiento general

Decrementa y vencerás II

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

Carlos Delgado Kloos Ingeniería Telemática Univ. Carlos III de Madrid. Java: Complejidad / 1

CI2612: Algoritmos y Estructuras de Datos II. Cálculo de estadísticos de orden (selección) Objetivos. Introducción. Blai Bonet

Introducción rápida a la programación (estructurada ) con C++

Estructuras de Datos. Andrea Rueda. Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas

Programación 1 Tema 5. Instrucciones simples y estructuradas

Lenguaje de Programación: C++ Repaso de Material C++

Temario. Tipos de recursión. Eficiencia y recursión

Introducción a la Programación

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

3.1. Algoritmos. que él ejecuta las instrucciones.

Algoritmos y Complejidad

Aritmética en Haskell

Complejidad de algoritmos recursivos

Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos

Estructuras de Datos. Clase 3 Análisis de algoritmos recursivos

La transformada rápida de Fourier (FFT) y otros algoritmos para la implementación de la DFT

Fundamentos de Programación

Tema 9. Recursividad

Departamento de Matemáticas Recomendaciones para prueba extraordinaria 2018

Algorítmica: Análisis de Algoritmos

Apuntes sobre el cálculo de la eficiencia de los algoritmos. Dept. Llenguatges i Sistemes Informàtics

Algoritmos en teoría de números

ANÁLISIS Y DISEÑO DE ALGORITMOS

ANEXO XVII DE LA RESOLUCION N

Introducción al lenguaje C

Complejidad de los Algoritmos

Estructuras de Datos y Algoritmos

CONTENIDOS MÍNIMOS MATEMÁTICAS 2º Y 4º E.S.O.

Programación 1 Tema 5. Instrucciones simples y estructuradas

Parte II: Estructuras de datos y algoritmos

Transcripción:

1/16 Coste de Algoritmos Josefina Sierra Santibáñez 8 de abril de 2018

2/16 Coste de un Algoritmo Analizar un algoritmo significa, en el contexto de este curso, estimar los recursos que requiere. Aunque existen otros recursos, como el espacio de memoria, normalmente nos centraremos en analizar el tiempo de ejecución. Dado que el comportamiento de un algoritmo puede variar mucho para cada posible entrada, necesitamos encontrar una forma de resumir su comportamiento de forma sencilla. En general, el tiempo de ejecución de un algoritmo crece con el tamaño de su entrada. Por este motivo se suele representar el tiempo de ejecución de un algoritmo como una función del tamaño de su entrada.

3/16 Conceptos Básicos El tamaño de la entrada x se calcula de distintas maneras dependiendo del tipo de problema. Puede ser la longitud de un vector, el valor de un número, el número de bits necesarios para representar un número en base 2, o un par de números que reflejan dos dimensiones de los datos de un problema. El tiempo de ejecución T (x) de un algoritmo para una entrada particular x es el número de operaciones primitivas que realiza. Analizaremos el tiempo de ejecución en el caso peor, porque es una cota superior del tiempo de ejecución para cualquier entrada. T worst (n) = max{t (x) x Input x = n} Para calcular el tiempo de ejecución esperado (i.e. en el caso medio) es preciso conocer la probabilidad de que ocurra cada entrada. T average (n) = Pr(x) T (x) {x Input x =n}

4/16 Conceptos Básicos En lugar de calcular la función T worst (n) analizaremos únicamente su orden de crecimiento, es decir, tendremos en cuenta solamente el término más significativo de T worst (n), ignorando términos de menor orden y coeficientes constantes multiplicativos, que son relativamente insignificantes para valores grandes de n. Notación asintótica en este curso utilizaremos las notaciones denominadas O grande, Ω y Θ. La expresión O(g(n)) denota el siguiente conjunto de funciones O(g(n)) = {f (n) : N R + existen c > 0 y n 0 > 0 tales que f (n) c g(n) para todo n n 0 } es decir, el conjunto de las funciones f (n) para las cuales g(n) es una cota asintótica superior.

Conceptos Básicos La expresión Ω(g(n)) denota el siguiente conjunto de funciones Ω(g(n)) = {f (n) : N R + existen c > 0 y n 0 > 0 tales que f (n) c g(n) para todo n n 0 } es decir, el conjunto de las funciones f (n) para las cuales g(n) es una cota asintótica inferior. La expresión Θ(g(n)) denota el siguiente conjunto de funciones Θ(g(n)) = {f (n) : N R + existen c1 > 0, c2 > 0 y n 0 > 0 tales que c1 g(n) f (n) c g(n) para todo n n 0 } es decir, el conjunto de las funciones f (n) para las cuales g(n) es una cota asintótica exacta. 5/16

Notación Asintótica 6/16

7/16 Conceptos Básicos En general, diremos que un algoritmo A 1 es más eficiente que otro algoritmo A 2 si T A 1 worst(n) Θ(g 1 (n)), T A 2 worst(n) Θ(g 2 (n)) y Θ(g 1 (n)) < Θ(g 2 (n)) es decir, si el orden de crecimiento del tiempo de ejecución en el caso peor de A 1 es menor que el orden de crecimiento del tiempo de ejecución en el caso peor de A 2. Por ejemplo, A merge sort es más eficiente que A insertion sort, porque A merge sort Θ(n log n), A insertion sort Θ(n 2 ) y Θ(nlog(n)) < Θ(n 2 ).

8/16 Conceptos Básicos Relaciones entre O, Ω y Θ f 1 Ω(f 2 ) si y sólo si f 2 O(f 1 ) Θ(f ) = O(f ) Ω(f ) Reglas del ĺımite Si ĺım n f 1 f2 = 0, entonces f 1 O(f 2 ). Si ĺım n f 1 f2 =, entonces f 1 Ω(f 2 ). Si ĺım n f 1 f2 = c donde c R es una constante c > 0, entonces f 1 Θ(f 2 ). Dadas dos funciones f 1 y f 2, diremos que Θ(f 1 ) < Θ(f 2 ) si f 1 O(f 2 ) f 2 O(f 1 )

9/16 Conceptos Básicos Sean C 1 y C 2 clases de funciones como O(f ), Ω(f ) o Θ(f ). Definimos C 1 + C 2 = {f + g f C 1 g C 2 } C 1 C 2 = {f g f C 1 g C 2 } Reglas de la suma O(f 1 ) + O(f 2 ) = O(f 1 + f 2 ) = O(max(f 1, f 2 )) O(f 1 ) O(f 2 ) = O(f 1 f 2 ) Θ(f 1 ) + Θ(f 2 ) = Θ(f 1 + f 2 ) = Θ(max(f 1, f 2 )) Θ(f 1 ) Θ(f 2 ) = Θ(f 1 f 2 )

10/16 Conceptos Básicos Propiedades de O grande Reflexividad f O(f ) Transitividad f 1 O(f 2 ) f 2 O(f 3 ) f 1 O(f 3 ) Caracterización f 1 O(f 2 ) si y sólo si O(f 1 ) O(f 2 ) Suma g 1 O(f 1 ) g 2 O(f 2 ) g 1 +g 2 O(f 1 +f 2 ) = O(max(f 1, f 2 ) Producto g 1 O(f 1 ) g 2 O(f 2 ) g 1 g 2 O(f 1 f 2 ) Invarianza multiplicativa O(f ) = O(c f ) para toda constante c (R) +

11/16 Conceptos Básicos Propiedades de Θ Reflexividad f Θ(f ) Transitividad f 1 Θ(f 2 ) f 2 Θ(f 3 ) f 1 Θ(f 3 ) Simetría f 1 Θ(f 2 ) si y sólo si f 2 Θ(f 1 ) si y sólo si Θ(f 1 ) = Θ(f 2 ) Suma g 1 Θ(f 1 ) g 2 Θ(f 2 ) g 1 +g 2 Θ(f 1 +f 2 ) = Θ(max(f 1, f 2 ) Producto g 1 Θ(f 1 ) g 2 Θ(f 2 ) g 1 g 2 Θ(f 1 f 2 ) Invarianza multiplicativa Θ(f ) = Θ(c f ) para toda constante c (R) +

12/16 Ordenes de Crecimiento Frequentes Constante Θ(1): Decidir si un número es par o impar. Logarítmico Θ(log n): Búsqueda binaria. Radical Θ( n): Algoritmo sencillo para comprobar si un número es primo. Lineal Θ(n): Búsqueda secuencial en un vector. Cuasilineal Θ(n log n): Ordenación eficiente de un vector. Cuadrático Θ(n 2 ): Suma de dos matrices cuadradas de tamaño n n. Cúbico Θ(n 3 ): Producto de dos matrices cuadradas de tamaño n n. Polinómico Θ(n k ) para k 1 constante: Enumerar las combinaciones de n elementos tomados de k en k. Exponencial Θ(k n ) para k > 1 constante: búsqueda en un espacio de configuraciones de anchura k y profundidad n. Otros Θ(n!), Θ(n n )

Ordenes de Crecimiento Frecuentes 13/16

14/16 Cálculo del Coste Temporal en Algoritmos No Recursivos El coste de una operación elemental es O(1), por ejemplo asignación entre tipos atómicos (int, bool, double, char) incremento o decremento de una variable de tipo atómico operación aritmética lectura o escritura de tipo atómico comparación en tipos atómicos acceso al elemento i-ésimo de un vector Evaluar una expresión tiene coste igual a la suma de los costes de las operaciones que contiene (incluidas las llamadas a funciones). El coste de una instrucción de tipo return exp; es la suma del coste de la evaluación de la expresión exp más el coste de asignar el resultado. El coste del paso de parámetros por referencia es O(1). El coste de construir o copiar un vector de tamaño n (por ejemplo, declaración, paso por valor, retorno de resultados por valor) es O(n) Coste de construir o copiar cada elemento.

15/16 Cálculo del Coste Temporal en Algoritmos No Recursivos Si el coste de un fragmento de un programa F 1 es C 1 y el de otro fragmento F 2 es C 2, el coste de la composición secuencial es C 1 + C 2 F 1 ; F 2 Si el coste de un fragmento de un programa F 1 es C 1, el de otro fragmento F 2 es C 2, i el de evaluar B es D, entonces el coste de la composición alternativa if (B) F_1 ; else F_2 ; es D + C 1 si se cumple B, y D + C 2 en otro caso. En cualquier caso, el coste es menor o igual que D + max(c 1, C 2 ).

16/16 Cálculo del Coste Temporal en Algoritmos No Recursivos Si el coste de evaluar un fragmento de un programa F durante la k-ésima iteración es C k, el coste de evaluar la expresión booleana B durante la k-ésima iteración es D k, y el número de iteraciones es N, entonces el coste de evaluar de la composición iterativa while (B) { F; } es D N+1 + N k=1 (C k + D k ).