• No se han encontrado resultados

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
22
0
0

Texto completo

(1)

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

Dr. Eduardo A. R ODRÍGUEZ T ELLO

CINVESTAV-Tamaulipas

10 de enero de 2018

(2)

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

(3)

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

(4)

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

¿Qué es un algoritmo?

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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.

(12)

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

(13)

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

(14)

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?

(15)

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

(16)

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)

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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

(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

Referencias

Documento similar

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

(2022) mediante el análisis de diferentes atributos médicos de los datos de Mendeley predicen la diabetes utilizando cinco tipos diferentes de algoritmos de Machine Learning,

De esta forma, el marco teórico obtenido es aplicable tanto para analizar sistemas adaptativos complejos (biológicos y artificiales) como para diseñar nuevos algoritmos de

se muestra el estado inicial de un tablero, el cual contiene en la primer casilla (de izquierda a derecha) una bellota, representada por un asterisco (*), y a la ardilla,

Estos algoritmos se encuentran programados en Matlab, por lo que el primer objetivo de este trabajo es migrar estos algoritmos a un lenguaje en el cual puedan

He utilizado los algoritmos holandeses porque me parecen una forma sencilla y visual de poder hacer las operaciones matemáticas más fácilmente.. Método del

Evaluaciones para ingresar a empresas BigTech utilizan problemas estilo competencia. Google Code

En este caso, se presentó un análisis cuantitativo de dos algoritmos que controlan la navegación de un robot móvil simulado, se comparó el desempeño de los algoritmos con