introducción al análisis y diseño de algoritmosertello/algorithms/... · 2018-03-08 ·...

22
Introducción al Análisis y Diseño de Algoritmos Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 10 de enero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 1 / 22

Upload: others

Post on 11-Mar-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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

Dr. Eduardo A. RODRÍGUEZ TELLO

CINVESTAV-Tamaulipas

10 de enero de 2018

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 1 / 22

Page 2: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 2 / 22

Page 3: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 requeridapara cada entrada valida en una cantidad finita de tiempo

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 3 / 22

Page 4: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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

¿Qué es un algoritmo?

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 4 / 22

Page 5: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 5 / 22

Page 6: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 dosenteros 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 dela igualdad gcd(m,n) = gcd(n,m m«od n) hasta que el segundonumero sea 0, lo cual hace el problema trivial

Ejemplo: gcd(60, 24) = gcd(24, 12) = gcd(12, 0) = 12

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 6 / 22

Page 7: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

Introducción al Análisis y Diseño de Algoritmos Ejemplo 1: Algoritmo de Euclides

Ejemplo 1: Algoritmo de Euclides

Descripción 11 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 2while n 6= 0 do

r← m m«od nm← nn← r

return m

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 7 / 22

Page 8: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 8 / 22

Page 9: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 comunesen 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 esel número máximo de comparaciones que realiza su algoritmo enfunció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íricodel mejor y peor caso.

Fecha de entrega: lunes 15 de enero antes de las 8 AM

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 9 / 22

Page 10: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 10 / 22

Page 11: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 dealgoritmos importantes de diferentes áreas de la computación,además es necesario poder diseñar nuevos algoritmos y analizarsu eficiencia

Teóricas: la algorítmica ha sido reconocida como la piedra angularde las ciencias computacionales.

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 11 / 22

Page 12: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 computerscience. It is the core of computer science, and, in allfairness, can be said to be relevant to most of science,business, and technology.

Otras razones: el software no existiría sin algoritmos, estudiaralgoritmos permite desarrollar habilidades analíticas para resolverproblemas

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 12 / 22

Page 13: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 13 / 22

Page 14: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 14 / 22

Page 15: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 15 / 22

Page 16: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 16 / 22

Page 17: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 17 / 22

Page 18: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 tiempoEficiencia en espacio

¿Existe un mejor algoritmo?Límites inferioresOptimalidad

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 18 / 22

Page 19: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 19 / 22

Page 20: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 20 / 22

Page 21: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 EuclidesOtros ejemplos¿Por qué es necesario estudiar algoritmos?Dos puntos importantes relacionados con algoritmosEstrategias para diseñar algoritmosAnálisis de algoritmosTipos importantes de problemasEstructuras de datos fundamentales

Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 21 / 22

Page 22: Introducción al Análisis y Diseño de Algoritmosertello/algorithms/... · 2018-03-08 · Introducción al Análisis y Diseño de Algoritmos Otros ejemplos Otros ejemplos, Tarea

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 RODRÍGUEZ T. (CINVESTAV) Introducción al ADA 10 de enero de 2018 22 / 22