Estructuras de Datos y Algoritmos

Documentos relacionados
CONTENIDOS: Sucesiones aritméticas y Sucesiones geométricas Ejercicio Reto

La eficiencia de los programas

Tema 3. Análisis de costes

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

Estructuras de Datos y Algoritmos

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Análisis y Diseño de Algoritmos

1. Introducción al análisis de algoritmos

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Complejidad computacional (Análisis de Algoritmos)

Introducción al Análisis del Coste de Algoritmos

Análisis de Algoritmos

Complejidad de los Algoritmos

EI MT1008 Programación II

IN34A - Optimización

Grafos. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Grafos 1 / 30

Introducción a la Programación

Análisis y Diseño de Algoritmos

1. Método general. 2. Análisis de tiempos de ejecución. 3. Ejemplos de aplicación Problema de las 8 reinas Problema de la mochila 0/1.

PROGRESIONES ARITMÉTICAS Y GEOMÉTRICAS

EL ORIGEN DEL AJEDREZ

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

Estratégias generales de análisis y diseño de algorítmos

Tema 7: Problemas clásicos de Programación Lineal

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Introducción al análisis numérico

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45

Subspacios Vectoriales

Grafos. Suponiendo que e = [u, v]. Entonces los nodos u y v se llaman extremos de e y u y v se dice que son nodos adyacentes o vecinos.

El procesador vectorial consta de:

Técnicas para el Diseño de Algoritmos

Algoritmo de Fleury. por. Ramón Espinosa Armenta

INTRODUCCIÓN Y MEDIDAS DE RENDIMIENTO MEDIDAS DE RENDIMIENTO

Análisis de Algoritmos Problemas de grafos

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

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

Lógica de programación

Estructuras de Datos y Algoritmos

Tema 3: Técnicas básicas de búsqueda para la resolución de problemas

Acción que el procesador puede ejecutar sin necesidad de información suplementaria

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

MATRICES. Jaime Garrido Oliver

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

1. Ecología. 2. Flujo de energía y materia en los. ecosistemas. 3. Biomas. 4. Recursos naturales Cadena alimentaria. 2.2.

Backtracking: Esquema General

Estructuras de Datos y Algoritmos

Introducción al análisis de algoritmos

Complejidad amortizada

Estructuras de datos Listas y árboles

Universidad Autónoma del Estado de México Facultad de Medicina

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

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

Ordenamiento (Sorting)

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

El número asintótico de cuadrados mágicos de primos

Tema 2 Introducción a la Programación en C.

Métodos de Ordenamiento. Unidad VI: Estructura de datos

Contenido. 2 Operatoria con matrices. 3 Determinantes. 4 Matrices elementales. 1 Definición y tipos de matrices

1º BACHILLER CIENCIAS

Tema 9. Recursividad

APLICACIONES INFORMÁTICAS EN QUÍMICA. Problemas Tema 3.2: Manipulador Algebraico-2 Listas, matrices, vectores. Grado en Química

RESUMEN DE ALGORITMOS PROBABILÍSTICOS

1. GRAFOS : CONCEPTOS BASICOS

4ta. Práctica. Búsqueda en árbol con contrincante: MiniMax con poda Alfa-Beta. Inteligencia Artificial Prácticas 2004/2005

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

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

Algoritmos para determinar Caminos Mínimos en Grafos

Simulación I. Investigación Operativa, Grado en Estadística y Empresa, 2011/12

Tema 6. Gestión de Interbloqueo

CURIOSIDADES MATEMÁTICAS

PROGRESIONES GEOMÉTRICAS

Algoritmos de Ordenación

Ajedrez, Granos de Arroz y Potencias de 2

FRACCION GENERATRIZ. Pasar de decimal exacto a fracción

Observación En algunas fuentes, estas coloraciones se denominan coloraciones admisibles; aquí, por comodidad, las denominamos coloraciones.

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Programación Dinámica

6.14 Descomposición ortogonal y proyección ortogonal

Grafos. Amalia Duch Brown Octubre de 2007

ESTRUCTURAS DE DATOS II

Introducción a las Ciencias de la Computación

PLANIFICACIÓN DE LA SESIÓN DE APRENDIZAJE. Reconocemos la potenciación

Algoritmos y Estructuras de Datos III Primer cuatrimestre 2013

Análisis de la Complejidad de Algoritmos

1. Teoría de conjuntos

Práctica 2 - Ejercicio 2.8

TEMA IV TEORÍA DE GRAFOS

Complejidad de Algoritmos

Transcripción:

Estructuras de Datos y Algoritmos Tema 2. Análisis de la eficiencia Prof. Dr. P. Javier Herrera

Contenido Introducción a la eficiencia computacional Cálculo básico de complejidades 2

Una leyenda ajedrecística Mucho tiempo atrás, el espabilado visir Sissa ben Dahir inventó el juego del ajedrez para el rey Shirham de la India. El rey ofreció a Sissa la posibilidad de elegir su propia recompensa. Sissa le dijo al rey que podía recompensarle en trigo con una cantidad equivalente a la cosecha de trigo en su reino de dos años, o bien con una cantidad de trigo que se calcularía de la siguiente forma: un grano de trigo en la primera casilla de un tablero de ajedrez, mas dos granos de trigo en la segunda casilla, mas cuatro granos de trigo en la tercera casilla, y así sucesivamente, duplicando el número de granos en cada casilla, hasta llegar a la última casilla. El rey pensó que la primera posibilidad era demasiado cara mientras que la segunda, medida además en simples granos de trigo, daba la impresión de serle claramente favorable. Así que sin pensárselo dos veces pidió que trajeran un saco de trigo para hacer la cuenta sobre el tablero de ajedrez y recompensar inmediatamente al visir. 3

Es una buena elección? El número de granos en la primera fila resultó ser: 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 255 La cantidad de granos en las dos primeras filas es: 15 i0 2 i 2 16 1 65 535 Al llegar a la tercera fila el rey empezó a pensar que su elección no había sido acertada, pues para llenar las tres filas necesitaba 23 i0 2 i 2 24 1 16 777 216 granos, que pesan alrededor de 600 kilos 4

Endeudado hasta las cejas En efecto, para rellenar las 64 casillas del tablero hacen falta 63 i0 i 64 2 2 1 18 446 744 073 709 551615 1,84*10 granos, cantidad equivalente a las cosechas mundiales actuales de 1000 años. 19 La función 2 n 1 (exponencial) representa el número de granos adeudados en función del número n de casillas a rellenar. Toma valores desmesurados aunque el número de casillas sea pequeño. El coste en tiempo de algunos algoritmos expresado en función del tamaño de los datos de entrada es también exponencial. Por ello es importante estudiar el coste de los algoritmos y ser capaces de comparar los costes de algoritmos que resuelven un mismo problema. 5

Motivación Entendemos por eficiencia el rendimiento de una actividad en relación con el consumo de un cierto recurso. Es diferente de la efectividad. Ejemplo para ver la importancia de que el coste del algoritmo sea pequeño: n log 10 n n n log 10 n n 2 n 3 2 n 10 1 ms 10 ms 10 ms 0,1 s 1 s 1,02 s 10 2 2 ms 0,1 s 0,2 s 10 s 16,67 m 4,02 10 20 sig 10 3 3 ms 1 s 3 s 16,67 m 11,57 d 3,4 10 291 sig 10 4 4 ms 10 s 40 s 1,16 d 31,71 a 6,3 10 3000 sig 10 5 5 ms 1,67 m 8,33 m 115,74 d 317,1 sig 3,16 10 30093 sig 10 6 6 ms 16,67 m 1,67 h 31,71 a 317 097,9 sig 3,1 10 301020 sig Es un error pensar que basta esperar algunos años para que algoritmos tan costosos se puedan ejecutar con un coste en tiempo razonable. 6

Qué medimos y cómo? La eficiencia es mayor cuanto menor es la complejidad o el coste (consumo de recursos). Necesitamos determinar cómo se ha de medir el coste de un algoritmo, de forma que sea posible compararlo con otros que resuelven el mismo problema y decidir cuál de todos es el más eficiente. Una posibilidad para medir el coste de un algoritmo es contar cuántas instrucciones de cada tipo se ejecutan, multiplicar este número por el tiempo que emplea la instrucción en ejecutarse, y realizar la suma para los diferentes tipos. t a t c t i t v = tiempo de asignación = tiempo de comparación = tiempo de incremento = tiempo de acceso a un vector 7

Ejemplo Ordenación por selección del vector V[1..n] para i := 1 hasta n 1 hacer pmin := i ; para j = i + 1 hasta n hacer si V[j] < V[pmin] entonces pmin := j fsi fpara ; intercambiar(v[i],v[pmin]) fpara Control del primer bucle: t a + (n 1)t i + nt c Primera asignación: (n 1)t a Control del bucle interno, para cada i: t a + (n i)t i + (n i + 1)t c instrucción si, para cada i, tiempo mínimo: (n i)(2t v + t c ) tiempo máximo: (n i)(2t v + t c ) + (n i)t a Intercambiar: (n 1)(2t v + 3t a ) 8

Ejemplo El bucle interno en total en el caso peor, el más desfavorable, n 1 i1 t a t c n it 2t 2t t i c v a Concluimos que T mín = An 2 Bn + C T máx = A n 2 B n + C 9

Factores El tiempo de ejecución de un algoritmo depende en general de tres factores: 1. El tamaño de los datos de entrada. Por ejemplo: Para un vector: su longitud. Para un número natural: su valor o el número de dígitos. Para un grafo: el número de vértices y/o el número de aristas. 2. El contenido de esos datos. 3. El código generado por el compilador y el ordenador concreto utilizados. 10

Factores Si el tiempo que tarda un algoritmo A en procesar una entrada concreta x lo denotamos por x, definimos la complejidad de A en el caso peor como t A T A n máx t A x x de tamaño n Otra posibilidad es realizar un análisis de la eficiencia en el caso promedio. Para ello necesitamos conocer el tiempo de ejecución de cada posible ejemplar y la frecuencia con que se presenta, es decir, su distribución de probabilidades. Definimos la complejidad de un algoritmo A en el caso promedio como TM A n pxt x x de tamaño n A siendo px 0..1 la probabilidad de que la entrada sea x 11

Medidas asintóticas El único factor del que van a depender las funciones que representan el coste de un algoritmo es el tamaño de los datos de entrada. Por eso, trabajamos con funciones. No nos importa tanto las funciones concretas, sino la forma en la que crecen. Definición: El conjunto de las funciones del orden de f (n), denotado O(f (n)), se define como Asimismo, diremos que una función g es del orden de f (n) cuando g O(f (n)). Decimos que el conjunto O(f (n)) define un orden de complejidad. Si el tiempo de un algoritmo está descrito por una función T(n) O(f (n)) diremos que el tiempo de ejecución del algoritmo es del orden de f (n). 12

Propiedades 13

Teorema del límite 14

Ejemplos 15

Jerarquía de órdenes de complejidad 16

Órdenes de complejidad 17

Órdenes de complejidad 18

Órdenes de complejidad 19

Cotas inferiores 20

Teorema del límite 21

Orden exacto 22

Teorema del límite 23

Análisis de algoritmos 24

Ejemplos 25

Ejemplos 26

Ejemplos 27

Instrucción crítica 28

Ejemplo 29

Limitaciones prácticas 30

Formulas útiles para el análisis de algoritmos 31

Formulas útiles para el análisis de algoritmos 32

Ejercicio propuesto Calcular el coste (en el caso caso peor) de los algoritmos que aparecen en las páginas 8, 25, 26, 27. Realizarlo de la forma explicada en la página 7, y de la forma simplificada explicada en la página 24. 33

Bibliografía Peña, R.; Diseño de programas. Formalismo y abstracción. Tercera edición. Prentice Hall, 2005. Capítulo 1 Martí, N., Palomino, M., Verdejo, J. A. Introducción a la computación. Colección Base Universitaria, Anaya, 2006. Capítulo 4 Martí, N., Segura, C. M., Verdejo, J. A. Especificación, derivación y análisis de algoritmos. Colección Prentice Practica, Pearson, Prentice Hall, 2006. Capítulo 3 (Estas transparencias se han realizado a partir de aquéllas desarrolladas por los profesores Alberto Verdejo y Rafael del Vado de la UCM, y basadas en la bibliografía anterior) 34