Está en la página 1de 54

ANÁLISIS DE ALGORITMOS

190304006 – 1

ELIZABETH OSPINA ROJAS


elizabethospina@itm.edu.co
INFORMACIÓN GENERAL

• DOCENTE:
ELIZABETH OSPINA ROJAS
CONTACTO: elizabethospina@itm.edu.co
ASESORÍAS: Horarios a convenir
Contenido del curso
HERRAMIENTAS PARA ANÁLISIS DE ALGORITMOS
• Introducción
• Que es un algoritmo?
• Análisis de algoritmos
• Tiempo de ejecución
• Análisis en el peor de los casos
• Análisis asintótico
• Algoritmos recursivos, recurrencias y teorema maestro
Contenido del curso
ESTRUCTURAS DE DATOS AVANZADAS
• Conjuntos y diccionarios
• Tablas de dispersión
• Colas de prioridad
• Heap
• Arboles binarios de búsqueda
• Grafos
TÉCNICAS PARA DISEÑO DE ALGORITMOS
• Dividir y Conquistar
• Programación Dinámica
CONOCIMIENTOS PRELIMINARES
CONOCIMIENTOS EN PROGRAMACIÓN
• Escritura y análisis de seudocódigos
• Pruebas de escritorio
• Procedimientos recursivos
• Estructuras de datos simples (arreglos, listas, colas, pilas)

CÁLCULO ELEMENTAL
• Funciones
• Series y sucesiones
LIBRO GUÍA
INTRODUCTION TO ALGORITHMS
MIT Press, Second Edition. Thomas H.
Cormen y Charles E. Leiserson
EVENTOS EVALUATIVOS
EVENTO PONDERACIÓN FECHA

TALLER 1 10 % SEMANA 5
28 AGOSTO – 1 SEPTIEMBRE
EXAMEN 1 20% SEMANA 6
4 SEPTIEMBRE – 8 SEPTIEMBRE
TALLER 2 10% SEMANA 9
25 SEPTIEMBRE – 29 SEPTIEMBRE
EXAMEN 2 20% SEMANA 10
2 OCTUBRE – 6 OCTUBRE
TALLER 3 5% SEMANA 13
23 OCTUBRE – 27 OCTUBRE
EXAMEN 3 15% SEMANA 14
30 OCTUBRE – 3 NOVIEMBRE
EXAMEN 4 20% SEMANA 17
20 NOVIEMBRE – 24 NOVIEMBRE
Contenido del curso
HERRAMIENTAS PARA ANÁLISIS DE ALGORITMOS
• Introducción
• Que es un algoritmo?
• Análisis de algoritmos
• Tiempo de ejecución
• Análisis en el peor de los casos
• Análisis asintótico
• Algoritmos recursivos, recurrencias y teorema maestro
INTRODUCCIÓN
• QUÉ ES UN ALGORITMO?

Informalmente, un algoritmo es un procedimiento bien


definido que toma algunos valores conocidos como las
entradas, y produce algunos valores conocidos como las
salidas.
Así, un algoritmo es una secuencia de pasos computacionales
que transforman la entrada en la salida.
INTRODUCCIÓN
• Ejemplo: Problema de ordenamiento
Se desea organizar una secuencia de numero de forma
creciente.

Entradas: una secuencia de n números <a1 , a2, … an>


Salidas: Una permutación de la secuencia de entrada tal que
a1 ≤ a2 ≤ … ≤ an
INTRODUCCIÓN
• Ejemplo: Problema de ordenamiento

Así dada la secuencia de entrada


<31,41,59,26>
Un algoritmo de ordenamiento regresara la salida
<26,31,41,59>
INTRODUCCIÓN
• Estructuras de datos:
Define la forma de almacenar y organizar datos de tal
forma que faciliten la lectura y la modificación de los
datos. Una misma estructura de datos no funciona igual
para todas las aplicaciones. De esta manera, es
importante conocer las limitaciones y fortalezas de
varias estructuras de datos.
INTRODUCCIÓN
• Técnicas:
En algunas ocasiones nos podemos encontrar con
problemas para los cuales no existen algoritmos
publicados. Para estos problemas requerimos usar
técnicas de diseño que nos permitan obtener una
solución eficiente y efectiva del problema.
INTRODUCCIÓN
• Que es análisis de algoritmos?
Es el estudio teórico del desempeño de un programa de
computador y el uso de recursos que este hace en el momento
de ejecutarse.

Otros factores que deben tener en cuenta en el diseño


de algoritmos:
•Modularidad
•Robustez
•Simplicidad
•Confiabilidad
INTRODUCCIÓN

• Porque estudiar algoritmos y su desempeño?


Los algoritmos ayudan a entender la escalabilidad
Escalabilidad es la propiedad deseable de un sistema,
una red o un proceso, que indica su habilidad para
reaccionar y adaptarse sin perder calidad, o bien
manejar el crecimiento continuo de trabajo de manera
fluida.
INTRODUCCIÓN

• El análisis de algoritmos permite conocer el


comportamiento del mismo.
• El desempeño es la propiedad que le da el valor a un
algoritmo.
• Buscamos desarrollar programas que proporciones
una respuesta rápida.
INTRODUCCIÓN

• Como medir el desempeño de un algoritmo?


Una forma de determinar el desempeño de un algoritmo es
a partir del uso eficiente de recursos del mismo.
Este uso de recursos usualmente se mide en términos de
espacio y tiempo.

Espacio -> memoria que utiliza


Tiempo -> lo que tarda en ejecutarse
INTRODUCCIÓN
El objetivo de este curso es diseñar estructuras de datos y
algoritmos que tengan un buen desempeño para la solución de
un problema.

• Estructura de datos: forma sistemática de organizar y accesar


datos.
• Algoritmos: procedimiento detallado para realizar una tarea en
un determinado tiempo.

Como determinar que una estructura de datos y un algoritmo


tiene un buen desempeño?
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN
• La herramienta principal para evaluar el desempeño
durante este curso será el tiempo de ejecución.
• Desempeño de una estructura de datos: El tiempo de
ejecución que toma una operación (ej. lectura,
escritura, búsqueda, organizar) realizada sobre una
estructura de datos.
• Desempeño de un algoritmo: El tiempo de ejecución
que toma en dar una respuesta un algoritmo.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN

• El tiempo de ejecución incrementa con el tamaño de


las entradas de la estructura de datos o el algoritmo.

• También varía dependiendo del hardware


(procesador, memoria, disco) y software (sistema
operativo, lenguaje de programación, compilador)
sobre el cual se implementa y ejecuta.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN

• Independiente de las posibles variaciones que puede


tener el tiempo de ejecución debido al hardware o
software, estamos interesados en estudiar la relación
del tiempo de ejecución con el tamaño de la entrada.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN
¿Como caracterizar el tiempo de ejecución en función del
tamaño de la entrada?
• Experimentalmente
• Ejecutar el algoritmo varias veces con entradas de diferente
tamaño y almacenando el tiempo que tomo en dar una
respuesta.
• Limitaciones: están limitados a un conjunto de entradas, difícil
de comparar el tiempo de ejecución experimental de dos
algoritmos al menos que los dos experimentos sean realizados
bajo las mismas condiciones, y se debe tener completamente
implementado el algoritmo.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN
¿Como caracterizar el tiempo de ejecución en función
del tamaño de la entrada?
• Analíticamente
• Se tiene en cuenta todas las posibles entradas
• Permite compara la eficiencia relativa de dos algoritmos
independiente del software y hardware donde son
implementados y ejecutados.
• Permite estudiar el desempeño del algoritmo sin
implementar o ejecutar el mismo.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN
¿Como caracterizar el tiempo de ejecución en función
del tamaño de la entrada?
• Analíticamente
• El análisis de algoritmos busca caracterizar el tiempo de
ejecución como una función f(n) en términos del tamaño
de la entrada (n).
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN

• El tiempo de ejecución de un algoritmo dada una


entrada corresponde al número de operaciones
primitivas o “pasos” ejecutados.
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN

Las operaciones primitivas incluyen:


• Asignar un valor a una variable
• Llamar un método o subrutina
• Realizar una operación aritmética
• Comparar dos números
• Indexar una posición en un arreglo
• Apuntar a la referencia de un objeto
• Retornar variables dentro de un método o subrutina
INTRODUCCIÓN
TIEMPO DE EJECUCIÓN

El tiempo de las operaciones primitivas es constante.


INTRODUCCIÓN
ANALISIS DE ALGORITMOS

• En análisis de algoritmos no se busca determinar el tiempo


específico (en segundos) para ejecutar una operación
primitiva, sino contar cuantas operaciones primitivas se
ejecutan en un algoritmo.

• Para entender el concepto de tiempo de ejecución vamos a


analizar el algoritmo de ordenamiento por inserción.
INTRODUCCIÓN
Ejemplo: Problema de ordenamiento

Se desea organizar una secuencia de numero de


forma creciente.

• Entradas: una secuencia de n números


<a1 , a2, … an>
• Salidas: Una permutación de la secuencia de entrada tal que
a1 ≤ a2 ≤ … ≤ an
INTRODUCCIÓN
MÉTODO DE INSERCIÓN
Este método consiste en insertar un elemento en la parte ya ordenada del vector. El
método se basa en comparación y desplazamientos sucesivos.
El método expresado en seudocódigo es:
INTRODUCCIÓN
MÉTODO DE INSERCIÓN
Ver ejemplo en el notebook de Google colab
INTRODUCCIÓN
Convenciones para escribir pseudocódigo
• La sangría indica un bloque. Por ejemplo: el bloque del ciclo FOR
contiene las líneas de código 2-7, y el ciclo WHILE contiene las líneas
de código 5-6. También pueden usar {} para indicar un bloque.
INTRODUCCIÓN
Convenciones para escribir pseudocódigo
• Las palabras reservadas WHILE, FOR, IF, THEN, ELSE tienen la
misma interpretación que en JAVA, C, C++.
• Se utiliza el símbolo “=” para la asignación de un valor a una
variable.
• Todas las variables son locales por defecto.
• La indexación a un vector se realiza usando corchetes. Ej:
A[i].
• Los métodos o subrutinas se identificar por letra
• cursiva y entre paréntesis los parámetros o variables
• que se envían al método. Ej. LENGTH(A)
INTRODUCCIÓN
Método de inserción

• Para calcular el tiempo de ejecución del algoritmo


representamos como cj el costo de cada línea de
código y determinamos el número de veces que cada
línea de código se repite (número de pasos).
INTRODUCCIÓN
Método de inserción

• n representa el tamaño de la entrada, en este caso, el


número de elementos a organizar por el algoritmo.
INTRODUCCIÓN
Método de inserción
• Representamos con tj el número de veces que la
condición del ciclo WHILE es evaluada.

• NOTA: la condición para permanecer en un ciclo


WHILE o FOR se evalúa el número de veces que se
ejecuta el ciclo menos uno.
INTRODUCCIÓN
Método de inserción
• El tiempo de ejecución del algoritmo T(n) será la suma
de los tiempos de ejecución de cada línea de código
ejecutada.

• Una línea de código que tomo cj pasos para ejecutarse


y se ejecuta n veces contribuirá en cjn al tiempo total
de ejecución.
INTRODUCCIÓN
Método de inserción
• Para entradas de un mismo tamaño, el algoritmo
tendrá diferentes tiempos de ejecución dependiendo
de las condiciones de la entrada.
• Por ejemplo, en el caso del problema de
ordenamiento el mejor escenario (el cual tendrá el
menor tiempo de ejecución) será cuando la entrada
este ya ordenada.
INTRODUCCIÓN
Método de inserción
• En el mejor de los casos tj=1
• Para el método de Inserción, en el mejor de los casos
el tiempo de ejecución será:
INTRODUCCIÓN
Método de inserción
• El tiempo de ejecución del método de inserción en el
mejor de los casos se puede expresar como una
función linead de n: a+bn, donde los coeficientes a y b
dependen de los costos de cada línea de código.
INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• En el análisis de algoritmos es de interés determinar el
tiempo de ejecución en el peor de los casos (el tiempo de
ejecución más alto que consumirá el algoritmo dada
cualquier entrada).

• El tiempo de ejecución en el peor de los casos proporciona


el límite superior del tiempo de ejecución de un algoritmo
dando garantía que el algoritmo nunca tomara más que
este tiempo dada cualquier entrada.
INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• El peor de los casos para un método de ordenamiento
se da cuando el vector de entrada se encuentra en
orden inverso.
• En este caso, la condición de ciclo WHILE se debe
evaluar j veces, tj=j con j = 2,3,…,n-1.
• Así, el número de veces que se ejecuta la línea 4 de
código es:
INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• y las líneas 5 y 6 se ejecutan:
INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• Serie aritmética
Las expresiones

se obtienen desde la serie aritmética


INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• El tiempo de ejecución del método de inserción en el
peor de los casos esta dado por:
INTRODUCCIÓN
ANÁLISIS DEL PEOR DE LOS CASOS
• Esto se puede expresar como una función cuadrática de n:
an^2+bn+c donde las constantes a, b y c dependen del costo
de cada línea de código.
EJERCICIO DE REPASO
• El método de burbuja es un método popular de ordenamiento. Se
basa en el principio de comparar pares de elementos adyacentes e
intercambiarlos entre sí hasta que estén todos ordenados.

donde ENCHANGE es una subrutina que intercambia dos elementos en


un vector.
EJERCICIO DE REPASO

• a. Realice una prueba de escritorio usando el vector [5,2, 4, 6, 1, 3]


• b. Determine el tiempo de ejecución en el peor y el mejor de los
casos del método de burbuja.

Ver código en el notebook


EJERCICIO DE REPASO
Mejor de los casos: t=1, hallar T(n)

COSTO REPETICIONES
C1 n
C2 t-1
C3 t-1
C4 t-1
EJERCICIO DE REPASO
Peor de los casos, hallar T(n)

COSTO REPETICIONES
C1 n
C2
C3
C4

También podría gustarte