Está en la página 1de 22

Introducción al Análisis y Diseño de Algoritmos

Dr. Eduardo A. R ODRÍGUEZ T ELLO

C INVESTAV-Tamaulipas

10 de enero de 2018

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 1 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 2 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 3 / 22


Introducción al Análisis y Diseño de Algoritmos ¿Qué es un algoritmo?

¿Qué es un algoritmo?

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 4 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 5 / 22


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 mo«d 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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 6 / 22


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 mo «d n
m←n
n←r
return m

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 7 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 8 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 9 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 10 / 22


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.

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 11 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 12 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 13 / 22


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?

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 14 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 15 / 22


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)

Mejora iterativa...

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 16 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 17 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 18 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 19 / 22


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

Numéricos

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 20 / 22


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

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 21 / 22


Introducción al Análisis y Diseño de Algoritmos Estructuras de datos fundamentales

Estructuras de datos fundamentales

Listas: arrays, listas ligas, cadenas

Stacks

Colas

Colas con prioridad

Grafos

Árboles

Diccionarios

Dr. Eduardo R ODRÍGUEZ T. (C INVESTAV) Introducción al ADA 10 de enero de 2018 22 / 22