Introducción al Análisis y Diseño de Algoritmos
Dr. Eduardo A. R ODRÍGUEZ T ELLO
CINVESTAV-Tamaulipas10 de enero de 2018
Introducción al Análisis y Diseño de Algoritmos ¿Qué es un algoritmo?
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos ¿Qué es un algoritmo?
¿Qué es un algoritmo?
Un algoritmo es una secuencia de instrucciones (sin ambigüedad)
para resolver un problema, i.e., para obtener una salida requerida
para cada entrada valida en una cantidad finita de tiempo
Introducción al Análisis y Diseño de Algoritmos ¿Qué es un algoritmo?
¿Qué es un algoritmo?
Introducción al Análisis y Diseño de Algoritmos Ejemplo 1: Algoritmo de Euclides
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Ejemplo 1: Algoritmo de Euclides
Ejemplo 1: Algoritmo de Euclides
Problema: Encontrar gcd(m, n), el máximo común divisor de dos enteros m y n (no negativos diferentes de cero)
Ejemplos: gcd(60, 24) = 12 gcd(60, 0) = 60
El algoritmo de Euclides está basado en la aplicación iterativa de la igualdad gcd(m, n) = gcd(n, m m«od n) hasta que el segundo numero sea 0, lo cual hace el problema trivial
Ejemplo: gcd(60, 24) = gcd(24, 12) = gcd(12, 0) = 12
Introducción al Análisis y Diseño de Algoritmos Ejemplo 1: Algoritmo de Euclides
Ejemplo 1: Algoritmo de Euclides
Descripción 1
1
Si n = 0, regresa m y para; sino ir al paso 2
2
Divide m entre n y asigna el valor del residuo a r
3
Asigna el valor de n a m y el valor de r a n. Ir al paso 1
Descripción 2 while n 6= 0 do
r ← m m«od n m ← n
n ← r
return m
Introducción al Análisis y Diseño de Algoritmos Otros ejemplos
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Otros ejemplos
Otros ejemplos, Tarea 1
Diseñe un algoritmo para encontrar todos los elementos comunes en dos listas ordenadas de números. Por ejemplo, para las listas (2, 5, 5, 5) y (2, 2, 3, 5, 5, 7), la salida debe ser (2, 5, 5). ¿Cuál es el número máximo de comparaciones que realiza su algoritmo en función de las longitudes de las listas (m y n, respectivamente)?
Entregue en un reporte hecho en Latex lo siguiente:
pseudocódigo, implementación y análisis de complejidad empírico del mejor y peor caso.
Fecha de entrega: lunes 15 de enero antes de las 8 AM
Introducción al Análisis y Diseño de Algoritmos ¿Por qué es necesario estudiar algoritmos?
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos ¿Por qué es necesario estudiar algoritmos?
¿Por qué es necesario estudiar algoritmos?
Existen razones prácticas y teóricas para estudiar algoritmos:
Prácticas: es necesario conocer un conjunto estándar de algoritmos importantes de diferentes áreas de la computación, además es necesario poder diseñar nuevos algoritmos y analizar su eficiencia
Teóricas: la algorítmica ha sido reconocida como la piedra angular
de las ciencias computacionales.
Introducción al Análisis y Diseño de Algoritmos ¿Por qué es necesario estudiar algoritmos?
¿Por qué es necesario estudiar algoritmos?
David Harel, en su libro Algorithmics: the Spirit of Computing, dice:
Algorithmics is more than a branch of computer science. It is the core of computer science, and, in all fairness, can be said to be relevant to most of science, business, and technology.
Otras razones: el software no existiría sin algoritmos, estudiar
algoritmos permite desarrollar habilidades analíticas para resolver
problemas
Introducción al Análisis y Diseño de Algoritmos Dos puntos importantes relacionados con algoritmos
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Dos puntos importantes relacionados con algoritmos
Dos puntos importantes relacionados con algoritmos
¿Cómo diseñar algoritmos?
¿Cómo analizar la eficiencia de los algoritmos?
Introducción al Análisis y Diseño de Algoritmos Estrategias para diseñar algoritmos
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Estrategias para diseñar algoritmos
Estrategias para diseñar algoritmos
Fuerza bruta
Búsqueda exhaustiva
Decrementa y vencerás
Divide y vencerás
Transforma y vencerás
Programación dinámica
Algoritmos voraces (greedy)
Introducción al Análisis y Diseño de Algoritmos Análisis de algoritmos
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Análisis de algoritmos
Análisis de algoritmos
¿Qué tan bueno es un algoritmo?
Eficiencia en tiempo Eficiencia en espacio
¿Existe un mejor algoritmo?
Límites inferiores
Optimalidad
Introducción al Análisis y Diseño de Algoritmos Tipos importantes de problemas
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Tipos importantes de problemas
Tipos importantes de problemas
Ordenamiento Búsqueda
Procesamiento de cadenas strings De grafos
Combinatorios
Geométricos
Introducción al Análisis y Diseño de Algoritmos Estructuras de datos fundamentales
1
Introducción al Análisis y Diseño de Algoritmos
¿Qué es un algoritmo?
Ejemplo 1: Algoritmo de Euclides Otros ejemplos
¿Por qué es necesario estudiar algoritmos?
Dos puntos importantes relacionados con algoritmos Estrategias para diseñar algoritmos
Análisis de algoritmos
Tipos importantes de problemas
Estructuras de datos fundamentales
Introducción al Análisis y Diseño de Algoritmos Estructuras de datos fundamentales