Cecilia Laborde González

Slides:



Advertisements
Presentaciones similares
Algoritmos y Programas
Advertisements

Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Unidad 1 DISEÑO DE ALGORITMOS ING. Nelwi Baez. MSC
LÓGICA DE PROGRAMACIÓN
¿Cómo hacer para que una máquina comprenda el LN?
Introducción a los Algoritmos
Resolución de Problemas Algoritmos y Programación
FUNDAMENTOS DE PROGRAMACIÓN
Curso de Programación I Parte I
Técnico en programación de Software
SECRETARÍA DE EDUCACIÓN PÚBLICA SUBSECRETARÍA DE EDUCACIÓN MEDIA SUPERIOR DIRECCIÓN GENERAL DEL BACHILLERATO   ESCUELA PREPARATORIA FEDERAL POR COOPERACIÓN.
Introducción a la Estadística Informática
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Metodología de la Programación
¿Qué es un algoritmo? “(del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de operaciones.
METODOLOGIA DE LA PROGRAMACION
Matemáticas Discretas y Algoritmos
INTRODUCCIÓN A LA COMPUTACIÓN 12va Semana – 19va Sesión Miércoles 18 de Mayo del 2005 Juan José Montero Román
Programación de Computadores
Asignatura de Introducción a la Ingeniería en Sistemas Tema: DIAGRAMAS DE FLUJO.
Proceso de información en la computadora
FORMULACIÓN DE ALGORITMOS
ALGORITMOS.
Diagramas de procesos Unidad V
Fundamentos de programación
ALGORITMOS, CONCEPTOS BASICOS.
LENGUAJES DE PROGRAMACIÓN
Introducción al análisis de algoritmos

ESTRUCTURA DE DATOS ESD-243
Tema 6. Conceptos básicos de programación (Repaso) Prof. María Alejandra Quintero Informática Año 2013.
Diseño de algoritmos La computadora puede realizar procesos y darnos resultados, sin que tengamos la noción exacta de las operaciones que realiza. Con.
Fundamentos de programación Organización de una computadora.
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
ETAPAS PARA SOLUCIONAR UN PROBLEMA
Introducción a la Ingeniería de Sistemas
CONCEPTOS BÁSICOS FUNDACIÓN UNIVERSITARIA LOS LIBERTADORES Fredys Alberto Simanca Herrera Programación Estructurada Semana Bogotá, D.C
PENSAMIENTO ANALÍTICO SISTÉMICO DAISY KATERINE RODRÍGUEZ DURÁN
Análisis y Diseño de Algoritmos
DIAGRAMA DE FLUJO ERIKA SUAREZ lozano Sergio Ortiz caballero Arturo González Yesica mariana regueros Paola García sanchez.
Metodología para la construcción de programas
ALGORITMOS La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió.
Capítulo 6. ANÁLISIS DE ALGORITMOS
Parte I. Estructuras de Datos.
Representación de Algoritmos
TEMA 2: DIAGRAMAS DE FLUJO
Por: Ortega Ramírez Cristian Ricardo
Santiago Pachón Pedroza Jesús Arley Bolaños 1002
DEV- C++ ·include <iostream> Int x x=x+2(x)
Algoritmos..
Entendiendo las partes
ALGORITMO QUE ES ??.
Edward Barrera Barrera Cristian Anderson Isacc
Elaboración de algoritmos usando lógica de programación
M.S.C. Ivette Hernández Dávila
Metodología de la programación
Dirección General de Educación Superior Tecnológica Instituto Tecnológico de Salina Cruz CARRERA INGENIERÍA EN TECNOLOGÍAS DE LA INFORMACIÓN Y LAS COMUNICACIONES.
Algoritmos Programación
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
Universidad Autónoma del Estado de México Programación Estructurada
David A Salamanca Díaz. DEFINICIÓN  Se define como una serie de pasos organizados que describen el proceso que se debe seguir, para dar solución a un.
Programación I Prof. Carolina Cols. Algoritmo es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema.
INFORMÁTICA II TEMA: DISEÑA Y ELABORA ALGORITMOS DOCENTE: MARÍA DOLORES GARCÍA PONCE CAMPUS TONALÁ JALISCO.
Equipo: Erika López Coyotecatl María José Cuazitl Popocatl CETis - Centro de Estudios Tecnológicos de Servicio Industrial y Servicio “Daniel Cabrera Rivera”
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
ALGORITMOS Asignatura: Informática. Algoritmos Conjunto de instrucciones ordenadas de forma lógica y precisa, con un inicio y fin que permite resolver.
Ing. José David Ortiz Salas
ALGORITMOS Y PROGRAMAS. OBJETIVOS  Resolver problemas mediante la especificación algorítmica.  Proporcionar los procedimientos y técnicas para el desarrollo.
Transcripción de la presentación:

Cecilia Laborde González Cecilia.laborde.g@gmail.com Análisis de Algoritmo Cecilia Laborde González Cecilia.laborde.g@gmail.com

Objetivos Profundizar en la aplicación de técnicas para el análisis de la eficiencia en tiempo y espacio de un algoritmo. Aplicar técnicas para el análisis de eficiencia de algoritmos recursivos. Aplicar una técnica de diseño de algoritmos adecuada al problema a resolver. Establecer las bases teóricas que permitan comprender una tipificación de problemas clásicos en las ciencias de la computación y la ingeniería informática. Conocer acerca de la existencia de problemas intratables e insolubles.

Contenidos Unidad I EFICIENCIA DE ALGORITMOS (16) Eficiencia de los algoritmos Medidas de eficiencia Medidas de eficiencia de algoritmos. Medidas simplificadas de eficiencia Costos de un algoritmo Orden de magnitud Análisis de “peor caso”, “caso medio” y “mejor caso”.

Contenidos Unidad II COMPLEJIDAD COMPUTACIONAL (8) Algoritmos y complejidad Introducción a la NP-completitud Las clases P y NP Problemas NP-completos Problemas NP-difíciles Problemas de decisión y optimización

Contenidos Unidad III ANALISIS de ALGORITMO (20) Tiempo de ejecución Notación asintótica Notación “orden de”: notación O Órdenes de complejidad Operaciones sobre notación asintótica Análisis de algoritmos Análisis de algoritmos no recursivos Análisis de algoritmos recursivos Algoritmos recursivos y ecuaciones de recurrencia

Contenidos Unidad III ANALISIS de ALGORITMO (20) Ecuaciones de recurrencia Recurrencias homogéneas y no homogéneas Resolución de recurrencias Cambios de variable Teorema maestro de recurrencias del tipo divide y conquista Algoritmos de búsqueda Búsqueda secuencial Búsqueda por árboles binarios Algoritmos de ordenamiento Ordenamiento por mezcla Ordenamiento quicksort

Contenidos Unidad IV TÉCNICAS CLÁSICAS DE CONSTRUCCIÓN DE ALGORITMOS(28) Fundamentos para la construcción de algoritmos Algoritmos voraces (Greedy) Características generales de los algoritmos voraces El problema de la mochila El problema de cambio de mone Aplicaciones en grafos Divide y conquista Algunos esquemas basados en divide y conquista Multiplicación de enteros grandes Multiplicación de matrices (algoritmo de Strassen) Otras aplicaciones del esquema divide y conquista

Contenidos Unidad IV TÉCNICAS CLÁSICAS E CONSTRUCCIÓN DE ALGORITMOS(28) Programación dinámica Características generales de la programación dinámica Ejemplos sencillos de programación dinámica Exploración de grafos Backtraking Branco and Bound Algoritmos heurísticos Heurística

Evaluaciones 28 Septiembre, primera evaluación. 09 Noviembre, segunda evaluación 07 Diciembre, Tercera evaluación, entrega de trabajo

¿ QUE ES UN ALGORITMO? Podríamos definirlo como un: CONJUNTO ORDENADO Y FINITO DE INSTRUCCIONES QUE PERMITEN ENCONTRAR LA SOLUCION DE UN DETERMINADO PROBLEMA

CARACTERISTICAS DE UN ALGORITMO Un algoritmo debe ser: PRECISO FINITO DEFINIDO Es decir, cada instrucción debe indicar claramente lo que se tiene que hacer. Es decir, debe tener un número limitado de pasos. Es decir, debe producir los mismos resultados para las mismas condiciones de entrada.

¿COMO REPRESENTAMOS LOS ALGORITMOS ? Se pueden representar mediante DIAGRAMAS o TEXTO LOS DIAGRAMAS Representan GRAFICAMENTE las ACTIVIDADES que conforman un PROCESO. Los diagramas son la representación de la SOLUCIÓN de un PROBLEMA. Proceso1 inicio fin Proceso2 Proceso3 TEXTO Los algoritmos se pueden representar mediante FRASES que representan los PROCEDIMIENTOS que dan la SOLUCIÓN al PROBLEMA.

EJEMPLO DE DIAGRAMAS DE FLUJO Proceso1 inicio fin Proceso2 Proceso3

Símbolos LINEAS DE FLUJO O FLECHAS Muestran la dirección del flujo de datos o secuencia de las instrucciones. TERMINAL / ECLIPSE Indican el comienzo o final de cada módulo. Start End/Stop/Exit

Símbolos Indica procesamiento como cálculos y abrir y cerrar archivos. RECTANGULO / PROCESO Indica procesamiento como cálculos y abrir y cerrar archivos. PARALELOGRAMO Indica input y output de la memoria del computador. IMPRESION DE DOCUMENTO Representa la impresión de datos (Normalmente de respuesta)

Símbolos DIAMANTE Indica decisión. Tiene dos salidas dependiendo si la decisión es cierta o falsa. PROCESO DE UN MODULO Implica que se hará un proceso externo o subtarea.

Símbolos POLIGONO / PREPARACION Representa las condiciones de un grupo de procesos que se repiten automáticamente utilizando un contador. Counter A S B A es el valor inicial del contador Counter. S es el incremento del contador. B es el límite hasta donde debe llegar el contador.

Símbolos CONECTOR EN LA PAGINA Se utiliza para conectar secciones del diagrama de flujo en una misma página. CONECTOR FUERA DE LA PAGINA Conector que une dos partes de diagrama que no caben en una sola página. Ambos deben utilizarse lo menos posible.

REGLAS PARA DIBUJAR DIAGRAMAS DE FLUJO Las instrucciones deben ser escritas dentro de los símbolos. Si tiene que hacer alguna anotación o comentario, hágalo al lado del símbolo. Un diagrama de flujo siempre comienza arriba en la página y fluye hacia abajo. Si necesita más de una página dibuje por columnas y utilice conectores. Utilice algún tipo de software para dibujar un DDF. Haga los símbolos lo suficientemente grandes como para que lo que escriba en ellos sea fácil de leer.

EJEMPLO PRACTICO 1 Freir un Huevo Descripción: Este diagrama de flujo describe detalladamente como freir un huevo. Inicio Encender Fósforo Huevo, fósforo cocina, paila, aceite fin Encender cocina con fósforo Colocar paila sobre cocina Agregar aceite a la paila 1 Abrir huevo Vertir huevo en la paila Esperar a que se fría

Áreas de estudio ¿Cómo construir algoritmos? Técnicas de diseño ¿Cómo expresar algoritmos? Enfoques de los lenguajes de programación ¿Cómo validar algoritmos? Verificación formal ¿Cómo analizar algoritmos? Complejidad computacional, eficiencia, legibilidad, usabilidad, etc...

Análisis de algoritmos Si se tuvieran 2 programas que hacen lo mismo, ¿cómo se podrían comparar? Eficiencia: Tiempo de ejecución Uso de espacios de memoria Facilidad de lectura, mantenimiento, rapidez para codificarlo.

Análisis de algoritmos Ejemplo, tiempo Aplicaciones informáticas que trabajan “en tiempo real”: requieren que los cálculos se realicen en el menor tiempo posible. Aplicaciones que manejan un gran volumen de información: si no se tratan adecuadamente pueden necesitar tiempos impracticables.

Análisis de algoritmos Una Leyenda Mucho tiempo atrás, el 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, • más dos granos de trigo en la segunda casilla, • más 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.

Análisis de algoritmos Una Leyenda 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. El número de granos en la primera fila resultó ser: 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 = 255 La cantidad de granos en las dos primeras filas es: 𝑖=0 15 2 2 = 2 16 − 1 = 65.535

Análisis de algoritmos Una Leyenda 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: 𝑖=0 23 2 𝑖 = 2 24 - 1 = 16.777.216 granos, que pesan alrededor de 600 kilos . . . En efecto, para rellenar las 64 casillas del tablero hacen falta : 𝑖=0 63 2 𝑖 = 2 64 - 1 = 18446744073709551615 ≈1,84 × 10 19 Granos, una cantidad muy grande.

Análisis de algoritmos Una Leyenda La función 2 𝑛 − 1 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.

Análisis de algoritmos La técnica que se utilizaba en los primeros años de la programación para comparar la eficiencia de distintos algoritmos consistía en ejecutarlos para datos diferentes y medir el tiempo consumido. Dado que las máquinas y los lenguajes eran dispares, y que el tiempo de ejecución depende no solo del tamaño sino también del contenido de los datos, resultaba muy difícil comparar tales resultados. El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos a Daniel Goldenberg del MIT. En 1952 realizó un análisis matemático del número de comparaciones necesarias, en el mejor y en el peor caso, de cinco algoritmos distintos de ordenación. La tesis doctoral de Howard B. Demuth de la Universidad de Stanford estableció en 1956 las bases de lo que hoy llamamos análisis de la complejidad de los algoritmos.

Análisis de algoritmos La técnica que se utilizaba en los primeros años de la programación para comparar la eficiencia de distintos algoritmos consistía en ejecutarlos para datos diferentes y medir el tiempo consumido. Dado que las máquinas y los lenguajes eran dispares, y que el tiempo de ejecución depende no solo del tamaño sino también del contenido de los datos, resultaba muy difícil comparar tales resultados. El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos a Daniel Goldenberg del MIT. En 1952 realizó un análisis matemático del número de comparaciones necesarias, en el mejor y en el peor caso, de cinco algoritmos distintos de ordenación. La tesis doctoral de Howard B. Demuth de la Universidad de Stanford estableció en 1956 las bases de lo que hoy llamamos análisis de la complejidad de los algoritmos.