Вы находитесь на странице: 1из 5

SPTIMA UNIDAD - ANLISIS DE ALGORITMOS

INTRODUCCIN
La resolucin prctica de un problema exige por una parte un algoritmo
o mtodo de resolucin y por otra un programa o codificacin de aquel
en un ordenador real. Ambos componentes tienen su importancia; pero
la del algoritmo es absolutamente esencial, mientras que la codificacin
puede muchas veces pasar a nivel de ancdota.
A efectos prcticos o ingenieriles, nos deben preocupar los recursos
fsicos necesarios para que un programa se ejecute. Aunque puede
haber muchos parmetros, los ms usuales son el tiempo de ejecucin y
la cantidad de memoria (espacio). Ocurre con frecuencia que ambos
parmetros estn fijados por otras razones y se plantea la pregunta
inversa: cul es el tamao del mayor problema que puedo resolver en T
segundos y/o con M bytes de memoria? En lo que sigue nos centraremos
casi siempre en el parmetro tiempo de ejecucin, si bien las ideas
desarrolladas son fcilmente aplicables a otro tipo de recursos.
Para cada problema determinaremos una medida N de su tamao (por
nmero de datos) e intentaremos hallar respuestas en funcin de dicho
N. El concepto exacto que mide N depende de la naturaleza del
problema. As, para un vector se suele utilizar como N su longitud; para
una matriz, el nmero de elementos que la componen; para un grafo,
puede ser el nmero de nodos (a veces es ms importante considerar el
nmero de arcos, dependiendo del tipo de problema a resolver); en un
fichero se suele usar el nmero de registros, etc. Es imposible dar una
regla general, pues cada problema tiene su propia lgica de coste.
ANLISIS DE ALGORITMOS
v El anlisis de algoritmos estima el consumo de recursos de un algoritmo.
v Esto nos permite comparar los costos relativos de dos o ms algoritmos
para resolver el mismo problema.
v El anlisis de algoritmos tambin les da una herramienta a los
diseadores de algoritmos para estimar si una solucin propuesta es
probable que satisfaga las restricciones de recursos de un problema.
v El concepto de razn de crecimiento, es la razn a la cual el costo de
un algoritmo crece conforme el tamao de la entrada crece.

7.1 COMPLEJIDAD EN TIEMPO


TIEMPO DE EJECUCIN

El tiempo de Ejecucin de un programa se mide en funcin de N, lo


que designaremos como T(N).

Esta funcin se puede calcular fsicamente ejecutando el programa


acompaados de un reloj, o calcularse directamente sobre el cdigo,
contando las instrucciones a ser ejecutadas y multiplicando por el
tiempo requerido por cada instruccin. As, un trozo sencillo de cdigo
como:
S1;
for(x = 0; x < N; x++)
S2;
Demanda: T(N) = t1 + t2 * N
Donde t1 es el tiempo que lleva ejecutar la serie S1 de sentencias, y t2
es el que lleva la serie S2.

Habitualmente todos los algoritmos contienen alguna sentencia


condicional o selectiva, haciendo que las sentencias ejecutadas
dependan de la condicin lgica, esto hace que aparezca ms de
un valor para T(N), es por ello que debemos hablar de un rango
de valores:
Tmin(N) T(N) Tmax(N)

Estos extremos son llamados "el peor caso" y "el mejor caso" y entre
ambos se puede hallar "el caso promedio" o el ms frecuente, siendo
este el ms difcil de estudiar; nos centraremos en el "el peor caso" por
ser de fcil clculo y se acerca a "el caso promedio", brindndonos una
medida pesimista pero fiable.

Toda funcin T(N) encierra referencias al parmetro N, y a una serie


de constantes Ti dependientes de factores externos al algoritmo. Se
tratar de analizar los algoritmos dndoles autonoma frente a estos
factores externos, buscando estimaciones generales ampliamente
vlidas, a pesar de ser demostraciones tericas.

7.2 COMPLEJIDAD EN ESPACIO.


Es la memoria que utiliza un programa para su ejecucin; es decir el
espacio de memoria que ocupan todas las variables propias del
algoritmo.
Esta se divide en Memoria Esttica y Memoria Dinmica.
v Memoria esttica. Para calcularla se suma de memoria que ocupan las
variables declaradas en el algoritmo.
v Memoria dinmica. Su clculo no es tan simple ya que depende de cada
ejecucin del algoritmo.
Ejemplo: algoritmo de bsqueda en arboles.
Funcin bsqueda _arboles.
Devuelve una solucin o fallo.
Inicializa un rbol de bsqueda con estado inicial.
Bucle hacer
Si no hay candidatos para expandir.
Entonces devolver fallo.
En otro caso escoger nodo para expandir.
Si el nodo es el objetivo.
Entonces devolver solucin.
En otro caso expandir nodo.
M = profundidad mxima del rbol (puede ser infinita)
D = profundidad de la mejor solucin (menor costo)
B = factor de ramificacin (nmero mximo de sucesiones) = 10

Depth Nodes Time Memory


0
1

1 milisecond

111

.1 second

11111

11 second

10 ^ 6

18 minutos

100 bytes
11 Kb
1 Mb
111 Mb

7.3 EFICIENCIA DE LOS ALGORITMOS.

La Eficiencia de un algoritmo es comprobar que dicho anlisis debe ser


emprico y terico, en cualquiera de los diferentes mtodos de los
algoritmos de ordenamiento, los cuales son:
Bubble sort
Selection sort
Insertion sort
Shell sort
Ha sort
Merge sort
Quick sort
Por qu estudiar la eficiencia de los algoritmos?
Porque nos sirve para establecer la frontera entre lo factible y lo
imposible. Ejemplo: Algoritmos de ordenacin Observacin El tiempo de
ejecucin depende del tamao del conjunto de datos.
Objetivo Parametrizar el tiempo de ejecucin en funcin del tamao del
conjunto de datos, intentando buscar una cota superior que nos sirva de
garanta.
Tipos de Anlisis
Peor de los Casos: Se corresponde con el peor tiempo. T(n) es el
tiempo mximo sobre las entradas.
Mejor Caso: Lmite inferior en el tiempo. T(n) es el menor tiempo de
todas las posibles entradas
Caso Promedio: Es el tiempo medio esperado sobre todas las posibles
entradas de tamao n. Se considera una distribucin de probabilidad
sobre las entradas.
Anlisis Probabilstico: Es el tiempo de ejecucin esperado para una
entrada aleatoria. Se expresa tanto el tiempo de ejecucin y la
probabilidad de obtenerlo
. Anlisis Amortizado: El tiempo que se obtiene para un conjunto de
ejecuciones, dividido por el nmero de ejecuciones.

CONCLUSIONES
Antes de realizar un programa conviene elegir un buen algoritmo, donde
por bueno entendemos que utilice pocos recursos, siendo usualmente
los ms importantes el tiempo que lleve ejecutarse y la cantidad de
espacio en memoria que requiera. Es engaoso pensar que todos los
algoritmos son "ms o menos iguales" y confiar en nuestra habilidad
como programadores para convertir un mal algoritmo en un producto
eficaz. Es asimismo engaoso confiar en la creciente potencia de las
mquinas y el abaratamiento de las mismas como remedio de todos los
problemas que puedan aparecer.
En el anlisis de algoritmos se considera usualmente el caso peor, si
bien a veces conviene analizar igualmente el caso mejor y hacer alguna
estimacin sobre un caso promedio. Para independizarse de factores
coyunturales tales como el lenguaje de programacin, la habilidad del
codificador, la mquina soporte, etc. se suele trabajar con un clculo
asinttico que indica cmo se comporta el algoritmo para datos muy
grandes y salvo algn coeficiente multiplicativo. Para problemas
pequeos es cierto que casi todos los algoritmos son "ms o menos
iguales", primando otros aspectos como esfuerzo de codificacin,
legibilidad, etc. Los rdenes de complejidad slo son importantes para
grandes problemas.

Вам также может понравиться