Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone...

29
Análisis de Algoritmo Cecilia Laborde González [email protected]

Transcript of Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone...

Page 1: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de Algoritmo

Cecilia Laborde González

[email protected]

Page 2: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Objetivos

1. Profundizar en la aplicación de técnicas para el análisis de la eficiencia entiempo y espacio de un algoritmo.

2. Aplicar técnicas para el análisis de eficiencia de algoritmos recursivos.

3. Aplicar una técnica de diseño de algoritmos adecuada al problema aresolver.

4. Establecer las bases teóricas que permitan comprender una tipificación deproblemas clásicos en las ciencias de la computación y la ingenieríainformática.

5. Conocer acerca de la existencia de problemas intratables e insolubles.

Page 3: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad I EFICIENCIA DE ALGORITMOS (16)

1. Eficiencia de los algoritmos

2. Medidas de eficiencia

• Medidas de eficiencia de algoritmos.

• Medidas simplificadas de eficiencia

3. Costos de un algoritmo

4. Orden de magnitud

5. Análisis de “peor caso”, “caso medio” y “mejor caso”.

Page 4: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad II COMPLEJIDAD COMPUTACIONAL (8)

1. Algoritmos y complejidad

2. Introducción a la NP-completitud

• Las clases P y NP

• Problemas NP-completos

• Problemas NP-difíciles

3. Problemas de decisión y optimización

Page 5: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad III ANALISIS de ALGORITMO (20)

1. Tiempo de ejecución

2. Notación asintótica

• Notación “orden de”: notación O

• Órdenes de complejidad

• Operaciones sobre notación asintótica

3. Análisis de algoritmos

• Análisis de algoritmos no recursivos

• Análisis de algoritmos recursivos

• Algoritmos recursivos y ecuaciones de recurrencia

Page 6: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad III ANALISIS de ALGORITMO (20)

4. Ecuaciones de recurrencia

• Recurrencias homogéneas y no homogéneas

• Resolución de recurrencias

• Cambios de variable

• Teorema maestro de recurrencias del tipo divide y conquista

5. Algoritmos de búsqueda

• Búsqueda secuencial

• Búsqueda por árboles binarios

6. Algoritmos de ordenamiento

• Ordenamiento por mezcla

• Ordenamiento quicksort

Page 7: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad IV TÉCNICAS CLÁSICAS DE CONSTRUCCIÓN DE ALGORITMOS(28)

1. Fundamentos para la construcción de algoritmos

2. Algoritmos voraces (Greedy)

3. Características generales de los algoritmos voraces

• El problema de la mochila

• El problema de cambio de mone

• Aplicaciones en grafos

4. Divide y conquista

• Algunos esquemas basados en divide y conquista

• Multiplicación de enteros grandes

• Multiplicación de matrices (algoritmo de Strassen)

• Otras aplicaciones del esquema divide y conquista

Page 8: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Contenidos

Unidad IV TÉCNICAS CLÁSICAS E CONSTRUCCIÓN DE ALGORITMOS(28)

5. Programación dinámica

• Características generales de la programación dinámica

• Ejemplos sencillos de programación dinámica

4. Exploración de grafos

• Backtraking

• Branco and Bound

5. Algoritmos heurísticos

• Heurística

• Algoritmos heurísticos

Page 9: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Evaluaciones

Septiembre, primera evaluación.

Noviembre, segunda evaluación

Diciembre, Tercera evaluación, entrega de trabajo

Page 10: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

¿ QUE ES UN ALGORITMO?

Podríamos definirlo como un:

CONJUNTO ORDENADO Y FINITO DE INSTRUCCIONES QUE PERMITEN ENCONTRAR LA SOLUCION DE UN DETERMINADO PROBLEMA

Page 11: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

CARACTERISTICAS DE

UN ALGORITMO

Un algoritmo debe ser:

PRECISO FINITO DEFINIDO

Es decir, cada instrucción debe indicar claramente lo que se tiene que hacer.

Es decir, debe tener un número limitado de pasos.

Es decir, debe producir los mismos resultados para las mismas condiciones de entrada.

Page 12: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

¿COMO REPRESENTAMOS LOS

ALGORITMOS ?

Se pueden representar mediante DIAGRAMAS o TEXTO

TEXTO

Los algoritmos se pueden representar mediante FRASES que representan los PROCEDIMIENTOS que dan la SOLUCIÓN al PROBLEMA.

LOS DIAGRAMAS

Representan GRAFICAMENTE las ACTIVIDADESque conforman un PROCESO.

Los diagramas son la representación de la SOLUCIÓNde un PROBLEMA.

Proceso1

inicio

fin

Proceso2

Proceso3

Page 13: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

EJEMPLO DE

DIAGRAMAS DE FLUJO

Proceso1

inicio

fin

Proceso2

Proceso3

Page 14: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Símbolos

• LINEAS DE FLUJO O FLECHAS

Muestran la dirección del flujo de datos o secuencia de las instrucciones.

• TERMINAL / ECLIPSE

Indican el comienzo o final de cadamódulo.

Start

End/Stop/Exit

Page 15: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

• RECTANGULO / PROCESO

Indica procesamiento como cálculos y abrir y cerrar

archivos.

• PARALELOGRAMO

Indica input y output de la memoria del

computador.

• IMPRESION DE DOCUMENTO

Representa la impresión de datos (Normalmente de respuesta)

Símbolos

Page 16: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

• DIAMANTE

Indica decisión. Tiene dos salidasdependiendo si la decisión escierta o falsa.

• PROCESO DE UN

MODULO

Implica que se hará un procesoexterno o subtarea.

Símbolos

Page 17: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

• POLIGONO / PREPARACION

Representa las condiciones de un grupo de procesos que se repiten automáticamente utilizando un contador.

Counter

A

S

B

Símbolos

A es el valor inicial del contador Counter.

S es el incremento del contador.

B es el límite hasta donde debe llegar el contador.

Page 18: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

• CONECTOR EN LA PAGINA

Se utiliza para conectar secciones del diagramade flujo en una misma página.

• CONECTOR FUERA DE LA PAGINA

Conector que une dos partes de diagrama que no caben en una sola página.

• Ambos deben utilizarse lo menos posible.

Símbolos

Page 19: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

REGLAS PARA DIBUJAR

DIAGRAMAS DE FLUJO

Las instrucciones deben ser escritas dentro de los símbolos.

Si tiene que hacer alguna anotación o comentario, hágalo al lado del símbolo.

Un diagrama de flujo siempre comienza arriba en la página y fluye hacia abajo.

Si necesita más de una página dibuje por columnas y utilice conectores.

Utilice algún tipo de software para dibujar un DDF.

Haga los símbolos lo suficientemente grandes como para que lo que escriba en ellos sea fácil de leer.

Page 20: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Freir un Huevo

Descripción:

Este diagrama de flujo describe detalladamente como freir un huevo.

Inicio

Encender Fósforo

Huevo, fósforo cocina, paila, aceite

fin

Encender cocinacon fósforo

Colocar paila sobre cocina

Agregar aceite a la paila

1

1

Abrir huevo

Vertir huevoen la paila

Esperar a que se fría

EJEMPLO PRACTICO

Page 21: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Áreas de estudio

¿Cómo construir algoritmos?

Técnicas de diseño

¿Cómo expresar algoritmos?

Enfoques de los lenguajes de programación

¿Cómo validar algoritmos?

Verificación formal

¿Cómo analizar algoritmos?

Complejidad computacional, eficiencia, legibilidad,usabilidad, etc...

Page 22: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Si se tuvieran 2 programas que hacen lo mismo, ¿cómo se podríancomparar?

1. Eficiencia:

• Tiempo de ejecución

• Uso de espacios de memoria

2. Facilidad de lectura, mantenimiento, rapidez paracodificarlo.

Page 23: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Ejemplo, tiempo

1. Aplicaciones informáticas que trabajan “en tiempo real”:requieren que los cálculos se realicen en el menor tiempoposible.

2. Aplicaciones que manejan un gran volumen de información: sino se tratan adecuadamente pueden necesitar tiemposimpracticables.

Page 24: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Una Leyenda

Mucho tiempo atrás, el visir Sissa Ben Dahir inventó el juego del ajedrez para elrey Shirham de la India. El rey ofreció a Sissa la posibilidad de elegir su propiarecompensa. Sissa le dijo al rey que podía recompensarle en trigo, con unacantidad equivalente a la cosecha de trigo en su reino de dos años, o bien conuna cantidad de trigo que se calcularía de la siguiente forma:

• un grano de trigo en la primera casilla de un tablero de ajedrez,• más dos granos de trigo en la segunda casilla,• más cuatro granos de trigo en la tercera casilla,• y así sucesivamente, duplicando el número de granos en cada casilla, hasta

llegar a la última casilla.

El rey pensó que la primera posibilidad era demasiado cara mientras que lasegunda medida, además en simples granos de trigo, daba la impresión deserle claramente favorable.

Page 25: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Page 26: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Page 27: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

Page 28: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

La técnica que se utilizaba en los primeros años de la programación paracomparar la eficiencia de distintos algoritmos consistía en ejecutarlos paradatos diferentes y medir el tiempo consumido.

Dado que las máquinas y los lenguajes eran dispares, y que el tiempo deejecución depende no solo del tamaño sino también del contenido de losdatos, resultaba muy difícil comparar tales resultados.

El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos aDaniel Goldenberg del MIT. En 1952 realizó un análisis matemático delnúmero de comparaciones necesarias, en el mejor y en el peor caso, decinco algoritmos distintos de ordenación.

La tesis doctoral de Howard B. Demuth de la Universidad de Stanfordestableció en 1956 las bases de lo que hoy llamamos análisis de lacomplejidad de los algoritmos.

Page 29: Análisis de Algoritmo · •El problema de la mochila •El problema de cambio de mone •Aplicaciones en grafos 4. Divide y conquista •Algunos esquemas basados en divide y conquista

Análisis de algoritmos

La técnica que se utilizaba en los primeros años de la programación paracomparar la eficiencia de distintos algoritmos consistía en ejecutarlos paradatos diferentes y medir el tiempo consumido.

Dado que las máquinas y los lenguajes eran dispares, y que el tiempo deejecución depende no solo del tamaño sino también del contenido de losdatos, resultaba muy difícil comparar tales resultados.

El primer estudio serio sobre la eficiencia de los algoritmos se lo debemos aDaniel Goldenberg del MIT. En 1952 realizó un análisis matemático delnúmero de comparaciones necesarias, en el mejor y en el peor caso, decinco algoritmos distintos de ordenación.

La tesis doctoral de Howard B. Demuth de la Universidad de Stanfordestableció en 1956 las bases de lo que hoy llamamos análisis de lacomplejidad de los algoritmos.