(dado que esta es una respuesta más larga, lea las negrillas para obtener un resumen )
Tomemos su ejemplo y avancemos paso a paso, entendiendo el propósito detrás de lo que estamos haciendo. Comenzamos con su función y el objetivo de encontrar su notación Big Oh:
f(n) = 6n+4
Primero, seamos O(g(n))la notación Big Oh que estamos tratando de encontrar f(n). A partir de la definición de Big Oh, necesitamos encontrar un simplificado g(n) donde existan algunas constantes cy n0donde c*g(n) >= f(n)sea cierto para todos nlos mayores que n0.
Primero, elijamos g(n) = 6n + 4(lo que daría lugar O(6n+4)en Big Oh). En este caso, vemos que c = 1y cualquier valor de n0cumplirá con los requisitos matemáticos de nuestra definición de Big Oh, ya que g(n)siempre es igual a f(n):
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
En este punto, hemos cumplido los requisitos matemáticos. Si nos detenemosO(6n+4) , está claro que esto no es más útil que escribir f(n), por lo que perdería el verdadero propósito de la notación Big Oh: ¡comprender la complejidad temporal general de un algoritmo! Por lo tanto, pasemos al siguiente paso: la simplificación.
Primero, ¿podemos simplificar de 6nmodo que el Big Oh es O(4)? ¡No! (Ejercicio para el lector si no entiende por qué)
En segundo lugar, ¿podemos simplificar 4para que el Big Oh sea O(6n)? ¡Si! En ese caso g(n) = 6n, entonces:
c*g(n) >= f(n)
c*6n >= 6n + 4
En este punto, elijamos c = 2desde entonces que el lado izquierdo aumentará más rápido (en 12) que el lado derecho (en 6) para cada incremento de n.
2*6n >= 6n + 4
Ahora necesitamos encontrar un punto positivo n0donde la ecuación anterior sea verdadera para todos nlos valores superiores a ese valor. Como ya sabemos que el lado izquierdo aumenta más rápido que el derecho, todo lo que tenemos que hacer es encontrar una solución positiva. Por lo tanto, dado que n0 = 2hace que lo anterior sea cierto, lo sabemos g(n)=6no O(6n)es una notación potencial de Big Oh f(n).
Ahora, ¿podemos simplificar 6para que el Big Oh sea O(n)? ¡Si! En ese caso g(n) = n, entonces:
c*g(n) >= f(n)
c*n >= 6n + 4
Vamos a elegir c = 7ya que la izquierda aumentaría más rápido que la derecha.
7*n >= 6n + 4
Vemos que lo anterior será cierto para todos nlos mayores o iguales a n0 = 4. Por lo tanto, O(n)es una notación potencial para Big Oh f(n). ¿Podemos simplificar g(n)más? No!
Finalmente, hemos descubierto que la notación Big Oh más simple f(n)es O(n). ¿Por qué pasamos por todo esto? Porque ahora sabemos que f(n)es lineal , ya que su notación Big Oh es de complejidad lineal O(n). ¡Lo bueno es que ahora podemos comparar la complejidad temporal de f(n)otros algoritmos! Por ejemplo, ahora sabemos que f(n)es comparable de tiempo-complejidad de las funciones h(n) = 123n + 72, i(n) = n, j(n) = .0002n + 1234, etc; porque al usar el mismo proceso de simplificación descrito anteriormente, todos tienen una complejidad lineal de tiempo O(n).
¡¡¡Dulce!!!