Complejidad de los Algoritmos

20
Análisis de Algoritmos

description

Complejidad de los algoritmos

Transcript of Complejidad de los Algoritmos

Page 1: Complejidad de los Algoritmos

Análisis de Algoritmos

Page 3: Complejidad de los Algoritmos

La complejidad de un algoritmo se expresa en función del

tamaño del problema que se desea resolver.

Page 4: Complejidad de los Algoritmos

La complejidad de un algoritmo

es una medida de la cantidad de

recursos (tiempo y espacio)

que un algoritmo necesita.

[email protected]

Page 5: Complejidad de los Algoritmos

La complejidad es la cantidad

de memoria requerida para su ejecución.

Si el recurso es ESPACIO

pila

rpar

dohi

dalg

o@gm

ail.c

om

Page 6: Complejidad de los Algoritmos

La complejidad se asocia a la cantidad de tiempo que necesita el

algoritmo para la ejecución de operaciones.

Si el recurso es TIEMPO

pilarpardohidalgo@gm

ail.com

Page 7: Complejidad de los Algoritmos

La complejidad del algoritmo está asociada a las estructuras de datos usadas su implementación

Si el recurso es ESPACIO

Internas

Externas

Estructura

de Datos

- Vectores

- Matriz Estáticas

Dinámicas

Bases de

Datos

Archivos

Lineales

No Lineales

- Pilas

- Listas

- Colas

- Árboles

- Grafos

[email protected]

Page 8: Complejidad de los Algoritmos

Cada algoritmo se comporta de modo diferente de acuerdo a

cómo se le entregue la información (variables de entrada)

[email protected]

Page 9: Complejidad de los Algoritmos

Por eso es conveniente estudiar

su comportamiento en casos extremos.

[Datos muy ordenados o muy desordenados]

[email protected]

Page 10: Complejidad de los Algoritmos

Este análisis indica cuántas operaciones tienen que realizar los

algoritmos para GARANTIZAR que producirán una SOLUCION.

Complejidad del Peor Caso

Page 11: Complejidad de los Algoritmos

Se busca el promedio de operaciones realizadas para solucionar un problema considerando todas las

posibles entradas con un tamaño determinado.

Complejidad del Caso Promedio

[email protected]

Page 12: Complejidad de los Algoritmos

El interés principal del análisis de algoritmos radica en saber cómo

crece el

Tiempo de Ejecución

cuando el tamaño de la entrada crece , la función para medir esa

complejidad se denota como T(n).

Esta función se puede medir físicamente ejecutando

el programa, calcularse sobre el código contando

instrucciones a ejecutar y multiplicando por el tiempo requerido por cada instrucción

Page 14: Complejidad de los Algoritmos

Necesitamos analizar la potencia de los algoritmos

independientemente de la potencia de la máquina que los ejecute e incluso de la habilidad del programador que los codifique.

Page 15: Complejidad de los Algoritmos

Casi siempre los problemas pequeños se pueden resolver de

cualquier forma.

Nos interesa entonces el análisis especialmente cuando el algoritmo se aplica a grandes problemas.

Page 16: Complejidad de los Algoritmos

Las consideraciones anteriores nos llevan a estudiar el

comportamiento de un algoritmo cuando se fuerza el tamaño del

problema al que se aplica.

Matemáticamente hablando es cuando

N tiende a Infinito

Es decir, su Comportamiento

Asintótico.

[email protected]

Page 17: Complejidad de los Algoritmos

Se denomina “asintótica” porque analiza el comportamiento de las

funciones en base a su tasa de crecimiento.

La notación asintótica se describe por medio de una función cuyo

dominio es los números naturales N , estimado a partir de tiempo de

ejecución o de espacio de memoria de algoritmos en base a la

longitud de la entrada. La complejidad del algoritmo se denota según

la notación Big-O.

Se consideran las funciones asintóticamente no negativas.

Page 18: Complejidad de los Algoritmos

Lo que vamos a intentar es identificar "familias" de funciones, usando como criterio de agrupación su

comportamiento asintótico.

A un conjunto de funciones que comparten un mismo

comportamiento asintótico le denominaremos un

orden de complejidad.

Habitualmente estos conjuntos se denominan O existiendo una infinidad de ellos.

Page 19: Complejidad de los Algoritmos

Complejidad Terminología

O(1) Complejidad constante

O(n2) Complejidad cuadrática

O(log n) Complejidad logarítmica

O(n) Complejidad lineal

O(n log n) Complejidad casi-lineal

O(n^b) Complejidad polinómica

O(b^n) Complejidad exponencial

O(n!) Complejidad factorial

Page 20: Complejidad de los Algoritmos

Talla = Tamaño del problema