ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Documentos relacionados
ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

IN34A - Optimización

Capítulo 13 INSTRUCCIONES DE CONTROL REPETITIVAS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

C a l ses P P y y NP C a l se P C a l se N P N P [No N n o -De D te t rmin i i n s i ti t c i Polynomial-tim i e]

Multiplicación de matrices simétricas

5. ESTRUCTURAS DE REPETICIÓN

La eficiencia de los programas

Titulo de hoy 25/09/2017 COLEGIO SAN ANTONIO MARIA CLARET 1

como les va con las practicas?

Principios de Algoritmia

ALUMNA: GRADO: MODALIDAD-10. PROFESOR: Hugo Nelson Ramírez Cárdenas

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Tema 3. Estructuras de Datos

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

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

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

ESTRUCTURA DE ASIGNACIÓN

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

Subrutinas. Subrutinas. Erwin Meza Vega

Distinguir las diferentes estructuras de repetición utilizadas en problemas con bucles: mientras, repetir mientras, para.

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

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

Estructuras de Datos y Algoritmos

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

Estructuras de Datos y Algoritmos

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.

Lógica de programación

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

Programación dinámica: un último ejemplo

Bloque 1. Conceptos y técnicas básicas en programación

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

TEMA 1: Algoritmos y programas

Estructuras de Repetición

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

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

CENTRO UNIVERSITARIO DE CIENCIAS EXACTAS E INGENIERÍAS DIVISIÓN DE ELECTRÓNICA Y COMPUTACIÓN

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Diseño estructurado de algoritmos. Sesión 8: Estructuras Algorítmicas

Ejercicios ejemplo: verificación de algoritmos del valor suma de una sucesión matemática. (CU00238A)

Ejemplo, generación de #s aleatorios

Introducción a la programación

SERVICIO NACIONAL DE APRENDIZAJE SENA SISTEMA INTEGRADO DE GESTIÓN Procedimiento Ejecución de la Formación Profesional Integral GUÍA DE APRENDIZAJE

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

Programación Estructurada

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

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

Análisis de Algoritmos

O bien si queremos calcular el error aproximado porcentual lo hacemos:

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

Tema 9. Recursividad

Guía práctica de estudio 03: Algoritmos

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Complejidad de los Algoritmos

23. Ordenación de vectores (tablas) Diego Gutiérrez

Esquemas repetitivos en Fortran 90

1. Los objetos conocidos, es decir, aquellos objetos de los cuales poseemos información total o parcial útil en la búsqueda de los objetos desconocido

Al igual que las instrucciones alternativas, las instrucciones repetitivas también se pueden anidar, permitiendo las siguientes combinaciones de

Objetivo específico: Maneja los elementos básicos de algoritmos utilizados para resolver un problema por computadora.

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos

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

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

ALGORITMOS Y PROGRAMACIÓN I Unidad 3

M.C. Mariano Larios G. 3 de diciembre de 2009

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

Análisis y Diseño de Algoritmos

LENGUAJE DE PSEUDOCÓDIGO

Diseño Estructurado de Algoritmo

Introducción a la programación: Algoritmos

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

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

Tema: Programación Dinámica.

La resolución de un problema

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Introducción al análisis numérico

Guía práctica de estudio 06: Estructuras de repetición

Introducción a la Programación

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Programación dinámica

Demostrando cotas inferiores: Arboles de decisión

Taller de Resolución de Problemas Computacionales

TEMA 4: ALGORITMOS Y PROGRAMAS

Funcionamiento de las computadoras

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

Guía práctica de estudio 05: Diagramas de flujo

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Introducción a las Ciencias de la Computación

DIAGRAMAS DE FLUJO. Tabla de contenido

JavaScript: Lenguaje de programación

PRUEBA DE SOFTWARE LA PRUEBA DE UN SISTEMA

Tema: Programación Dinámica.

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

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

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

Para llevar a cabo una simulación, se requiere implementar las siguientes etapas:

FACULTAD DE INGENIERIA

TEMA 4: Programación estructurada

Tutorías con Grupos Reducidos (TGR) Parte 1: Evaluación de prestaciones

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

Transcripción:

Análisis y costo de algoritmos Algoritmos Un algoritmo es un conjunto de pasos claramente definidos que a partir de un cierta entrada (input) produce una determinada salida (output) Algoritmos y programas Un algoritmo es independiente del lenguaje en el cual se programa, de la maquina en la cual se implementa y de otras restricciones que hacen a la puesta en operación del algoritmo. Los algoritmos pueden considerarse como entidades matemáticas abstractas independientes de restricciones tecnológicas. Validación de un algoritmo Un algoritmo es correcto si el resultado que produce siempre resuelve un determinado problema a partir de una entrada válida. Demostrar que un algoritmo es correcto es el primer paso indispensable en el análisis de un algoritmo, esto es lo que se conoce como validación del algoritmo. Algoritmos determinísticos Un algorítmico es determinístico si la respuesta que produce se puede conocer a partir de los datos de entrada. Que un algoritmo sea o no sea determinístico no aporta dato alguno sobre la corrección del algoritmo. El estudio de los algoritmos se puede dividir en dos grandes categorías: el análisis de algoritmos y el diseño de algoritmos. Análisis de algoritmos Cuando un programa se va a usar rápidamente resulta importante que los algoritmos implicados sean eficientes. Vamos a concentrarnos en la definición de eficiencia como el tiempo de ejecución de un algoritmo en función del tamaño de su entrada. Al la eficiencia de un algoritmo también se denomina coste, rendimiento o complejidad del algoritmo. Para medir el coste de un algoritmo se pueden emplear dos enfoques: Pruebas Análisis El primer enfoque consiste en elaborar una muestra significativa o típica de los posibles datos de entrada no presentes en la muestra. En determinadas circunstancias las conclusiones derivadas no siempre son fiables. Página 1 de 7

El análisis emplea procedimientos matemáticos para determinar el coste del algoritmo; sus conclusiones son fiables, pero a veces su realización es difícil o imposible a efectos prácticos. El análisis de algoritmos mediante el uso de herramientas intenta determinar que tan eficiente es un algoritmo para resolver un determinado problema. El aspecto más interesante a analizar de un algoritmo es su costo. Costo de tiempo: indica cuanto tiempo insume un determinado algoritmo para encontrar la solución a un problema, se mide en función de la cantidad o del tamaño de los datos de entrada. Costo de espacio: mide cuanta memoria necesita el algoritmo para funcionar correctamente. El análisis del costo de un algoritmo comprende el costo en tiempo y en espacio. El primer paso que debe llevarse a cabo para analizar un algoritmo es definir con precisión lo que entendemos por tamaño de los datos de entrada. Una vez definido el tamaño resulta conveniente usar una función T(n) para representar el número de unidades de tiempo (segundos, milisegundos, ) que un algoritmo tarda en ejecutarse cuando se le suministran unos datos de entrada de tamaño n. Resulta preferible que T(n) sea el número de instrucciones simples (asignaciones, comparaciones, operaciones aritméticas, etc.) Por esta razón suele dejarse sin especificar las unidades de tiempo empleadas en T(n) Por otra parte, si T(n) es el coste de un algoritmo es perfectamente razonable que asumamos que n>0 y que T(n) es positiva para cualquier valor n. Con mucha frecuencia el coste de un algoritmo depende de los datos de entrada particulares sobre los que opere, y no sólo del tamaño de esos datos. En tales casos, T(n) será el coste un caso peor, es decir, el coste máximo del algoritmo para datos de entrada de tamaño n. En otras ocasiones interesa calcular T(n), el coste promedio del algoritmo para datos de entrada de tamaño n. Conocer el coste promedio de un algoritmo puede resultar en muchas ocasiones más útil que conocer el coste en caso peor (demasiado pesimista), pero es más difícil de calcular y se basa en la hipótesis de equiprobabilidad de las posibles entradas, hipótesis que no siempre es cierta. Diseño de algoritmos El diseño de algoritmos se encarga de encontrar cual es el mejor algoritmo para un problema determinado. Algunas de las técnicas más utilizadas en el diseño de algoritmos son las siguientes: Dividir para conquistar. Algoritmos aleatorizados. Programación dinámica. Algoritmos golosos (Greedy) Algoritmos heurísticos. Página 2 de 7

Reducción a otro problema conocido. Uso de estructuras de datos que solucionen el problema. Modelos computacionales Para poder estudiar en detalle un algoritmo debemos fijar un marco en el cual podemos probar y analizar un algoritmo, así como también que permita comprar dos algoritmos entre sí. Este ambiente necesario para el estudio de los algoritmos se conoce como modelos computacionales. Maquina RAM de costo fijo La máquina RAM es una máquina ideal muy similar a una computadora actual aunque con algunas simplificaciones. Los programas de la maquina RAM se almacenan en memoria. Puede suponerse que todos los accesos a memoria tienen el mismo costo (en tiempo) y que todas las instrucciones tienen un costo constante e idéntico (en tiempo). El set de instrucciones de la maquina RAM está compuesto por la gran mayoría de las instrucciones que podemos encontrar en un lenguaje de alto nivel. Algoritmo 1 Este es un ejemplo y 1 A[2] 1 Si n<1 entonces X w sino X y fin_si Mientras n>=0 hacer n n-1 fin_mientras Para i desde 0 hasta 10 hacer A[i] 0 Algoritmo 2 Ejemplo simple a 3 b a*5 Si b=5 entonces a 2 sino a 1 fin_si El algoritmo 2 tiene 5 instrucciones de las cuales se ejecutan únicamente 4. Por lo tanto el costo del programa en tiempo es de C*4, siendo C una constante que indica cuanto tiempo tarda en Página 3 de 7

ejecutarse una instrucción. El espacio que necesita el programa es el espacio ocupado por las variables a y b. Es decir 2*Ec siendo Ec el espacio que ocupa una variable. Este acercamiento a la realidad en el código de la máquina RAM no se evidencia en cuanto al costo ya que el modelo planteado en el cual todas las instrucciones tienen un costo fijo no es real ya que hay algunas instrucciones que son claramente más costosas que otras, por ejemplo una multiplicación insume más tiempo que una suma en cualquier computadora. Máquina RAM de costo variable En la maquina RAM de costo variable cada instrucción I i tiene asociado un costo C i que le es propio y que depende del costo de implementar dicha instrucción. Algoritmo 3 Ejemplo simple II a 3 b a*5 Si b=5 entonces a 2 sino a 1 Fin_si Este programa cuesta ahora 3*C1+1*C2+1*C3 Donde: C1= costo de una asignación C2= costo de una multiplicación. C3= costo de comparar dos números. A partir de este momento adoptaremos como base para el análisis de los algoritmos que estudiaremos la máquina RAM de costo fijo. Algoritmos iterativos Los algoritmos iterativos son aquellos que se basan en la ejecución de ciclos; que pueden ser de tipo for, while, repeat, etc. Analizar el costo en tiempo de estos algoritmos implica entender cuantas veces se ejecuta cada una de las instrucciones del algoritmo y cuál es el costo de cada una de las instrucciones. Costo de una instrucción en ciclos simples para i desde 1 hasta n hacer instrucción Página 4 de 7

El cálculo en costo de una instrucción en un ciclo simple puede hacerse utilizando una sumatoria. Donde C1 es el costo de la instrucción que se ejecuta en el ciclo. El resultado de la sumatoria es n*c1 lo cual es evidente porque la instrucción dentro del ciclo se ejecuta n veces. Costo de una instrucción en ciclos anidados independientes para i desde 1 hasta n hacer para j desde 3 hasta m hacer Instrucción Podemos calcular el costo de la instrucción nuevamente usando sumatorias de la forma: Costo de una instrucción en ciclos anidados dependientes Cuando los ciclos dependen uno del otro: para i desde 1 hasta n hacer para j desde i hasta n hacer Instrucción Antes de continuar vamos a recordar algunas sumatoria útiles: Página 5 de 7

Al analizar el tiempo de un algoritmo se debe analizar el mejor caso, el peor caso y el caso medio. Habitualmente el que más interesa es el peor caso. Ejemplo: Considérese el siguiente algoritmo de localización del mínimo elemento de una tabla que almacena m>0 elementos enteros. El tamaño de la entrada de la función será m. En este ejemplo se tiene en cuenta el costo de las instrucciones Para_Fin_para, además de las instrucciones de comparación y asignación. 1. tipo tabla enteros = tabla[1..max] de entero 2. Fin_tipo 3. 4. función localización_minimo (ent A: tabla_enteros; ent m:entero) retorna entero 5. var j, min: entero 6. fin_var 7. min:=1 8. para j desde 2 hasta m hacer 9. si A[j]<A[min] entonces 10. min:=j 11. fin_si 12. 13. retorna min 14. fin_función Al tiempo de ejecución del algoritmo solo contribuyen ciertas líneas de este algoritmo. En la línea (7) efectuamos una asignación, por lo que cargamos una unidad de tiempo a la factura. En la línea (8) cargamos dos unidades de tiempo por cada iteración que se haga, ya que en cada iteración se le da valor a j (se incrementa) y se comprueba si hemos llegado al final de la iteración o no; más dos unidades de tiempo de la iteración final, en la que j:=m+1, la comprobación entre j y m fracasa, y se abandona el bucle para sin ejecutarse el cuerpo del mismo. El cuerpo de la iteración (líneas (9) a (11)) puede tener un coste de una o de dos unidades. La evaluación de las condiciones consume una unidad siempre, pero en función del resultado consumiremos una unidad más por la asignación min:=j (línea (10)) o no habrá nada más que hacer. Página 6 de 7

Como vamos a evaluar el coste en caso peor, adoptamos la hipótesis pesimista y suponemos que siempre habrá que gastar dos unidades de tiempo en el cuerpo de la iteración, en todas las iteraciones. Si la tabla estuviera ordenada decrecientemente, ocurriría justamente esto. Para finalizar la contabilización de operaciones realizadas, añadimos al total una unidad de tiempo por el retorno de la expresión min. Resumiendo, si T(m) es el coste (en caso peor) de localización mínimo para una entrada de tamaño m tenemos: T(m)= 1 + 2 (m - 1) + 2 + 2 (m - 1) + 1 = 4 (m - 1) + 4 = 4m Orden de un algoritmo (7) (8) (9)y(10) (13) El análisis de los algoritmos que hemos realizados hasta aquí es muy preciso pero resulta incómodo para entender que tan eficiente es un algoritmo o para poder compararlo contra otro algoritmo. Supongamos que para cierto problema hemos hallado dos posibles algoritmos que lo resuelven A y B. Evaluamos con cuidado sus costes respectivos y obtenemos que TA(n)=100n y TB(n)=2n 2. Cuál será conveniente usar? Si n<50, resulta que B es más eficiente que A, pero no mucho más; para n>50 el algoritmo A es mejor que B, y la ventaja de A sobre B se hace mucho mayor cuanto mayor es n. Para entradas de tamaño n=100, A es el doble de rápido que B, pero para entradas de tamaño n=1000, A es veinte veces más rápido que B. Este pequeño ejemplo muestra que es mucho más importante la forma funcional (n vs n 2 ) de los costes que las constantes que intervienen (2 vs 100). Comparación de los costes 100n y 2n 2 Página 7 de 7