You are on page 1of 10

UNIVERSIDAD ANDINA DEL CUSCO

FACULTAD DE INGENIERIA Y ARQUITECTURA

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

TRABAJO DE INVESTIGACION FORMATIVA


2017 - II

ASIGNATURA : ALGORITMICA Y LABORATORIO DE


PROGRAMACIN II
DOCENTE : MGT. IVAN MOLERO DELGADO
ESTUDIANTES Y CDIGO :
Gianfranco Ramiro Alejo Medina 016100037G
Marcelo Prada Valderrama 016101246I
lvaro Chavarra Rivero 016100418K
Angelo Miranda Zapata 014100158K
Rmulo Gerardo Snchez Ismodes 016101476D

CUSCO PERU
PRESENTACIN
El presente trabajo de Investigacin Formativa, pretende desarrollar el tema de que lleva
como ttulo: Complejidad de Algoritmos 'Big O'; la cual, junto a sus respectivos temas
y subtemas, ser analizado y redactado, rigindose a las normas establecidas por el Mgt.
Ivn Molero Delgado, para una correcta y concisa presentacin del trabajo.

Pretendemos como estudiantes de la Universidad Andina del Cusco, realizar una correcta
investigacin del tema y servir de base de conocimientos para nuestros compaeros.

El grupo.

31 de octubre del 2017.


Complejidad de Algoritmos 'Big O
1. Definicin

Para entenderlo en nuestras propias palabras, la notacin Big-O nos permite


entender cmo funcionan nuestros propios algoritmos, y cmo reaccionan frente
a los datos o informacin que les brindemos. Esto no permite conocer su
eficiencia, velocidad y cantidad de cdigo entre otros factores, los cuales los
delimitamos nosotros.

Se le atribuye la letra O, ya que hace referencia a ordenamiento. Esta permite


brindarle un factor de complejidad a nuestras funciones. Big-O nos permite
colocarnos en el peor caso de eficiencia de un cdigo, ya que este debera actuar
rpido, claro dependiendo de la funcin que tengamos, pero esta notacin nos
permite ver como nuestro cdigo funcionara en n situaciones, donde lo que
vara es la magnitud de la informacin con la que trabaje.

Esto nos permite, en otras palabras, a su vez, conocer como ya lo mencionamos


el tiempo de ejecucin de un cdigo, ya que existen casos donde la entrada, pueda
ser, 1 o 1000, el tiempo de ejecucin ser el mismo, ya que esta funcin solo leer
enteros, y la funcin no es compleja.

La notacin Big-O se representa con O(n), donde la O hace referencia a la


funcin de nuestro algoritmo, la cual realiza lo que nosotros buscamos y la n que
representa el nmero de elementos que estn en esa funcin.

2. Ejemplos

Si f(n) = 2n 2 & g(n) = n, debemos probar f(n) = O (g(n)).

Lo que debemos saber es que si esa funcin pertenece a O(n).

Tenemos la definicin en el caso de esta notacin, la cual es: f(n) = O(g(n)) si


f(n) <= C * g(n) para cualquier K; c > 0 y k >0.

Le damos el valor a c de 3 y a k de 1; por lo que podemos ver que:

2n 2 <= 3 * n para todo n >= 1 2n <= 3n + 2 1 <= 3n/2n + 1/n 1 < =


1.5 + 1/ 1/n debe ser al menos uno, ya que al decir que para todo n>=1, 1
sera el primer valor que debera tomar. Por lo que es verdadero.

1 < = 1.5 + 1 1 <= 2.5 f(n) = O(n) 2n-2 = O(n)


3. Ordenamiento de Funciones Comunes

Hay clases de funciones que se encuentran a la hora de ejecutar un algoritmo, en


esas funciones hay una constante positiva y una variable que puede aumentar sin
lmite.

La funcin ms conocida es la de O (1), la cual es la funcin ms simple y sencilla


que existe, con la cual, se pueden realizar operaciones matemticas. Se le
denomina constante, ya que permite saber si es par o impar.

Existen tambin funciones logartmicas, como lineales, cuadrticos, entre otros.

4. Notaciones Asintticas

Tambin hay notaciones asintticas relacionadas, Big O es la notacin asinttica


ms utilizada para comparar funciones, que tambin puede ser reemplazado por
Big Theta, el cual tiene lmites ms cerrados o estrictos, pero:

Qu es una notacin asinttica?

Es una familia de relaciones conocidas como notacin de Bachmann-Landau, la


cual se usa para describir el tiempo de ejecucin de los algoritmos

Algunas relaciones asintticas son:

relacin definicin

(Grafica extrada de Google imgenes)


5. Usos relativos

Cabe resaltar, que cuando desarrollamos la notacin Big O sobre una funcin,
esta operacin es directa, ya que se usan valores lineales y estos son reemplazados
directamente. A este proceso se le denomina generalizacin de las funciones.

Estos procesos nos ayudan a delimitar si una funcin pertenece o no a este tipo de
notacin, ya que, al tener varios tipos de notaciones, son esenciales para delimitar
a cules pertenecen y a cules no.

El reemplazo de variables es prctico, y nos permite saber y conocer si un


algoritmo es ms ptimo y eficaz para la resolucin del problema que tenemos
planteado.

Otro uso que tiene este tipo de notacin, es el mbito de la teora del nmero
analtico, donde sirve para poder diferenciar tanto a una funcin aritmtica y una
aproximacin. Esta ltima habla sobre la teora del nmero primo.

Normalmente se usa la notacin de Big O para aadir datos de manera asinttica


para mejorar el tiempo de ejecucin dentro del rango de factores constantes por
arriba y abajo.

Pero muchas veces los programadores solo quieren aadir datos por arriba, un
ejemplo seria cuando una operacin no es constante, si nos piden determinar el
tiempo estara mal si decimos que es el mismo tiempo en todos los casos, pero si
encontramos lo encontramos en el primer caso, tendramos muchas dudas para
determinar el resultado por lo cual no tendramos suficientes pruebas para
sustentar nuestro trabajo, es aqu donde entra la notacin Big O ya que nos da
distintas opciones para resolver problemas.

Una aplicacin muy importante de Big O es que nos permite comparar varios
algoritmos sin la necesidad de preocuparnos de las pruebas de rendimiento. Lo
que significa que de dos algoritmos equivalentes se puede elegir el algoritmo de
mayor rendimiento para evitar problemas y fallas con el sistema. Por eso cuando
tengas un problema debemos tratar de anotar cual es la complejidad en la notacin
Big O para que otros programadores sepan como usarlo y hasta sepan como
optimizarlo, lo cual es una ayuda muy grande en nuestra carrera.
6. Relacin con la notacin Bachmann-Landau

Como cualquier invento o patente del mundo, todo tiene su origen, y tanto para
esta notacin no fue la excepcin. Fue dado a conocer y presentado al mundo por
el matemtico Paul Bachmann en el ao de 1984, explcitamente en su segundo
libro. Como todos sabemos, todo trabajo en materia prima, por denominarlo de
esa forma, siempre tiene tendencia a llamar la atencin cuando se presenta, por lo
que el matemtico Edmund Landau la apoyo y se dedic a mejorar estos estudios.

Gracias a Hardy y Littlewood, se pudieron denominar cada tipo de notacin por


las letras ya mencionadas previamente, para que de esta forma puedan
diferenciarse entre ellas. A lo largo de su historia, diversos matemticos la
tipificaron, permitindole dar un uso diferente para cada proceso que ellos deseen
conseguir, por lo que se le considera a la notacin O como moldeable.

Originariamente, su nombre de esta notacin fue la de Omicron, la cual no fue


nombre caracterstico, el cual haya sido tomado por Bachmann o Landau. Muchos
la confundan con la notacin 0, ya que la imprenta de esos aos, posean diversas
fuentes de texto, y la similitud de estos dos caracteres era muy notoria en las
fuentes de esos aos.

7. Propiedades

Big O tiene distintas notaciones y entre las ms comunes tenemos

Por su complejidad:

Constante: Significa que la cantidad de datos es irrelevante para el


algoritmo, siempre termina al mismo tiempo, excepto los triviales.

Lineal: El tiempo de ejecucin es igual al tamao de los datos.

Logartmica: El tiempo crece segn el nmero de datos. (bsqueda binaria)

Cuadrticas la cantidad de tiempo que tarda en ejecutarse.

Exponencial: Son las funciones que duplican su complejidad si se aumenta


elementos.

Explosin combinatoria: Es el algoritmo que no sirve.


Por ejemplo, al analizar un algoritmo existen 3 casos:

Mejor caso.

Caso Promedio.

Peor caso.

Normalmente el peor caso es el que nos indica la complejidad del algoritmo.

8. Mltiples variables

En los algoritmos Big O no solo se usa la mayscula O, tambin se puede


usar o, ., etc., y pueden ser implementados con mltiples variables, estas
pueden estar en funciones las cuales sern y tendrn las mismas caractersticas y
propiedades ya propiamente establecidas

9. Asuntos de notacin

En los algoritmos Big O es muy comn el uso de otro tipo de signo de igualacin
que es la letra en ingls is que es, donde existe la probabilidad de que pase una
confusin quien la utiliza o cometa algn error, es por esas razones que se
estableci el uso de notaciones establecidas

Big O con otros operadores aritmticos, el uso de otras operaciones puede


adaptarse perfectamente con la natacin de Big O, ya que puede seguir
cumplindose las propiedades ya establecidas

Los mltiplos usos que se pueden realizar, en muchas funciones que se realicen
donde O sea un valor y en otra funcion otro O sea otros valores, estas O sean
iguales y puedan ser comparadas .El uso de la Big O se puede usar solo con la
mayscula M.
CONCLUSIONES

La notacin asinttica o la grande O conocido mundialmente como Big O, es una


notacin que se utiliza alrededor del mundo gracias a su utilidad, como lo
explicamos en el trabajo.

Esta notacin es muy importante ya que con la tecnologa actual que tenemos los
ingenieros de Sistemas y los que se preparan para serlo, al momento de elaborar
un algoritmo si no analizamos la complejidad no sabremos si el algoritmo
funciona.

Este punto es muy importante tal vez en los cdigos pequeos este dems realizar
esta notacin, pero si comenzamos a acostumbrarnos a la larga, cuando
programemos cdigos ms grandes esto nos servir ya que si tenemos algn
problema con el cdigo ya sabremos que hacer por lo tanto sabremos si funciona
o no, y podremos programar algoritmos como juegos, pginas web entre otros.

Esperando haber podido explicar de la mejor manera el uso y funcionamiento de


Big O, que a largo plazo ser una herramienta fundamental al momento de
programar.
RECOMENDACIONES
Tras realizar el presente trabajo de investigacin, como grupa se consideran
oportunas las siguientes recomendaciones; las cuales son las siguientes:

Para poder utilizar Big O de manera no solo eficaz, sino tambin eficiente,
debemos saber todos los conceptos bsicos que Big O conlleva. Al hacer esto
podremos evaluar nuestros algoritmos de manera eficiente, para poder alcanzar
soluciones vlidas y sobre todo viables en cualquier problema que se nos pueda
presentar.

Para disear un buen algoritmo debemos preocuparnos de cun rpido va a


funcionar, ya que en el mundo de hoy la velocidad es importante, y no queremos
un algoritmo o programa que se demore un tiempo extenso para funcionar. Y para
evaluar y ayudar a corregir esto tenemos Big O.

Es imperativo entender la complejidad de cada algoritmo candidato que


desarrollamos, para as poder examinar cual va a ser la diferencia de algoritmos
en cuanto a eficiencia, y as poder elegir el que ms nos convenga de acuerdo a
nuestras necesidades
BIBLIOGRAFA

Abrahms, J. (2017). Justin Abrahms. Obtenido de Justin Abrahms:


https://justin.abrah.ms/computer-science/big-o-notation-explained.html

Academy, K. (2017). Khan Academy. Obtenido de


https://es.khanacademy.org/computing/computer-science/algorithms/asymptotic-
notation/a/big-o-notation

Alarcn, J. M. (14 de Junio de 2016). Campus MVP. Obtenido de Campus MVP:


https://www.campusmvp.es/recursos/post/Rendimiento-de-algoritmos-y-
notacion-Big-O.aspx

Banas, D. (18 de Marzo de 2013). Big O Notations. Youtube.

Behavior, U. (24 de Julio de 2017). What Is Big O? (Comparing Algorithms). Youtube.

freeCodeCamp. (20 de Setiembre de 2015). Big O Notation: A Few Examples. Youtube.

HackerRank. (27 de Setiembre de 2016). Big O Notation. Youtube.

randerson112358. (23 de Setiembre de 2014). Solve Big-Oh by definition. Youtube.

Wikipedia. (2017). Wikipedia.org. Obtenido de Wikipedia.org:


https://en.wikipedia.org/wiki/Big_O_notation