¿Qué es f (n) = O (g (n))?

Esto es lo que se llama la notación big-O .

Es un concepto utilizado al describir la complejidad de los algoritmos.

Básicamente, el tiempo de ejecución de los algoritmos depende de la entrada y, como tal, es variable. Además, el tiempo no es una buena unidad de medida para la complejidad, ya que depende de muchos factores, incluida la máquina en la que se ejecuta el algoritmo.

Por esta razón, usamos el número de operaciones en función de la longitud de entrada para describir la complejidad de un algoritmo.

Dado eso, decir que la complejidad de un algoritmo es [matemática] O (g (x)) [/ matemática] significa que requiere operaciones [matemática] g (x) [/ matemática] en el peor de los casos . Por ejemplo, la complejidad de un algoritmo de ordenación de listas erróneas puede ser [matemática] O (n ^ 2) [/ matemática], donde [matemática] n [/ matemática] es el tamaño de la entrada, ya que necesita verificar entre sí valor para determinar a dónde va el actual.

También hay otras dos funciones, [math] \ omega (g (x)) [/ math] y [math] \ theta (g (x)) [/ math], que significan respectivamente que el algoritmo requiere al menos [math] ] g (x) [/ math] y exactamente [math] g (x) [/ math] operaciones para completar.

Significa que para todos los valores suficientemente grandes de [matemáticas] n [/ matemáticas], [matemáticas] f (n) [/ matemáticas] es menor que algún múltiplo constante de [matemáticas] g (n) [/ matemáticas]. Puede elegir cualquier umbral que desee para “suficientemente grande”, y puede elegir cualquier múltiplo constante de g (n).

Por ejemplo:

[matemáticas] f (x) = 1000 x [/ matemáticas]

[matemáticas] g (x) = x ^ 2 [/ matemáticas]

Es difícil comparar el “tamaño” de estas funciones, especialmente porque f (x) parece mucho más grande que g (x) para valores pequeños. Sin embargo, podemos ver que:

Para todos [matemática] n [/ matemática] mayor que [matemática] 500 [/ matemática],

[matemáticas] f (n) <1000000000 \ veces g (n) [/ matemáticas]

Entonces podemos decir que [matemáticas] f (n) = O (g (n)) [/ matemáticas].

Por otro lado, no es el caso que [math] g (n) = O (f (n)) [/ math], ya que no hay múltiplo de [math] f (n) [/ math] que eventualmente no será superado por [math] g (n) [/ math].

Tenga en cuenta que hay algún abuso de notación aquí. [matemática] O (g (n)) [/ matemática] no es una función particular, por lo que parece incorrecto usar un signo igual. Puede ser útil pensar en [matemáticas] O (g (n)) [/ matemáticas] como un conjunto de funciones, y [matemáticas] f (n) [/ matemáticas] es igual a una de ellas.

Como los otros han señalado, esta es una notación de gran Oh, y se usa en el análisis de complejidad.

Le sugiero que eche un vistazo a esta respuesta: la respuesta de Alon Amit a ¿Qué es todo lo que necesito saber sobre la notación Big O? – Amit proporciona una gran descripción general. Al mismo tiempo, señala con razón que siempre debes sumergirte en un concepto de profundidad primero, y ninguna respuesta de quora realmente te ayudará en ese sentido ( aunque, él hace un trabajo encomiablemente decente )