Está en la página 1de 9

UNIVERSIDAD POLITÉCNICA SALESIANA

FACULTAD DE INGENIERIA ELECTRICA

Asignatura:
Programación aplicada

“COMPLEJIDAD ALGORÍTMICA

CON NOTACIÓN BIG - O”

Presenta:
JEAN FRANCO PULLA JARAMILLO

Grupo: 1

Maestro Asesor:
Ing. CRISTIAN FERNANDO TIMBI SISALIMA

Cuenca, Ecuador Octubre, 2019

1|Página
ÍNDICE

I. INTRODUCCIÓN .................................................................................................................................3
II. MARCO TEORICO ..............................................................................................................................3
2.1. DEFINICION DE LA NOTACION BIG-O. ................................................................................3
2.2. FUNCIONES PARA LA NOTACION BIG-O............................................................................4
2.3. USO Y EJEMPLOS .....................................................................................................................6
III. CONCLUSIÓN .................................................................................................................................8
IV. BIBLIOGRAFIAS...........................................................................................................................9

2|Página
I. INTRODUCCIÓN
En este documento se aportará bases de información acerca de la notación Big-O, con
la finalidad de diseñar algoritmos más rápidos. En programación el rendimiento o la
complejidad de un algoritmo se suele medir utilizando una notación denominada Big-O,
y también conocida como Notación Asintótica. El análisis de algoritmos mide la eficiencia
de un algoritmo, conforme crece el tamaño de la entrada. Esto nos permite comparar los
costos relativos de dos o más algoritmos para resolver el mismo problema.

Se puede decir que es una manera de saber cómo se va a comportar un algoritmo en


función de los argumentos de programación. En esta notación asintótica presentaremos
los más comunes para todo tipo de algoritmos y funciones.

II. MARCO TEORICO

2.1. DEFINICION DE LA NOTACION BIG-O.


La notación Big O es la representación relativa de la complejidad de un algoritmo.
También se podría decir que es una notación matemática, usada para expresar
aproximaciones de funciones. El análisis de algoritmos también les da una herramienta a
los diseñadores de algoritmos para estimar si una solución propuesta es probable que
satisfaga las restricciones de recursos de un problema. El estudiante debe conocer
técnicas para estimar las complejidades de sus algoritmos, las que se pueden llegar a
dominar con la práctica. Estas técnicas les permiten discriminar entre distintos algoritmos,
o evaluar los propios. A veces calcular la eficiencia de un algoritmo resulta desafiante. Lo
importante es que esta notación resulta muy útil para discriminar ante un problema que
algoritmo usar.

3|Página
2.2. FUNCIONES PARA LA NOTACION BIG-O.
En esta sección veremos diferentes complejidades para los siguientes algoritmos, que se
presentaran a continuación:

 O(1): constante. La operación no depende del tamaño de los datos. Es el caso


ideal, pero a la vez probablemente el menos frecuente. No se ve en la gráfica de
más abajo porque la logarítmica le pasa justo por encima y la tapa.
 O(n): lineal. El tiempo de ejecución es directamente proporcional al tamaño de los
datos. Crece en una línea recta.
 O(log n): logarítmica. por regla general se asocia con algoritmos que "trocean" el
problema para abordarlo, como por ejemplo una búsqueda binaria.
 O(nlogn): en este caso se trata de funciones similares a las anteriores, pero que
rompen el problema en varios trozos por cada elemento, volviendo a recomponer
información tras la ejecución de cada "trozo". Por ejemplo, el algoritmo de
búsqueda Quicksort.
 O(n2): cuadrática. Es típico de algoritmos que necesitan realizar una iteración por
todos los elementos en cada uno de los elementos a procesar. Por ejemplo el
algoritmo de ordenación de burbuja. Si tuviese que hacer la iteración más de una
vez serían de complejidad O(n3), O(n4), etc.. pero se trata de casos muy raros y
poco optimizados.
 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.
 O(n!); explosión combinatoria. 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".

4|Página
f(n) Nombre
1 Constante
𝐿𝑜𝑔(𝑛) Logarítmica
𝑛 Lineal
𝑛𝑙𝑜𝑔(𝑛) Log-lineal
𝑛2 Cuadrática
𝑛3 Cúbica
2𝑛 Exponencial
Tabla 1: Funciones comunes para la notación Big-O.

Fig.1, Funciones comunes para la notación Big-O

5|Página
Fig.2, Funciones de la notación asíntota.

2.3. USO Y EJEMPLOS


Al comparar el rendimiento del algoritmo, nos interesa la cantidad de operaciones que
realiza un algoritmo. Esto se llama complejidad del tiempo. En este modelo,
consideramos que cada operación básica (suma, multiplicación, comparación,
asignación, etc.) toma una cantidad de tiempo fija, y contamos el número de dichas
operaciones.

Para entender un poco acerca de esta notación mencionado anteriormente,


presentaremos algunos ejemplos a continuación:

 O(N)

O(N) describe un algoritmo cuyo rendimiento va a crecer de forma lineal y en proporción


directa con el tamaño del conjunto de datos de entrada. El siguiente ejemplo también
demuestra cómo Big O favorece el rendimiento en el peor de los casos; una cadena que
cumpla la condición puede ser encontrada durante cualquiera de las iteraciónes del bucle

6|Página
for y salir de la función antes, pero ‘Big O notation’ siempre asumirá el límite superior en
el que el algoritmo llevará a cabo el número máximo de iteraciones.

Código:
bool ContainsValue(IList<string> elements, string value)
{
foreach (var element in elements)
{
if (element == value) return true;
}

return false;
}
 O(2ᴺ)

O(2ᴺ) denota un algoritmo cuyo crecimiento se duplica con cada adición al conjunto de
datos de entrada. La curva de crecimiento de una función O(2ᴺ) es exponencial -
partiendo muy poco profunda, seguida de un aumento meteórica. Un ejemplo de una
función O(2ᴺ) es el cálculo recursivo de los números de Fibonacci:

Código:

int Fibonacci(int number)


{
if (number <= 1) return number;

return Fibonacci(number - 2) + Fibonacci(number - 1);


}

7|Página
 (log n)

Cuando escribimos "log", nos referimos al logaritmo binario, o log base 2 (que
escribiremos "log_2"). Como O (log_2 n) = O (log n) (puedes hacer los cálculos) usaremos
"log" en lugar de "log_2".

Llamemos a x el número de operaciones: sabemos que 1 = n / (2 ^ x).

Entonces 2 ^ x = n, entonces x = log n

Código:

a = 0
b = n-1
while True:
h = (a+b)//2 ## // is the integer division, so h is an integer
if L[h] == 0:
return h
elif L[h] > 0:
b = h
elif L[h] < 0:
a = h

III. CONCLUSIÓN
Cabe mencionar, para el desarrollo de la notación Big-O, esta técnica matemática para
tener un mejor acoplamiento en el código de lenguaje de programación, pero por
simplicidad lo he reducido a lo que se usa en el análisis de complejidad de algoritmos:
funciones definidas en los naturales, que tienen valores distintos de cero, y el caso de n
creciente hasta el infinito.

En Conclusión, esta notación es utilizada para simplificar la comparación entre


algoritmos, permitiendo al estudiante o al ingeniero, desarrollar una habilidad para escribir
programas más eficientes y estables.

8|Página
IV. BIBLIOGRAFIAS
Dionysis "dionyziz" Zindros, M. R. (s.f.). Introducción al Análisis de Complejidad de
Algoritmos. Obtenido de https://discrete.gr/complexity/?es
Estrada, A. (s.f.). Guía para principiantes a 'Big O notation'. Obtenido de Status /
Posts: https://abeestrada.com/post/big-o-notation/
MUNGUÍA, E. (s.f.). ¿Qué es la notación Big O? Obtenido de Fundamentos,
Programación: https://www.enrique7mc.com/2016/07/que-es-la-notacion-big-o/

9|Página

También podría gustarte