Sunteți pe pagina 1din 17

Notación Big O: Guía para

Principiantes
Carlos Fuentes Follow
Sep 8, 2018 · 6 min read

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
The Big donut by http://rosannapansino.com/blog/recipes/the-big-donut/

En el mundo del software, no todo es escribir código y programar como si


no hubiese un mañana. Más allá de entender nuestro objetivo y lo que
queremos hacer al programar, existen otras variables que tenemos que
tener en cuenta al momento de desarrollar software. Dígase complejidad,
mantenibilidad, escalabilidad, algoritmos a implementar y un largo
etcétera. Una de las más importantes (y de la que hablaremos en este
artículo) es el rendimiento de nuestra aplicación en cuanto a la
implementación de un algoritmo.

El rendimiento de nuestro algoritmo permitirá, no sólo hacernos sentir


como que somos los dioses de la tecnología al hacer que el software que
hemos creado haga mil y un cosas por segundo, sino también ayudará a que
el usuario (dígase usuario común o un profesional en el ámbito
tecnológico) no tenga que esperar durante horas a que la tarea para la que
nuestro software fue desarrollado, se cumpla, sin importar que las
computadoras y dispositivos de hoy en día sean lo más capaces para
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
desarrollar una larga lista de tareas medianamente complejas y otra lista un
poco menos larga de tareas complejas.

Existen varios factores que inter eren al hablar de rendimiento en nuestro


algoritmo, como lo son: el uso de espacio en disco, de memoria para su
ejecución, tiempo de ejecución en general y otro largo etcétera.

Una de las herramientas más importantes para determinar el rendimiento


de nuestro algoritmo es la Notación Big O.

. . .

Notación Big O

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
https://www.etsy.com/nz/listing/123394754/large-metal-letter-o-cast-metal-letter

La notación Big O es una herramienta muy funcional para determinar la


complejidad de un algoritmo que estemos utilizando, permitiéndonos
medir su rendimiento en cuanto a uso de espacio en disco, recursos
(memoria y ciclos del reloj del CPU) y tiempo de ejecución, entre otras,
ayudándonos a identi car el peor escenario donde el algoritmo llegue a
su más alto punto de exigencia.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Los términos de complejidad Big O más utilizados son:

O(1) -> constante.

O(n) -> linear.

O(log n) -> logarítmica.

O(n ^ 2) -> cuadrática.

O(2 ^ n) -> exponencial.

Cuando investigues un poco más sobre el tema, te encontrarás con temas


matemáticos algo complejos, que si tú especialidad no eran las
matemáticas, creo que te sentirás algo confundido y ansioso. Pero no te
preocupes, te explicaré lo más amigable y entendible posible, más cuando
hablemos de logaritmos. A su vez, acompañaré la explicación con un
ejemplo en Javascript relacionado con el tema.

O(1): Complejidad Constante


La complejidad constante nos indica que, sin importar el tamaño de
entrada o salida, el tiempo de ejecución y recursos utilizados por
nuestro algoritmo siempre será el mismo. Podemos verlas como

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
funciones “estáticas” debido a que siempre se comportarán de la misma
manera, no importa las veces que sea ejecutada ni donde. Por ejemplo:

A function that returns the last item from an array passed by argument

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tomando el ejemplo anterior, podemos ser testigos de un pequeño
algoritmo con complejidad constante. Esto gracias a que, no importa el
tamaño del arreglo que sea pasado como argumento, el resultado siempre
será obtener el último elemento que este arreglo contenga. La única
variante será el resultado entregado, ya que el dato contenido en el último
espacio de un arreglo puede variar.

O(n): Complejidad Linear


Decimos que un algoritmo tiene complejidad linear, cuando su tiempo de
ejecución y/o uso de recursos es directamente proporcional (es decir
que se incrementa linealmente) al tamaño del valor de entrada necesario
para la ejecución del algoritmo. Usando el siguiente fragmento como
ejemplo:

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
A function that prints all the elements inside the array passed by argument

Para entenderlo de una manera mucho más sencilla, podemos compararlo


con una actividad sumamente común como leer un libro o ver una película.
El tiempo que tardemos en terminar de leer dicho libro o ver dicha película,
dependerá de su duración. Si la película dura una hora, tardaremos una
hora en terminar de ver la película. Si el libro es de 100 páginas y lees 50
páginas en hora (realmente depende en tu capacidad de lectura y
comprensión), entonces tardarás 2 horas en terminar de leer dicho libro.

O(log n): Complejidad Logarítmica


La complejidad logarítmica es dada cuando el tiempo de ejecución o uso
de recursos es directamente proporcional al resultado logarítmico del
tamaño del valor de entrada. Es decir, si tenemos un dato de entrada cuyo
tamaño es 10 y nos toma 1 segundo en la implementación del algoritmo,
signi ca que por un valor de entrada cuyo tamaño es 100, nos debe tomar 2

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
segundos en realizar el algoritmo, un valor de 1000 nos debe tomar 3
segundos y así consecuentemente.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Binary search (thanks to room_js)

Un ejemplo muy claro es al momento de ejecutar una búsqueda binaria.


En este algoritmo particionamos un arreglo, previamente ordenado, en dos.
Tomamos el indice medio como punto de referencia para obtener el valor
que se encuentra a la mitad del arreglo. Si el dato a la mitad del arreglo es
igual al dato que estamos buscando, regresamos el indice medio sumándole
el pre jo que usaremos como base para encontrar el espacio donde el dato
que estamos buscando se ubica. Consecuentemente, si el número que
buscamos es mayor al dato medio del arreglo, buscaremos en el lado
derecho del arreglo y le sumaremos a nuestro pre jo el indice medio; por
otra parte, si el dato que buscamos es menor al dato que se encuentra a la
mitad del arreglo, buscaremos en el lado izquierdo del arreglo.
Posteriormente utilizamos el pre jo que tenemos actualmente para que sea
la base de la siguiente iteración de manera recursiva. Repetimos este ciclo
hasta encontrar el número dado por parámetro en la función.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O(n ^ 2): Complejidad Cuadrática
Encontramos complejidad cuadrática en los algoritmos, cuando su
rendimiento es directamente proporcional al cuadrado del tamaño del
valor de entrada. Es decir, si tenemos como dato de entrada un arreglo con
un tamaño de 4 elementos que queremos comparar para ver si hay
elementos repetidos, tendremos que hacer 16 comparaciones en total para
completar nuestro algoritmo. Esta complejidad es común encontrarla en
algoritmos de ordenamiento de datos como el método de la burbuja, el de
inserción y el método de selección, entre algunos otros.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
La complejidad puede incrementarse con más ciclos anidados, hasta llegar
a ser una complejidad n * n.

O(2 ^ n): Complejidad Exponencial


Cuando un algoritmo tiene complejidad exponencial, su rendimiento se
incrementa al doble cada vez que se agregue un nuevo dato al valor de
entrada, por ende, incrementando su tamaño de manera exponencial. Esto
quiere decir que si tenemos un arreglo con 1 elemento y nos toma 10
segundos ejecutar el algoritmo, con 2 elementos nos deberá tomar 20
segundos, con 3 nos deberá tomar 30 y así de manera sucesiva.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Function for Fibonacci sequence

Un ejemplo bastante común de complejidad exponencial es la sucesión de


Fibonacci.

https://i0.wp.com/www.itarray.net/wp-content/uploads/2018/02/ bonacci.jpg?resize=1080%2C675&ssl=1

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Conclusión
Hasta aquí mi artículo de esté día, espero haya sido de tu agrado y hayas
logrado comprender un poco más de una de las herramientas más
importantes para medir el impacto de un algoritmo.

Si tienes alguna duda no dudes en comentar, a continuación de dejo


algunas fuentes de información interesantes para que conozcas más a
detalle sobre The Big O Notation.

Más información
https://es.khanacademy.org/computing/computer-
science/algorithms/asymptotic-notation/a/big-o-notation

https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

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

http://interactivepython.org/runestone/static/pythonds/AlgorithmAna
lysis/BigONotation.html

No rights reserved by the author.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Computer Science Programming Software Development Algorithms Big O Notation

62 claps

WRITTEN BY

Carlos Fuentes Follow

Web developer and JavaScript lover. Python and Machine


Learning a plus. Comics and Video games are my passion.

Write the rst response

More From Medium

Related reads

Bots Are Not The Main Reason For Fake


Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
News. Humans Are.
Veronika Bondarenko in Arc Digital
Apr 23, 2018 · 7 min read 671

Related reads

No, I Don’t Speak Spanish


Ernio Hernandez in Be Yourself
Apr 28, 2018 · 4 min read 1.2K

Also tagged Software Development

Build Fast, Deploy Faster : Creating lighter


docker images
Vishwas Srivastava
May 15 · 2 min read 3

Discover Medium Make Medium yours Become a member


Welcome to a place where words matter. Follow all the topics you care about, and Get unlimited access to the best stories
On Medium, smart voices and original we’ll deliver the best stories for you to on Medium — and support writers while

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
ideas take center stage - with no ads in your homepage and inbox. Explore you’re at it. Just $5/month. Upgrade
sight. Watch

About Help Legal

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD

S-ar putea să vă placă și