Complejidad de los Algoritmos

Post on 04-Jul-2015

11.371 views 0 download

description

Complejidad de los algoritmos

Transcript of Complejidad de los Algoritmos

Análisis de Algoritmos

pilarpardohidalgo@gmail.com

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

tamaño del problema que se desea resolver.

La complejidad de un algoritmo

es una medida de la cantidad de

recursos (tiempo y espacio)

que un algoritmo necesita.

pilarpardohidalgo@gmail.com

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

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

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

pilarpardohidalgo@gmail.com

Cada algoritmo se comporta de modo diferente de acuerdo a

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

pilarpardohidalgo@gmail.com

Por eso es conveniente estudiar

su comportamiento en casos extremos.

[Datos muy ordenados o muy desordenados]

pilarpardohidalgo@gmail.com

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

algoritmos para GARANTIZAR que producirán una SOLUCION.

Complejidad del Peor Caso

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

pilarpardohidalgo@gmail.com

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

pilarpardohidalgo@gmail.com

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.

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.

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.

pilarpardohidalgo@gmail.com

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.

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.

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

Talla = Tamaño del problema