Anda di halaman 1dari 9

Documento de Preparacin de Exposicin

Eficiencia Algortmica

Eric Fabin Herrera Len


Cd. 285843
Jonathan Steven Snchez
Cd.25141057

Presentado a:
Alexei Ochoa

Universidad Nacional de Colombia


Programacin Orientada a Objetos
Bogot D.C, 27 de Noviembre de 2014

Eficiencia Algortmica
Definiciones Preliminares
Defi nicin de Efi ciencia
En trminos productivos la eficiencia est definida como la relacin que
existe entre lo que se produce y los recursos utilizados. De esta forma
podramos definir la eficiencia como la relacin que existe entre lo que
obtenemos, en el caso de la programacin el resultado del programa
que hemos hecho, y los recursos de diferentes tipos que son utilizados
para obtener ese resultado.
Defi nicin de Algoritmo
En programacin, matemticas y otras ciencias se define un algoritmo
como un conjunto ordenado y finito de operaciones que permite hallar la
solucin de un problema.

Eficiencia Algortmica
Un objetivo en el desarrollo de un programa es mantener tan bajo como
sea posible el consumo de los diversos recursos, aprovechndolos de la
mejor manera. Se desea un buen uso, eficiente, de los recursos
disponibles, sin desperdiciarlos. Conviene notar que se trata de un
concepto relativo, no absoluto: un algoritmo es ms eficiente que otro si
realiza las mismas tareas con menos recursos. Si no se dispone de
informacin adicional, no es posible armar que un algoritmo es eficiente
o que no; para justificar que un algoritmo es ineficiente debemos
proporcionar otro ms eficiente que l, y para lo contrario es preciso
poder argumentar de modo convincente que no existe una manera ms
eficiente de desarrollar la misma tarea. Suele ser muy difcil encontrar
argumentos de este ltimo tipo, y frecuentemente es preciso
conformarse con argumentar que un algoritmo es eficiente porque no se
nos ocurre otro ms eficiente que l [1].

Medir la eficiencia de un algoritmo es medir la cantidad de recursos


necesarios para su ejecucin, a efectos de cotejarla con la de otros
algoritmos ya inventados o por inventar. Esta cantidad se puede conocer
para ciertos datos simplemente ejecutando el programa, pero la
informacin que se obtiene es muy escasa: no sabemos qu puede
pasar en otra mquina, con otro compilador, y sobre todo con otros
datos [1].

Consumo de Recursos Factores Determinantes


Una cuestin previa a la de cmo medir el consumo de recursos es
determinar qu factores influyen en l. Es evidente que la mquina en la
que se ejecute el programa influye en el tiempo de ejecucin requerido
pero tambin el lenguaje de programacin empleado, el compilador, las
libreras, etc. Se trata en todos los casos de aspectos de implementacin
y sera conveniente poder librarse de esos detalles finales ya que
nicamente consisten en traducir el algoritmo que hayamos construido a
una implementacin concreta [2].
No hay que perder de vista que tambin pretendemos seleccionar la
mejor alternativa para resolver el problema y no parece demasiado
adecuado implementar, hasta el ltimo detalle, las n soluciones que se
nos hayan ocurrido y, evaluando cada una de ellas en igualdad de
condiciones, escoger la mejor [2].
Para hacer la eleccin ser necesario hacer un buen juego de pruebas y
es probable que haya alternativas que resulten ms ventajosas con
algunas entradas pero sean peores con otras y, entonces, con cul nos
quedamos? No es muy sensato trabajar tanto para acabar escogiendo
una sola opcin. Lo ms adecuado sera poder medir el consumo de
recursos de un algoritmo antes de implementarlo para, por un lado,
independizarlo de las cuestiones de implementacin y, por otro, reducir
el trabajo necesario para hacer la eleccin de la mejor alternativa [2].
En este contexto preimplementacin volvemos a la pregunta de partida
de qu depende entonces el consumo de recursos de un
algoritmo? Fundamentalmente del tamao de los datos que maneja
y de cmo estn organizados esos datos. Utilizaremos el anlisis
matemtico para describir esa dependencia y a partir de ahora
usaremos la expresin coste de un algoritmo o eficiencia de un

algoritmo para referirnos al consumo de recursos, principalmente el


tiempo, del algoritmo analizado [2].

Complejidad de un Algoritmo
El termino complejidad hace referencia tambin a la medicin de los
recursos de un algoritmo. Existen dos tipos de complejidad:

Complejidad temporal: Tiempo que un algoritmo necesita para su


ejecucin.
Complejidad espacial: Recursos espaciales (de almacenamiento)
que un algoritmo consume o necesita para su ejecucin.

Comnmente se estudia la complejidad temporal, ya que esta estar


acorde con la complejidad espacial [3].
Para describir analticamente la eficiencia de un algoritmo usaremos una
funcin t( n) en la que n ser la variable que denota el tamao de los
datos y
coste

t( n)
t( n)

el tiempo empleado en procesar esos datos. La funcin de


estar definida sobre los naturales positivos y tomar

valores en los reales positivos, es decir

+
+ R
.
t ( n) : N

Cotas de Complejidad
El otro factor relevante, la organizacin de los datos, se refiere a que un
algoritmo trabajando con datos diferentes pero del mismo tamao puede
consumir tiempos tambin distintos. Por ejemplo, si nuestro algoritmo ha
de ordenar un vector de tamao n es muy probable que el tiempo
consumido vare en funcin de si el vector llega completamente
ordenado, parcialmente ordenado o totalmente desordenado. Por tanto,
para el mismo valor de n tenemos tiempos distintos y, en ese
caso, cul es la funcin que describe el coste de entre todas las
posibles para esa t( n) ? Para estas situaciones en que el coste del
algoritmo no slo depende del tamao de la entrada sino que tambin
depende de cmo est organizada, introducimos un anlisis ms fino y
hablamos del coste en caso peor, caso mejor y caso medio de un

algoritmo. Obviamente hay algoritmos que no son sensibles a la


organizacin de los datos y, para un tamao de datos dado, siempre
tienen el mismo coste [3].
Formalizando, sea
y sea

En

el conjunto de todas las entradas de tamao

t( n) la funcin de coste restringida a las entradas de tamao

n , es decir

+
t ( n ) : En R , se define:

Coste en el caso mejor:

t mejor ( n ) =min {t n (i) i E n }

Coste en el caso peor:

t peor ( n )=max { t n (i) i E n }

Coste en el caso medio:

Para una entrada concreta

t medio ( n )= probabilidad ( i )t n ( i )

x En

i En

ocurre que el tiempo consumido por

el algoritmo para esa entrada, es decir

t ( x) , nunca ser superior al

coste en el caso peor para las entradas de tamao

ni ser inferior al

coste en el caso mejor. Por lo tanto:

A la hora de estudiar el coste de un algoritmo se suele usar la


aproximacin del coste en el caso peor debido a que es bastante ms
sencillo de calcular que el coste en el caso medio y a que nos
proporciona una cota superior de su coste [3] [4].

Notacin Asinttica
Para resolver un problema pueden existir varios algoritmos. Por tanto, es
lgico elegir el mejor. Si el problema es sencillo o no hay que resolver
muchos casos se podra elegir el ms fcil. Si el problema es complejo

o existen muchos casos habra que elegir el algoritmo que menos


recursos utilice. Los recursos ms importantes son el tiempo de
ejecucin y el espacio de almacenamiento.
Generalmente, el ms importante es el tiempo. Al hablar de la eficiencia
de un algoritmo nos referiremos a lo rpido que se ejecuta. La
eficiencia de un algoritmo depender, en general, del tamao de los
datos de entrada. [8]
Una de las nataciones asintticas es la O grande o cota superior-

Donde El anlisis de algoritmos una cota superior asinttica es una


funcin que sirve de cota superior de otra funcin cuando el argumento
tiende a infinito. Usualmente se utiliza la notacin de Landau O(g(x)) (o
coloquialmente llamada Notacin O Grande) para referirse a las
funciones acotadas superiormente por la funcin g(x).
Ms formalmente se define:
Una funcin f(x) pertenece a O(g(x)) cuando existe una constante
positiva c tal que a partir de un valor , f(x) no sobrepasa a
.
Quiere decir que la funcin f es inferior a g a partir de un valor dado
salvo por un factor constante.
La cota superior asinttica tiene gran importancia en Teora de la
complejidad computacional a la hora de definir las clases de
complejidad.[9]

Recursividad y Recursin

La recursividad es una tcnica muy empleada en la programacin


informtica y consiste en que una funcin se llame a s misma. El
ejemplo clsico es la funcin que calcula el factorial de un nmero. Un
factorial consiste en multiplicar un nmero natural por el nmero
anterior, y este a su vez por el anterior, y as sucesivamente hasta llegar
al nmero 1. Por ejemplo, el factorial de 8 sera el resultado de
multiplicar 8 por 7, luego por 6 y as sucesivamente hasta llegar a uno.
Una funcin recursiva que hiciera este clculo multiplicara el nmero
que se le pasa por el resultado de llamar a la funcin restando uno a ese
nmero. En nuestro ejemplo, multiplicar 8 por el factorial de 7. Cuando
el nmero que se le pasa es un 1, pues devuelve ese 1. Es la llamada
"condicin de salida", y es esencial para impedir que la funcin se est
llamando a s misma eternamente.
No se puede decir que un algoritmo recursivo es mejor que un algoritmo
iterativo, o viceversa. Dentro de las ventajas de los algoritmos
recursivos podemos encontrar que procesos largos se pueden condensar
en cdigos cortos, ya que no es necesario definir la secuencia de pasos
exacta para resolver un problema. Sin embargo dentro de las
desventajas tenemos que los algoritmos recursivos suelen consumir
muchos recursos y esto baja su eficiencia.
La definicin matemtica de una relacin recursiva es la siguiente:
f ( n )=

p(n) , n n0
af (F ( n ) )+ P(n) , x 0

Tambin se denomina relacin de recurrencia es una expresin que


relaciona el valor de una funcin f definida para un entero n con uno
o ms valores de la misma funcin para valores menores que n [4]
[5].

Complejidades de Algoritmos Recursivos

El anlisis del tiempo de ejecucin de un programa recursivo vendr en


funcin del tiempo requerido por la(s) llamada(s) recursiva(s) que
aparezcan en l. De la misma manera que la verificacin de programas
recursivos requiere razonar por induccin, para tratar apropiadamente
estas llamadas, el clculo de su eficiencia requiere un concepto anlogo:
el de ecuacin de recurrencia. Demostraciones por induccin y
ecuaciones de recurrencia son por tanto los conceptos bsicos para
tratar programas recursivos.
Supongamos que se est analizando el coste de un algoritmo recursivo,
intentando calcularla funcin de coste. Nos encontramos con que este
coste se define a su vez en funcin del coste de las llamadas recursivas,
es decir, de t( m) para otros tamaos m (usualmente menores que
n): esta manera de expresar el coste en funcin de si misma es lo que
denominamos una ecuacin recurrente, y su resolucin, es decir, la
obtencin para T de una formula cerrada (independiente de T) puede ser
bastante complicada.
Existen dos clases de recurrencias tpicas que aparecen frecuentemente
en el anlisis de algoritmos recursivos ms o menos sencillos [1] [6] [7].
Estos son:
Tipo 1
t (n)=

f (n),si0 n<c
at ( nc ) + bnk ,sic n

Coste Asinttico para Tipo 1

(n k ),si a<1
k+1
t(n) (n ),si a=1
n

(a c ),si a>1

Tipo 2
t (n)=

g(n) ,si 0 n< c


k
at ( n/c ) +bn ,si c n

Coste Asinttico para Tipo 2

(nk ) ,si a<c k


t(n) (n k log n),si a=c k
( alog a) ,si a>c k
c

REFERENCIAS
[1] Belalczar, J. Apuntes sobre el clculo de la eficiencia de los algoritmos. Tomado el 28
de Noviembre de 2014 de la pgina web: http://www.lsi.upc.edu/~iea/eficiencia.ps
[2] Abad, M. ANLISIS DE LA EFICIENCIA DE LOS ALGORITMOS. Tomado el 28 de
Noviembre de 2014 de la pgina web: http://www.lsi.upc.edu/~ada/apunts/MTA/efi.pdf
[3] Tema 1 La eficiencia de los algoritmos - PROGRAMACIN Y ESTRUCTURAS DE
DATOS. Tomado el 28 de Noviembre de 2014 de la pgina web:
http://rua.ua.es/dspace/bitstream/10045/16037/1/ped-09_10-tema1.pdf
[4] TEMA 2 EFICIENCIA DE LOS ALGORITMOS. Universidad de Alicante. Tomado el 28
de Noviembre de 2014 de la pgina web:
http://www.dlsi.ua.es/assignatures/daa/descargas/DAA0910-T2-COMP.pdf
[5] Metodologa de la programacin 2 Recursividad. Tomado el 28 de Noviembre de
2014 de la pgina web: http://decsai.ugr.es/~lcv/Docencia/mp2/apuntes/tema3.pdf
[6] Captulo 1-LA COMPLEJIDAD DE LOS ALGORITMOS .Tomado el 28 de Noviembre
de 2014 de la pgina web: http://www.lcc.uma.es/~av/Libro/CAP1.pdf
[7] Clculo de coste en algoritmos recursivos Tomado el 28 de Noviembre de 2014 de la
pgina web: http://web.jet.es/jqc/progii5.html
[8] Algortmica y Lenguajes de Programacin.Tomado el 1 diciembre de 2014 de la pgina
web: http://di002.edv.uniovi.es/~dani/asignaturas/transparencias-leccion13.PDF
[9] InfoRapid Portal de Conocimiento Tomado el 1 de diciembre de 2014 de la pgina
web: http://es.inforapid.org/index.php?search=Cota%20superior%20asint%C3%B3tica

Anda mungkin juga menyukai