analisis de algoritmos - introduccion

30
Análisis de Algoritmos JUAN DAVID PAREJA SOTO @parejajd

Upload: juan-david-pareja-soto

Post on 06-Jul-2015

245 views

Category:

Technology


2 download

DESCRIPTION

Introducción al análisis básico de algoritmos. Herramienta fundamental para el desarrollo de aplicaciones de calidad.

TRANSCRIPT

Page 1: Analisis de algoritmos - Introduccion

Análisis de

AlgoritmosJUAN DAVID PAREJA SOTO

@parejajd

Page 2: Analisis de algoritmos - Introduccion

@parejajd

Temario General (1) Análisis de algoritmos

Conceptos básicos

Análisis de algoritmos iterativos

Comportamiento asintótico de funciones

Análisis de algoritmos recursivos

Técnicas de diseño de algoritmos

Dividir para vencer

Método ávido

Backtrack

Programación dinámica

Problemas NP

Algoritmos no determinísticos

Problemas P, NP duros y NP completos

Técnicas aproximativas

Page 3: Analisis de algoritmos - Introduccion

@parejajd

Metodología (1)

Clases Presenciales

Sábados 10am

Clases Virtuales

Grabadas durante la semana y seguidas el dia de clase normal

Vía Streaming y http://docencia.parejajd.co

4 Ejercicios de Práctica (Programación) 30%

2 Parciales 30% (15% Cada uno)

Asistencia y Participación 10%

Tareas, Talleres, Quiz, etc 30%

Page 4: Analisis de algoritmos - Introduccion

@parejajd

Metodología (2)

Todo será usando Moodle http://docencia.parejajd.co

Los correos si se requieren serán enviados a [email protected]

Page 5: Analisis de algoritmos - Introduccion

@parejajd

Reglas básicas de Clase

Durante la explicación teórica y exposiciones los equipos de

computo deben permanecer apagados (y con la tapa abajo)

Los Dispositivos Celulares y tabletas podrán usarse fuera del aula

Page 7: Analisis de algoritmos - Introduccion

Análisis de

AlgoritmosUNIDAD 1

Page 8: Analisis de algoritmos - Introduccion

@parejajd

Objetivos

Al finalizar la asignatura el alumno será capaz de:

Discernir acerca de las mejores propuestas de solución a una

problemática dada teniendo en cuenta las herramientas que el análisis

de algoritmos ofrece.

Establecer el orden de complejidad, el tiempo promedio de ejecución

y el conteo de instrucciones de un algoritmo.

Seleccionar una estrategia de solución para abordar situaciones

particulares del quehacer profesional

Autoevaluar la funcionalidad de las propuestas de solución y plantear

versiones mejoradas

Page 9: Analisis de algoritmos - Introduccion

@parejajd

¿Qué es un algoritmo?

El termino algoritmo y lo que el significa han sido de gran importancia antiguamente en las matemáticas y durante mediados del siglo anterior y lo que vá del actual para las ciencias de la computación.

Surgio del matemático de Uzbequiztan Mohammed ibn-Musa al-Khwarizmi , quien escribió un par de libros en su época el mas importante de ellos “el arte indio de contar” donde dio las nociones para realizar las operaciones matemáticas básicas siguiendo un proceso

la historia cuenta que se le atribuyo el método indio de conteo numérico y se le empezó a llamar método al-Khwarizmi , lo cual con los años y al llevarse “descuidadamente” termino llamándose algorismi , hoy dia Algoritmo

Page 10: Analisis de algoritmos - Introduccion

@parejajd

¿Qué es un algoritmo?

En la actualidad podemos resumir su significado como conjuntos

de reglas o procedimientos para realizar una o varias tareas.

Page 11: Analisis de algoritmos - Introduccion

@parejajd

¿Todos los problemas son

“solucionables”?

Será posible que todos los problemas existentes puedan

representarse de manera algorítmica, es decir, mediante un

conjunto de pasos o mediante un proceso

Si la respuesta es si, seguramente tendremos problemas que pueden

solucionar mediante varios algoritmos.

Revisemos, los invito a jugar

http://www.uterra.com/juegos/torre_hanoi.php

¿Cuántas formas diferentes de solución encontramos?

¿Cuál fue mas óptima es decir se llevó en menos tiempo?

Page 12: Analisis de algoritmos - Introduccion

@parejajd

¿Todos los problemas son

“solucionables”?

Revisemos otro

http://www.sudoku-online.org/ o

usemos el de la izquierda

Por definición sudoku solo tiene

una solución ¿la encontraste?

Page 13: Analisis de algoritmos - Introduccion

@parejajd

¿Todos los problemas son

“solucionables”?

Como en ciertos problemas (Como las torres de hanoi) es posible

encontrar mas de una solución, es necesario tener en cuenta

algunas condiciones

tiempo de procesador y cantidad de memoria utilizados.

claridad, sencillez y facilidad de implantación, depuración y

mantenimiento.

Page 14: Analisis de algoritmos - Introduccion

@parejajd

Definición Formal de Algoritmo

Un algoritmo es un conjunto finito de instrucciones que

indican cómo resolver un problema

no ambiguas

Efectivas

producen al menos una salida

reciben cero o más entradas

y, para ejecutarse, necesitan una cantidad finita de

recursos.

Page 15: Analisis de algoritmos - Introduccion

@parejajd

Ambiguedad

Hace referencia a que las instrucciones del Algoritmo deben estar

expresadas de manera clara y directa y no son susceptibles a

interpretaciones subjetivas

Page 16: Analisis de algoritmos - Introduccion

@parejajd

Efectividad

Se refiera a que el algoritmo debe responder al problema de

manera exacta

Page 17: Analisis de algoritmos - Introduccion

@parejajd

..Al menos una salida

EL Algoritmo tiene que producir algo que haga entender que su

trabajo a finalizado

Page 18: Analisis de algoritmos - Introduccion

@parejajd

.. Recibir entradas

Aunque no es obligatorio el algoritmo debe ejecutarse con algunas

entradas (parámetros)

Si el algoritmo no recibe entradas, esperaríamos siempre tener la

misma salida

Page 19: Analisis de algoritmos - Introduccion

@parejajd

Cantidad finita de Recursos

Debe tener una terminación

Debe usar los recursos de maquina produntemente

Page 20: Analisis de algoritmos - Introduccion

@parejajd

Proceso computacional

Si una serie de instrucción cumple todas las condiciones anteriores

excepto que posee una cantidad finita de tiempo de ejecución, es

llamado PROCESO COMPUTACIONAL

Ej Sistemas Operativos

Son “aplicaciones” que nunca detienen su funcionamiento

Page 21: Analisis de algoritmos - Introduccion

@parejajd

Consideraciones Adicionales

Si un problema tiene una solución algorítmica, pero dicha solución

lleva demasiado tiempo en su solución, se dice que el problema no

tiene solución computacional

Muchos de los problemas que hace unos años se consideraban sin

solución computacional, hoy en dia ya son solucionables gracias al

poder de computo que se tiene

Page 22: Analisis de algoritmos - Introduccion

@parejajd

Tarea 1 Consulte en Internet

¿Cuál es el algoritmo de solución del problema de las torres de hanoi? Obtenga este algoritmo y ejecútelo contra el juego 3 veces (como soporte al trabajo indique cual es el tiempo que se tardó en cada ejecución)

?Si se necesita ordenar un conjunto de números enteros que algoritmos existen ya desarrollados para hacerlo? Obtenga al menos 3 algoritmos y ejecute la prueba con el siguiente conjunto de datos, cuente con un cronómetro cuando se demora haciendo el proceso y adjunto evidencias del proceso.

Lista 69 32 52 83 39 63 48 26 85 24Tiempo

Metodo 1

Metodo 2

Metodo3

Page 23: Analisis de algoritmos - Introduccion

Complejidad Computacional

Page 24: Analisis de algoritmos - Introduccion

@parejajd

¿Qué es la Complejidad

Computacional?

Es la medida que se utiliza para indicar la cantidad de recursos

computacionales que un algoritmo utiliza o utilizará.

Se expresa mediante:

Donde n es el tamaño del programa

Es una función monótona creciente es decir.

Page 25: Analisis de algoritmos - Introduccion

@parejajd

¿Como medir la Complejidad

Computacional?

Medir la Memoria y la CPU usada es el principal objetivo y para esto

se pueden usar dos enfoques.

Función complejidad espacial.

Expresado en términos de uso de la Memoria (Espacio en RAM)

Función complejidad temporal

Expresado en términos de uso de la CPU (Tiempo de CPU)

Page 26: Analisis de algoritmos - Introduccion

@parejajd

Función complejidad espacial.

Permite realizar una estimación de cuantos espacios de memoria

(RAM) usa el programa, puede en la mayoría de los casos

deducirse u obtenerse de la inspección del Código, así será

necesario examinar dos elementos.

Celdas estáticas

Variables Estáticas, Constantes

Celdas dinámicas

Variables de método, propiedades, atributos

Page 27: Analisis de algoritmos - Introduccion

@parejajd

Función complejidad temporal

Dado que no es posible medir con exactitud cuanto tiempo de

procesador utiliza un programa, vamos a suponer que cada

instrucción del programa utiliza una cantidad constante y similar de

tiempo, de allí que podremos utilizar pseudocódigo o código en

cualquier lenguaje

Page 28: Analisis de algoritmos - Introduccion

@parejajd

Revisemos un ejemplo

Preguntas

¿Cuantas

instrucciones se

ejecutan si

tamañoArreglo=10?

¿Podemos generar

una expresión

matemática para esto’

Page 29: Analisis de algoritmos - Introduccion

@parejajd

Revisemos un ejemplo

Si tamañoArreglo=10

10 Sumas

10 + 2 Asignaciones

10 + 1

10 + 1

10 + 1

10 + 1

Page 30: Analisis de algoritmos - Introduccion

@parejajd

Revisemos un ejemplo

Si tamañoArreglo=10

10 Sumas

10 + 2 Asignaciones

10 + 1

10 + 1

10 + 1

10 + 1

¿Cómo convertimos esto en una

expresión matemática? Tarea