Complejidad algorítmica. Algoritmos y Estructuras de Datos II (Programación I) Mgter. Vallejos, Oscar A.

Documentos relacionados
Complejidad de Algoritmos

Introducción a la Geometría Computacional

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria.

Análisis de problemas

Práctica 3. CÁLCULO DE LA FUNCIÓN SENO UTILIZANDO UN DESARROLLO EN SERIE

PROGRAMACIÓN LINEAL ENTERA

PROGRAMACIÓN ALGORITMOS y DIAGRAMAS

Complejidad computacional (Análisis de Algoritmos)

Contenidos mínimos 4B ESO. 1. Contenidos. Bloque I: Aritmética y álgebra.

Algoritmos y Diagramas de flujo

TEMA V: NOCIONES DE COMPLEJIDAD COMPUTACIONAL. Álgebra II García Muñoz, M.A.

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

UNIDAD UNO PROGRAMACIÓN LÍNEAL Parte 3

Pruebas de Bondad de Ajuste

SISTEMAS DE ECUACIONES LINEALES

Expresiones algebraicas

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

IN34A - Optimización

Tema 2. Sistemas de ecuaciones lineales

LENGUAJES DE PROGRAMACION I. Propósito del curso :

Unidad 3 BALANCEO DE LÍNEA DE ENSAMBLE. Administración de Operaciones III

EL MERCADO Y LOS PRONÓSTICOS. MSc. Freddy E. Aliendre España

Estudio del tiempo de ejecución de algoritmos recursivos a través de relaciones de recurrencia lineal

TEMA 4 El tipo conjunto

3. Resolver triángulos rectángulos utilizando las definiciones de las razones trigonométricas.

CELERON PPGA370, PENTIUM III FCPGA, CYRIX III

Límites de la Computación

La eficiencia de los programas

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA SUR INGENIERÍA EN TECNOLOGÍA COMPUTACIONAL. ASIGNATURA Programación I. Básica ETAPA DE FORMACIÓN.

CALIDAD 1 JOSÉ MANUEL DOMENECH ROLDÁN PROFESOR DE ENSEÑANZA SECUNDARIA

Tema 2. Divisibilidad. Múltiplos y submúltiplos.

CRITERIOS DE EVALUACIÓN

Grado en Química Bloque 1 Funciones de una variable

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

Los números naturales

Etapas para la solución de un problema por medio del computador

GUÍAS. Módulo de Razonamiento cuantitativo SABER PRO

Práctica 3: Análisis en el Dominio Espectral

[GEOGEBRA] Innovación Educativa. Ricardo Villafaña Figueroa

Programación Matemática. Profesor: Juan Pérez Retamales

descripción del argumento identificador tipo longitud condición restricción

PROBLEMAS TEMA 1: Estructuras de interconexión de un computador

VINCULACIÓN DE LAS COMPETENCIAS BÁSICAS CON LOS CRITERIOS DE EVALUACIÓN Y LOS

Capítulo 4 Memoria virtual

La ecuación de segundo grado para resolver problemas.

Algoritmos. Diseño de algoritmos por inducción. Alberto Valderruten. Dept. de Computación, Universidade da Coruña

Tema 4: Múltiplos y Divisores

LABORATORIO DE MECANICA Análisis Gráfico.

Modelo Académico de Calidad para la Competitividad AIND-01 92/98

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Colegio Universitario Boston. Funciones

Organización de Computadoras. Clase 10

Análisis y Diseño de Sistemas Departamento de Sistemas - Facultad de Ingeniería

Dirección de Desarrollo Curricular Secretaría Académica

Problemas de 4 o ESO. Isaac Musat Hervás

Tema 3. Análisis de riesgo. Tema 3. Análisis de riesgo

Práctica final. Emilia Cruz Fernández Martínez

DISEÑO LOGICO CON DISPOSITIVOS LOGICOS PROGRAMABLES (PLD S) ING. LUIS F. LAPHAM CARDENAS PROFESOR INVESTIGADOR DIVISION DE ELECTRONICA C.E.T.I.

Anexo 1 ÁLGEBRA I.- Operaciones en las Expresiones Algebraicas II.- Factorización y Operaciones con las Fracciones III.- Funciones y Relaciones

Sistemas de Ecuaciones Lineales

MATEMÁTICAS 1ero ESO

Unidad Académica de Ingeniería Eléctrica. Programa del curso: Lenguaje de Programación I y Lab.

PROBLEMA DEL TRANSPORTE VRP (VEHICLE ROUTING PROBLEM)

3. Métodos clásicos de optimización lineal

Complejidad de los Algoritmos

Resolver ecuaciones de segundo grado con WIRIS

Algoritmos y problemas

PROGRAMA DE CURSO. Horas Docencia Horas de Trabajo SCT. Obligatorio Plan Común

CURSOSO. Aritmética: Númerosnaturalesyenteros. Númerosracionalesyfraciones. MATEMÁTICAS. AntonioF.CostaGonzález

Microsoft Access 2003 (Completo)

Distribuciones bidimensionales. Regresión.

Algorítmica y Lenguajes de Programación. Complejidad computacional

Tema 05: Tablas hash. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

ANÁLISIS DE LOS ASPECTOS Y FACTORES QUE SE CONSIDERAN EN EL DISEÑO DE SOFTWARE EDUCATIVO DE CALIDAD

Polinomios. 1.- Funciones cuadráticas

Problemas de Recursividad

Nombre de la asignatura: Probabilidad y Estadística Ambiental

Introducción al análisis numérico

Predicción de la relación entre el género, la cantidad de cigarrillos y enfermedades usando Máquinas de Vector Soporte

Estadística Avanzada y Análisis de Datos

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

Lección 1. Algoritmos y conceptos básicos.

4. Método Simplex de Programación Lineal

Modelos Para la Toma de Decisiones

DERIVADA GENERALIZADA DE LAS FUNCIONES SENO Y COSENO

TEMA I: LOS CONCEPTOS FUNDAMENTALES DE LA TEORÍA DE LA COMPUTABILIDAD

Multiplicación de enteros Algoritmo clásico 1234*5678 = 1234* (5* *100+7*10+8) = 1234*5* *6* *7* *8 Operaciones bási

IDENTIFICACIÓN, DISEÑO Y FORMULACIÓN DE PROYECTOS

Introducción a la programación: Contenido. Introducción

INSTITUTO TECNOLOGICO DE LAS AMERICAS CARRERA DE TECNOLOGO EN REDES DE LA INFORMACION SISTEMAS OPERATIVOS I

Demostración de la Transformada de Laplace

FECHA OBJETIVO CONTENIDO Semana. Introducir el tema de funciones ( tentativo)

FECHA OBJETIVO CONTENIDO 12 DE MARZO. Introducir el tema de funciones

Unidad 1. Las fracciones.

2 Operaciones de producto y división de polinomios

Tablas Hash y árboles binarios

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

La simulación implica construir una replica de algún sistema real y usarlo bajo condiciones de prueba

Introducción al Análisis del Coste de Algoritmos

MATEMÁTICA III. Régimen de Cursada: Semestral Caracter: Obligatoria Correlativas: Matemática II Profesor: Beatriz Pintarelli Hs. semanales: 6 hs.

Transcripción:

Complejidad algorítmica

Complejidad Algorítmica En particular, usualmente se estudia la eficiencia de un algoritmo en tiempo (de ejecución), espacio (de memoria) o número de procesadores (en algoritmos implementados en arquitecturas paralelas). El estudio de la complejidad algorítmica trata de resolver este importantísimo aspecto de la resolución de problemas. Los criterios utilizados por la complejidad algoritmica no proporcionan medidas absolutas, como podría ser el tiempo total en segundos empleado en la ejecución del programa que implementa el algoritmo, sino medidas relativas al tamaño del problema. Además, estas medidas son independientes del computador sobre el que se ejecute el algoritmo.

Complejidad Algorítmica Con frecuencia, no es posible mejorar simultáneamente la eficiencia en tiempo y en memoria, buscándose entonces un algoritmo que tenga una complejidad razonable en ambos aspectos. Actualmente, y gracias a los avances de la técnica, quizás es mías importante el estudio de la complejidad en el tiempo, ya que la memoria de un computador puede ser ampliada fácilmente, mientras que el problema de la lentitud de un algoritmo suele ser mías difícil de resolver.

Conceptos básicos Para medir el tiempo empleado por un algoritmo se necesita una medida adecuada. Claramente, si se aceptan las medidas de tiempo físico, obtendremos unas medidas que dependerán fuertemente del computador utilizado. Por otro lado, se podrá contar el número de instrucciones ejecutadas por el algoritmo, pero esta medida dependerá de aspectos tales como la habilidad del programador o del lenguaje de programación. Conclusión: Se debe buscar una medida abstracta del tiempo que sea independiente de la máquina con que se trabaje, del lenguaje de programación, del compilador o de cualquier otro elemento de hardware o software que influya en el análisis de la complejidad en tiempo.

Conceptos básicos Un mismo problema puede ser resuelto de distintas maneras. Un algoritmo es mucho mejor cuanto menos recursos consuma, pero se deben tener en cuenta otros factores antes de establecer la conveniencia o no de este. (Ej.: la facilidad para programar; facilidad de entenderlo, robustez, etc.). Básicamente los recursos que consume un algoritmo dependen de unos factores internos y otros externos.

Conceptos básicos Factores internos Tamaño de los datos de entrada. (Ej. Calculo de la media de una matriz N * M) Naturaleza de los datos de entrada Mejor caso. La ejecución más rápida Peor caso. El contenido proporciona la meta mas lenta Promedio. Media de todos los contenidos posibles. Factores externos El Ordenador donde ejecutamos El lenguaje de programación La implementación que haga el programador

Conceptos básicos De estos dos factores, los externos no aportan información sobre el algoritmo, porque no pueden ser controlados por el usuario Mientras que los factores internos (tamaño, contenido de los datos de entrada, etc) si pueden ser controlados por el usuario, por lo que aportan la información necesaria para poder realizar el análisis del algoritmo.

Conceptos básicos Operación Elemental Es necesario disponer de una medida que nos permitan cuantificar dicha situación (distancia entre dos ciudades se hace uso del metro). Cuando queremos determinar la eficiencia de un algoritmo: Que unidad podemos utilizar? Usamos el ordenador; etc. La eficiencia de un algoritmo se mide mediante las operaciones elementales: aquella operación cuyo tiempo de ejecución se puede acotar por una constante que solamente dependerá de la implementación particular usada.

El coste depende de los datos Ej.: si un número natural es par o impar Normalmente, el tiempo requerido por un algoritmo es función de los datos, por lo que se expresa como tal: así, escribimos T(n) para representar la complejidad en tiempo para un dato de tamaño n. Otra situación ejemplar se da en el caso del algoritmo de suma lenta de dos números naturales a y b: Es, por tanto, un algoritmo de complejidad lineal con respecto a b, es decir, T(a; b) = b. Conclusión: no siempre todos los datos son importantes de cara a la complejidad.

El coste esperado, el mejor y el peor Otro aspecto interesante de la complejidad en tiempo puede ilustrarse analizando el algoritmo de búsqueda secuencial ordenada en el que se recorre un vector (ordenado crecientemente) desde su primer elemento, hasta encontrar el elemento buscado, o hasta que nos encontremos un elemento en el vector que es mayor que el elemento elem buscado.

El coste esperado, el mejor y el peor Tmáx(n), expresa la complejidad en el peor caso, esto es, el tiempo máximo que un algoritmo puede necesitar para una entrada de tamaño n. Tmín(n), expresa la complejidad en el mejor caso, esto es, el tiempo mínimo que un algoritmo necesita para una entrada de tamaño n. Tmed(n), expresa la complejidad en el caso medio, esto es, el tiempo medio que un algoritmo necesita para una entrada de tamaño n. Generalmente, se suele suponer que todas las secuencias de entradas son equiprobables. Por ejemplo, en los algoritmos de búsqueda, se consideraría que elem puede estar en cualquier posición del vector con idéntica probabilidad, es decir con probabilidad 1/n. Generalmente, la complejidad en el mejor caso es poco representativa y la complejidad en el caso medio es difícil de calcular por lo que, en la práctica, se suele trabajar con el tiempo para el peor caso por ser una medida significativa y de cálculo factible en general.

También importa el gasto de memoria La función Sumatorio nos sirve para ver cómo el coste en memoria también debe tenerse en cuenta al analizar algoritmos. function Sumatorio(n: integer): integer; A la hora del análisis de algoritmos, es fundamental realizar un estudio de la eficiencia, destacando como aspecto más importante la complejidad en tiempo, y en segundo lugar, la complejidad en espacio.

Lo importante es el comportamiento asintótico Es un hecho evidente que datos de un tamaño reducido van a tener asociados, en general, tiempos cortos de ejecución. Por eso, es necesario estudiar el comportamiento de éstos con datos de un tamaño considerable, que es cuando los costes de los distintos algoritmos pueden tener una diferenciación significativa.

Comportamiento asintótico La complejidad en tiempo de un algoritmo es una función T(n) del tamaño de entrada del algoritmo. Pues bien, es el orden de dicha función (constante, logarítmica, lineal, exponencial, etc.) el que expresa el comportamiento dominante para datos de gran tamaño. Ej.: Se dispone de cuatro algoritmos para solucionar un determinado problema, cuyas complejidades son respectivamente, lineal (8n), cuadrática (2 n2), logarítmica (20 log2 n) y exponencial (en).

Reglas prácticas para hallar el coste de un programa Reglas generales para el cálculo de la complejidad en tiempo en el peor caso de los programas escritos en Pascal. Instrucciones simples Se considera que se ejecutan en tiempo constante: La evaluación de las expresiones aritméticas (suma, resta, producto y división) siempre que los datos sean de tamaño constante, así como las comparaciones de datos simples. Las instrucciones de asignación, lectura y escritura de datos simples. Las operaciones de acceso a una componente de un array, a un campo de un registro y a la siguiente posición de un archivo. Todas esas operaciones e instrucciones son

Notación asintótica Rabin Dificultad computacional 1960 Blum y otros teoría de la complejidad 1960 Hartmanis y R.E. Noción de la medida de complejidad 1965 Conham Lograr una teoría independiente de la maquina 1960 Yamada Bennett Ritchie; Medida optima de complejidad 1963 Shannon Complejidad de circuitos booleanos 1949 Pippenger 1979 y Savage 1976 Teoría bien desarrollada El estudio asintótico pone de manifiesto como aumenta en el limite el tiempo de ejecución en función del aumento del tamaño de la entrada.

Notación asintótica Trata acerca de del comportamiento de funciones en el limite, esto quiere decir, para valores suficientemente grandes de su parametro. Para valores de este parámetro de la vida rea, quizas no llegue a tomar un valor práctico. Interesa realizar el estudio para valores grandes de la entrada, los valores pequeños no son interesantes. Se esta interesado en la taza de crecimiento en lugar de los valores concretos. Diremos que un algorimto para algún problema requiere un tiempo del orden T(n) para una función dada T, si existe una constante positiva C para una implementación del algoritmo capaz de resolver todos los casos de tamañlo n en un tiempo que no sea superior a ct(n). Cota superior Cota inferior Cota orden exacto

Complejidad Computacional El costo requerido para encontrar la solución a un problema en términos de recursos computacionales (memoria / tiempo). La complejidad computacional trata de encontrar los algoritmos mas eficientes para resolver cada problema. La eficiencia hace referencia a todos los recursos computacionales, sin embargo, la eficiencia puede ser tomada como sinónimo de rapidez. Plantea los problemas como casos de decisión para los cuales su solución corresponde a una respuesta SI/NO Estudios han llevado a la constatación de que existen problemas muy difíciles, problemas que desafían la utilización de los ordenadores para resolverlos.

Complejidad Computacional Clase P. Los algoritmos de complejidad polinómica se dicen que son tratables en el sentido que son abordables en la práctica. Clase NP. Algunos de estos problemas intratables pueden caracterizarse por el echo de que puede aplicarse un algoritmo polinómico para comprobar si una posible solución es valida o no. Esto lleva a un metodo de resolución no determinista consistente en aplicar heurísticas para obtener soluciones hipotéticas que se van desestimando (o aceptando) a ritmos polinómicos. Clase NP-completos. Se conoce una amplia variedad de problemas de tipo NO, de los cuales destacan algunos de ellos extrema complejidad. Se hallan en la frontera externa de la clase NP. Son problemas NP y son los peores problemas posibles de clase NP. Clase NP-duros. Cualquier problema de decisión, pertenezca o no a problemas NP, el cual puede ser transformado a un problema NPC, tendra la propiedad que no podrá ser resuelto en tiempo polimodal a menos que P = NP. Podemos decir que dicho problema es al menos tan difícil como un NP Completo.