Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATERIA:
PROGRAMACIÒN
CUENCA - ECUADOR
Abril, 2019.
NOTACIÓN BIG O
Objetivo general:
Objetivo específico:
Introducción:
¿Qué significa?
Representación: Big O trata de simplificar la comparación entre algoritmos a una sola variable
Relativa: esta comparación solo tiene sentido si se trata de algoritmos similares, no sirve de mucho
comparar un algoritmo de búsqueda con un algoritmo de ordenamiento.
La notación Big-O nos proporciona una manera de saber cómo se va a comportar un algoritmo en
función de los argumentos que le pasemos y la escala de los mismos.
Según La notación Big O se conoce diferentes tipos de complejidades para los algoritmos, pero en
este caso se da a conocer algunas.
Significa que la cantidad de datos es irrelevante para el algoritmo, siempre va a tardar el mismo
tiempo en terminar. Lamentablemente es difícil que un algoritmo no trivial caiga en esta categoría.
Items Tiempo
1 k segundos
10 k segundos
100 k segundos
Ejemplos
En este caso el tiempo incrementa conforme aumenta el número de elementos, pero de forma
logarítmica por lo que para grandes cantidades de datos el tiempo es relativamente corto.
Items Tiempo
1 1 segundo
10 2 segundos
100 3 segundos
1000 4 segundos
10000 5 segundos
Ejemplos
–Búsqueda binaria
Divide y Vencerás
Items Tiempo
1 1 segundo
10 10 segundos
100 100 segundos
Ejemplos
–Búsqueda lineal
O(n log n)
Esta es una combinación de las dos anteriores, es común encontrar varios algoritmos de
ordenamiento en esta categoría.
Items Tiempo
1 1 segundo
10 20 segundos
100 300 segundos
Ejemplos
–Merge Sort
–Heap Sort
–Quick Sort
La cantidad de tiempo que tarda el algoritmo comienza a dispararse, no es muy eficiente con una
gran cantidad de datos.
Items Tiempo
1 1 segundo
10 100 segundos
100 10000 segundos
Ejemplos
–Bubble sort
–Selection sort
O(2n): exponencial.
Se trata de funciones que duplican su complejidad con cada elemento añadido al procesamiento.
Son algoritmos muy raros pues en condiciones normales no debería ser necesario hacer algo así. Un
ejemplo sería, por ejemplo, el cálculo recursivo de la serie de Fibonacci, que es muy poco eficiente
(se calcula llamándose a sí misma la función con los dos números anteriores: F(n)=F(n -1)+F(n-2)).
Un algoritmo que siga esta complejidad es un algoritmo totalmente fallido. Una explosión
combinatoria se dispara de tal manera que cuando el conjunto crece un poco, lo normal es que se
considere computacionalmente inviable. Solo se suele dar en algoritmos que tratan de resolver algo
por la mera fuerza bruta. No deberías verlo nunca en un software "real".
Consideraciones
Aquí sólo nos interesa O(n), porque conforme el número de elementos aumente la constante 2 será
cada vez más insignificante.
Lo mismo ocurriría con una complejidad como O(n^2 + 2n + 1). Donde solo tomamos en cuenta la
potencia más grande O(n^2)
Generalmente el más representativo es el peor caso porque nos indica la categoría de complejidad
más alta de un algoritmo, para entender esto considera un algoritmo de búsqueda lineal, su
complejidad es O(n) por lo tanto en el peor de los casos hay que recorrer todo el arreglo, en el caso
promedio solo la mitad de elementos O(n/2), y en el peor de los casos el primer elemento es el que
se busca O(1).
Por ejemplo: supongamos que has desarrollado dos algoritmos de ordenamiento y quieres
comparar su tiempo de ejecución, a cada uno le das una entrada de 1000 elementos y el algoritmo
1 (A1) tarda 5 segundos, mientras que el algoritmo 2 (A2) tarda 9 segundos. ¿Es mejor el algoritmo
1? Tal vez, pero aún no podemos estar tan seguros.
Conclusión
El análisis de la complejidad de un algoritmo debe ser una práctica básica de cualquier
desarrollador porque permite escribir programas que son más eficientes y escalables a largo
plazo.
Una buena forma de practicar es revisar código escrito por nosotros, por el programador o por
alguna biblioteca en función de obtener la complejidad de métodos o funciones y también al
hacer programas es imprescindible tomarse el tiempo para analizarlo.
Referencias:
https://www.campusmvp.es/recursos/post/Rendimiento-de-algoritmos-y-notacion-Big-
O.aspx
https://www.enrique7mc.com/2016/07/que-es-la-notacion-big-o/