Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... ·...

28
Estructuras de Datos Y Algoritmos I. Página 0 de 27 Estructuras de Datos y Algoritmos I. Algoritmos.

Transcript of Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... ·...

Page 1: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 0 de 27

Estructuras de Datos y

Algoritmos I.

Algoritmos.

Page 2: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 1 de 27

¿Qué son algoritmos?

• En Matemáticas, un algoritmo se define informalmente como una secuencia de pasos lógicos para realizar ciertos cálculos.

• En Computación, se define más precisamente como un método efectivo, expresado como una lista finita de instrucciones bien definidas para obtener un resultado en un proceso de cómputo.

• En Computación, los algoritmos se implementan generalmente mediante programas escritos en algún lenguaje de programación.

• Se utilizan para muchos fines, como cálculos, procesamiento de datos, lógica autómota, etc.

Page 3: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 2 de 27

Concepto Antiguo.

• El concepto de algoritmo ha existido desde hace siglos.

• Los matemáticos griegos usaron algoritmos para resolver ciertos problemas.

• Dos ejemplos muy conocidos:

– El Algoritmo de Euclides para encontrar el máximo común divisor de dos números.

– La Criba de Eratóstenes para encontrar los números primos menores a cierto número dado.

Page 4: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 3 de 27

Formalización del Concepto.

• La palabra algoritmo proviene del nombre del matemático árabe Muḥammad ibn Mūsā al-Khwārizmī, cuyo nombre latinizado es Algoritmi.

• La formalización moderna del concepto de algoritmo empezó con intentos de resolver el problema de decisión llamado “Entscheidungsproblem” planteado por David Hilbert en 1928.

• Otros intentos de formalización del término algoritmo incluyen las funciones recursivas de Gödel-Herbrand-Kleene de la década de 1930s, los cálculos lambda de Church en 1936, la Formulación 1 de Emil Post en 1936 y las máquinas Turing de Alan Turing de 1936 y 1939.

Page 5: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 4 de 27

Como se expresan los Algoritmos.

• Los algoritmos se pueden expresar con muchos tipos de notaciones por ejemplo:

– Lenguaje natural.

– Pseudocódigo.

– Diagramas de flujo.

– Lenguaje visual Drakon.

– Lenguajes de programación.

– Tablas de control de intérpretes.

Page 6: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 5 de 27

Pasos para Desarrollar un

Algoritmo.

• Definición del problema.

• Desarrollo de un modelo.

• Especificación del algoritmo.

• Diseño del algoritmo.

• Verificación de validez.

• Análisis del algoritmo.

• Implementación.

• Prueba.

• Documentación.

Page 7: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 6 de 27

Heurística.

• En Computación, Heurística (del griego εὑρίσκω, encuentro, descubro) es una técnica diseñada para dos tipos de situaciones:

– Resolver un problema más rápidamente cuando los métodos tradicionales son muy lentos.

– Encontrar una solución aproximada cuando los métodos normales no pueden encontrar la solución exacta.

Page 8: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 7 de 27

Heurística (2).

• La Heurística se implementa mediante la búsqueda de un equilibrio entre optimización, compleción, exactitud o precisión por velocidad.

• Informalmente se puede considerar como un atajo o vía corta a una solución.

Page 9: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 8 de 27

Estrategias para Construir

Algoritmos.

• Avidez (greedy).

• Fuerza Bruta o Búsqueda Exhaustiva

• Top-Down

• Bottom-Up.

• Divide y Vencerás.

• Recursividad.

• Backtrack.

Page 10: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 9 de 27

Avidez.

• Un algoritmo ávido (greedy) es un algoritmo de tipo

heurístico que trata de encontrar una buena solución

para cada paso, con la esperanza de encontrar una

solución global óptima.

• En la mayoría de los casos, una estrategia ávida no

produce una solución óptima pero sin embargo puede

lograr soluciones parciales que se aproximen a una

solución global óptima en un tiempo razonable.

Page 11: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 10 de 27

Ejemplo de Avidez.

• Un ejemplo clásico es el del agente viajero que tiene

que visitar cierto número de ciudades y desea encontrar

la ruta óptima para visitar cierto número de ciudades.

• El algoritmo se implementa mediante la siguiente

heurística: "En cada paso, visita la ciudad no visitada

más cercana a la actual".

• Esta heurística no encuentra la mejor solución pero

termina en un número razonable de casos.

• La solución óptima requiere un número gigantesco de

pasos y resulta demasiado lento.

• Nota. Este es un algoritmo difícil de implementar.

Page 12: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 11 de 27

Búsqueda Exhaustiva o Fuerza

Bruta.

• La estrategia de Fuerza Bruta o Búsqueda Exhaustiva también conocida como "generar y probar", es una técnica muy general que consiste en enumerar todas las posibles opciones de la solución y checar una por una para verificar que cumplen con los requerimientos de la solución.

• Aunque esta estrategia es fácil de implementar y

siempre encuentra la solución (si existe) su costo en

utilización de recursos es proporcional al número de

opciones posibles que en situaciones prácticas lo

pueden hacer muy lento.

Page 13: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 12 de 27

Búsqueda Exhaustiva o Fuerza

Bruta (2).

• Se utiliza normalmente cuando el tamaño del problema

es limitado o cuando se encuentra una heurística que se

puede usar para reducir el conjunto de posibles

soluciones a un tamaño razonable.

• También se utiliza cuando la la simplicidad de la

implementación es más importante que la velocidad.

Page 14: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 13 de 27

Ejemplos de Búsqueda Exhaustiva.

• El algoritmo para encontrar todos los divisores de un número natural n, enumeraría todos los números naturales de 1 a n y verificaría que cada uno de ellos divide a n sin residuo.

• El problema de las ocho reinas es un pasatiempo que consiste en poner ocho reinas en el tablero de ajedrez sin que se amenacen. Un enfoque de fuerza bruta a este problema examinaría todos los arreglos posibles de 8 piezas en un tablero de 64 casillas y por cada arreglo checaría si cada reina puede atacar a cualquiera otra.

Page 15: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 14 de 27

Top-down.

• El enfoque top-down, que también se conoce como diseño por pasos o a veces descomposición consiste esencialmente en dividir en partes un sistema para conocer sus subsistemas (reingeniería inversa).

• En el estilo top-down se formula primero una vista simplificada (overview) del sistema, especificando, pero no detallando los subsistemas de primer nivel que contiene.

• Cada uno de los subsistemas se define a mayor nivel y en ocasiones encontrando y especificando un número mayor subsistemas de menor nivel.

• Este proceso se continúa hasta que el sistema completo se reduce a elementos básicos no divisibles.

• Los modelos top-down se especifican frecuentemente con la ayuda de "cajas negras" que lo hacen más sencillo de manipular.

Page 16: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 15 de 27

Top-down (2).

• El enfoque top-down enfatiza en la planeación y análisis completo del sistema.

• Es inherente a la idea de que no se debe empezar a codificar un programa hasta que se haya alcanzado un buen entendimiento del sistema o al menos de algún subsistema.

• Uno de los mayores beneficios de esta estrategia es la reusabilidad del código.

• Esta estrategia fue promovida en la década de 1970 durante el desarrollo de la programación estructurada.

Page 17: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 16 de 27

Bottom Up.

• El enfoque bottom-up consiste en juntar sistemas más o menos simples elementales para dar lugar a sistemas más complejos, haciendo los sistemas simples en realidad subsistemas del sistema que se quiere construir.

• bottom-up es un tipo de procesamiento de información basado en datos provenientes del ambiente en forma de una percepción.

• En el enfoque bottom up primero se especifican en detalle los elementos básicos del sistema y se relacionan entre ellos para formar subsistemas más grandes y así sucesivamente se van formando subsistemas más complejos hasta llegar a un sistema completo.

• Esta estrategia a menudo recuerda un modelo en base a semillas donde los inicios son pequeños y simples pero eventualmente crecen en complejidad y compleción.

Nota. En psicología se dice que la información entra en los ojos en una dirección (bottom) y se transforma en una imagen en el cerebro que es lo que llamamos la percepción. El resultado de la percepción es trasformado en el cerebro hacia arriba (up) para forma una imagen final de la información

Page 18: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 17 de 27

Divide y Vencerás.

• En Computación, divide and conquer (D&C) es una estrategia de diseño de algoritmos se basa en una idea similar a la recursividad.

• Un algoritmo D&C funciona dividiendo recursivamente (divide) un problema en dos o más subsistemas del mismo tipo hasta que son lo suficientemente simples para ser resueltos directamente.

• A continuación, las soluciones de los subproblemas se combinan para encontrar la solución al problema original (vencerás).

• La comprensión y el diseño de algoritmos D&C es una habilidad compleja que requiere un buen entendimiento de la naturaleza del problema.

Nota. Es similar a la resolución de problemas matemáticos mediante la técnica de inducción matemática.

Page 19: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 18 de 27

Ejemplos de Divide y Vencerás.

• Esta técnica de divide y vencerás es la base para desarrollar algoritmos complejos para diferentes tipos de problemas, como por ejemplo:

– Ordenamientos, quick sort o merge sort.

– Multiplicación de números sumamente grandes, algoritmo de Karatsuba.

– Análisis sintáctico o parsing.

– Transformadas de Fourier discretas.

Page 20: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 19 de 27

Recursividad.

• La Recursividad en Computación, es un método donde la solución

de un problema depende en soluciones de pequeños ejemplares

del mismo problema.

• Es lo contrario a iteración.

• Este enfoque puede ser aplicado a muchos tipos de problemas y es

una de las ideas centrales de la Ciencia de Cómputo.

• La fuerza de la recursividad se basa en la posibilidad de definir un

conjunto infinito de objetos mediante un postulado o serie de

postulados finitos.

• La mayoría de los lenguajes de programación soportan la

recursividad permitiendo que una función se llame a sí misma.

• En general los algoritmos recursivos son menos eficientes que sus

equivalentes iterativos.

Page 21: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 20 de 27

Ejemplos de Recursividad.

• Los ejemplos clásicos son:

– Cálculo del factorial de un número.

– Secuencia de Fibonacci.

Page 22: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 21 de 27

Backtrack.

• Backtrack o Backtracking es una estrategia general de diseño de

algoritmos para encontrar soluciones a problemas computacionales

del tipo de satisfacción de restricciones.

• En este enfoque se construyen candidatos a soluciones y se

abandonan algunas (backtracking) tan pronto como se determina

que un candidato a solución no puede ser una solución válida.

• Desde luego, este enfoque solamente puede ser aplicado a

problemas que admitan el concepto de "candidato a solución

parcial" y que se pueda hacer una prueba más o menos rápida de si

puede o no ser una solución válida.

Page 23: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 22 de 27

Backtrack (2).

• Cuando se puede aplicar es mucho más rápido que la estrategia de

fuerza bruta porque se pueden eliminar rápidamente un buen

número de candidatos a soluciones.

• Backtracking depende de los llamados "procedimientos de caja

negra" definidos por el usuario que definan el problema a resolver,

la naturaleza de los candidatos parciales y la manera de

extenderlos a candidatos completos. Por este motivo se dice que

esta técnica es meta-heurística.

• Esta técnica es la base de los llamados lenguajes de lógica de

programación como Icon, Planner y Prolog.

• El lenguaje de procesamiento de strings SNOBOL (1962) es el

primero que proporcionó una facilidad de backtracking construida.

Page 24: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 23 de 27

Ejemplos de BackTrack

• El ejemplo clásico de backtracking es el problema de las ocho

reinas que ya mencionamos como ejemplo de la estrategia de

fuerza bruta. En el enfoque de backtracking sin embargo, cualquier

solución parcial que contenga dos reinas que se puedan atacar, es

desechada inmediatamente

• Backtracking es una herramienta muy utilizada para pasatiempos

como crucigramas, aritmética verbal, sudoku y varios más.

• Otro ejemplo muy conocido es el problema de arreglar objetos en

una mochila (knapsack problem), y varios otros de análisis

combinatorio.

Page 25: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 24 de 27

Determinación de la velocidad de

los Algoritmos.

• La velocidad de un algoritmo intuitivamente es el tiempo que

toma para ejecutarse.

• Sin embargo, esta medida varía fuertemente porque depende

de muchos factores:

– velocidad del procesador

– lenguaje de programación

– número de procesos ejecutándose en la máquina, etc. etc.

• Por lo tanto, la velocidad absoluta no es útil para estimar

velocidades o comparar la eficiencia de diferentes algoritmos.

Page 26: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 25 de 27

La función O mayúscula (Big O).

• Es una medida teórica de la ejecución de un algoritmo que indica la

velocidad de ejecución en términos del número de elementos a los que se

aplica el algoritmo.

• Se expresa como una función O(N) en donde N es el número de

elementos.

• Se basa en la idea de que las funciones tienen un término dominante que

permite eliminar todos los demás sin variar considerablemente el valor de la

función.

• Así decimos que un algoritmo tiene una velocidad de:

– O(1) cuando no depende del tamaño de la estructura,

– O(N) cuando el tiempo de ejecución se incrementa linealmente dependiendo del

tamaño de la estructura.

– O(N2) cuando el tiempo se incrementa como el cuadrado de N.

– O(log N) cuando se incrementa como el logaritmo de N, etc.

Page 27: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 26 de 27

Ejemplo de funciones Big O.

Page 28: Algoritmos. - profesores.fi-b.unam.mxprofesores.fi-b.unam.mx/adanzg/EDAI/Presentaciones/... · Estructuras de Datos Y Algoritmos I. Página 18 de 27 Ejemplos de Divide y Vencerás.

Estructuras de Datos Y Algoritmos I. Página 27 de 27

La función o minúscula (Little o).

• Es otra medida teórica de la ejecución de un algoritmo que indica la

velocidad de ejecución en términos del número de datos a los que se

aplica.

• Se expresa como una función o(N) en donde N es el número de datos.

• Se basa en la idea de que las funciones en ocasiones se vuelven

insignificantes relativas a otra función cuando n tiende al infinito.

• No se usa tan frecuentemente como la O mayúscula.