Está en la página 1de 7

INTRODUCCIN

En ingeniera de sistemas computacionales, una de las preocupaciones ms


frecuentes es lo relacionado con 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).

En el presente trabajo nos centraremos en el parmetro tiempo de ejecucin, en


donde se determina un tamao de entrada N y una respuesta de salida como
funcin de N. As mismo, se establecen los diferentes rdenes de complejidad que
se han de comparar con el fin de escoger el algoritmo ms adecuado en base a su
eficiencia en tiempo de ejecucin.

COMPLEJIDAD EN LOS ALGORITMOS

Una vez que se dispone de un algoritmo que funciona correctamente, es necesario


definir criterios para medir su rendimiento o comportamiento. Estos criterios se
centran principalmente en su simplicidad y en el uso eficiente de los recursos.

A menudo se piensa que un algoritmo sencillo no es muy eficiente. Sin embargo,


la sencillez es una caracterstica muy interesante a la hora de disear un
algoritmo, pues facilita su verificacin, el estudio de su eficiencia y su
mantenimiento. De ah que muchas veces prime la simplicidad y legibilidad del
cdigo frente a alternativas ms crpticas y eficientes del algoritmo. Este hecho se
pondr de manifiesto en varios de los ejemplos mostrados a lo largo de este libro,
en donde profundizaremos ms en este compromiso.

Respecto al uso eficiente de los recursos, ste suele medirse en funcin de dos
parmetros: el espacio (complejidad espacial), es decir, el espacio en memoria
que utiliza, y el tiempo (complejidad temporal o tiempo de ejecucin), lo que tarda
en ejecutarse. Ambos representan los costes que supone encontrar la solucin al
problema planteado mediante un algoritmo. Dichos parmetros van a servir
adems para comparar algoritmos entre s, permitiendo determinar el ms
adecuado de entre varios que solucionan un mismo problema.

Este anlisis se har sobre la complejidad temporal, donde en cada uno de los
problemas determinaremos una medida N, llamada tamao de la entrada o
nmero de datos a procesar por el programa, y la respuesta ser funcin de dicha
N.

La cuantificacin de N depender de la naturaleza del problema, si hablamos de


un array se puede ver a N como el rango del array, para una matriz, el nmero de
elementos que la componen; para un grafo, podra ser el nmero de nodos o arcos
que lo arman, etc.

Tiempo de Ejecucin

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


designaremos como T(N). De acuerdo al cdigo se puede calcular contando las
instrucciones a ser ejecutadas y multiplicando por el tiempo requerido por cada
instruccin. Por ejemplo, para calcular T (N) del siguiente trozo de cdigo se hara
as:
S1;
For (x = 0; x < N; x++)
S2;
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.

En el caso de que los algoritmos contengan alguna sentencia condicional o


selectiva, se debe buscar el caso promedio que se puede obtener mediante la
siguiente ecuacin Tmin (N) T (N) Tmax (N), que son los extremos a
considerar en el problema, pero si se considera que el peor caso se acerca
tericamente al caso promedio sera preferible utilizarlo por ser de ms fcil
calculo.

Asntotas

Si se da el caso de que N tiende al infinito estamos hablando de que se presenta


una complejidad con comportamiento asinttico. De este modo, a cada conjunto
de funciones que comparten un mismo comportamiento asinttico se les denomina
como orden de complejidad. A estos conjuntos se les denomina O, y estos se
organizan en familias a la que se les designa con O ( ).

As por ejemplo, si existen diferentes funciones (g(n), para cada uno de estos
conjuntos se suele identificar un miembro f(n) que se utiliza como representante
de la familia, hablndose del conjunto de funciones g que son del orden de f(n),
denotndose como: g IN O (f(n)), es decir, g est incluido en f (n).

El conjunto O (f(n)) es el de las funciones de orden de f(n), que se define como O


(f(n))= {g: INTEGER -> REAL+ tales que existen las constantes k y N0 tales que
para todo N > N0, g(N) <= k*f(N) }, lo cual quiere decir que O(f(n)) est formado
por aquellas funciones g(n) que crecen a un ritmo menor o igual que el de f(n).

La notacin O ( ) ignora los factores constantes, desconoce si se hace una mejor o


peor implementacin del algoritmo, adems de ser independiente de los datos de
entrada del algoritmo. Es decir, la utilidad de aplicar esta notacin a un algoritmo
es encontrar el lmite superior de su tiempo de ejecucin, es decir, el peor caso.
Por ejemplo si se quiere comprobar que la funcin g(n) = 3n3 + 2n2, es de O (n3),
se aplicara la definicin de la siguiente manera:
g (n)= 3n3 + 2n2
f (n)= n3
n0= 0
k=5
n

g( )

kf()

32

40

99

135

Orden de complejidad

Si O (f(n)) define un orden de complejidad entonces se puede representar esta


orden en funcin f (n) de la siguiente manera:

O (1) orden constante. Aparece en instrucciones que se ejecutan solo una vez.
O (log n) orden logartmico. Aparece en algoritmos con iteracin o recursin no
estructural como el caso de la bsqueda binaria.
O (n) orden lineal. Aparece en la evaluacin de bucles simples.
O (n log n). Complejidad cuasi-lineal. Se encuentra en algoritmos de tipo divide y
vencers como el mtodo de ordenacin Quicksort.
O (n2) orden cuadrtico. Aparece en bucles o ciclos doblemente anidados.
O (n3) orden cbico. Aparece en bucles con triple anidacin.
O (na) orden polinomial (a > 2). A medida que crece, la eficiencia se reduce.
O (an) orden exponencial (a > 2). En la prctica tienen mala eficiencia.
O (n!) orden factorial. En la prctica tienen mala eficiencia.

Un algoritmo es eficiente si tiene un orden de complejidad bajo y con l se puede


tratar grandes volumen de datos. As tenemos que:

Es muy eficiente si su complejidad es de orden log n.

Es eficiente si su complejidad es de orden na.

Es ineficiente si su complejidad es de orden 2n.

Por lo tanto, se considera que un problema es tratable si existe un algoritmo que lo


resuelve con complejidad menor que 2n, y que es intratable o no tiene solucin en
caso contrario.

CONCLUSIN

En un sentido amplio, dado un problema y un dispositivo donde resolverlo, es


necesario proporcionar un mtodo preciso que lo resuelva, adecuado al
dispositivo,
Este mtodo se denomina algoritmo. En esta tarea no solo se debe tomar en
cuenta el diseo del algoritmo, ya que adems de ello se debe considerar su
eficiencia.

El diseo del algoritmo se refiere a la bsqueda de mtodos o procedimientos,


secuencias finitas de instrucciones adecuadas al dispositivo que disponemos y
que permiten resolver el problema mientras que la eficiencia del algoritmo nos
permite medir de alguna forma el coste (en tiempo y recursos) que se consume
para encontrar la solucin.

Al comparar distintos algoritmos que resuelven un mismo problema tomando en


cuenta el orden de complejidad y su tiempo de ejecucin podemos tomar la
decisin ms adecuada en cuanto a cul de ellos utilizar en una determinada tarea
de cmputo.

BIBLIOGRAFA

Teora de la complejidad algortmica. En:


http://www.monografias.com/trabajos27/complejidad-algoritmica/complejidadalgoritmica.shtml#estimac.

También podría gustarte