# Cota superior asintótica

En análisis de algoritmos, una cota superior asintótica es una función que sirve de cota superior de otra función cuando el argumento tiende a infinito. Usualmente se utiliza la notación de Landau: O(g(x)), Orden de g(x), coloquialmente llamada Notación O Grande, para referirse a las funciones acotadas superiormente por la función g(x).
Formalmente se define:
   $O(g(x))=\left\{{\begin{matrix}f(x):{\mbox{existen }}x_{0},c>0{\mbox{ tales que}}\\\forall x\geq x_{0}>0:0\leq |f(x)|\leq c|g(x)|\end{matrix}}\right\}$
Una función f(x) pertenece a O(g(x)) cuando existe una constante positiva c tal que a partir de un valor $x_{0}$, f(x) no sobrepasa a $cg(x)$. Quiere decir que la función f es inferior a g a partir de un valor dado salvo por un factor constante.
La cota superior asintótica tiene gran importancia en la Teoría de la complejidad computacional cuando se definen las clases de complejidad.
A pesar de que O(g(x)) está definida como un conjunto, se acostumbra escribir f(x)=O(g(x)) en lugar de f(x)∈O(g(x)), ya que la clase de equivalencia de f coincide con el conjunto O(g(x). Muchas veces también se habla de la función nombrando únicamente su expresión, como en x² en lugar de h(x)=x², siempre que esté claro cuál es el parámetro de la función dentro de la expresión. En la gráfica se da un ejemplo esquemático de cómo se comporta $cg(x)$ con respecto a f(x) cuando x tiende a infinito. Nótese además que dicho conjunto es no vacío pues g(x)=O(g(x)).
La cota ajustada asintótica (notación Θ) tiene relación con las cotas asintóticas superior e inferior (notación Ω):
   $f(x)=\Theta (g(x)){\mbox{ si y solo si }}f(x)=O(g(x)){\mbox{ y }}f(x)=\Omega (g(x))\,$

## Propiedades

Sea $E\subseteq \mathbb {R}$, sean $f_{1}:E\to \mathbb {R}$, $g_{1}:E\to \mathbb {R}$, $f_{2}:E\to \mathbb {R}$, $g_{2}:E\to \mathbb {R}$ funciones y $k$ un real. Entonces los siguientes enunciados son ciertos:
    i) Si $f_{1}=O(g_{1})\,$ y $g_{1}=O(g_{2})\,$, entonces $f_{1}=O(g_{2})\,$
    ii) Si $f_{1}=O(g_{1})\,$ y $f_{2}=O(g_{2})\,$,entonces $f_{1}f_{2}=O(g_{1}g_{2})\,$
    iii) $f_{2}O(g_{1})=O(f_{2}g_{1})\,$ (aquí es igualdad entre conjuntos)
    iv) Si $f_{1}=O(g_{1})\,$ y $f_{2}=O(g_{2})\,$, entonces $f_{1}+f_{2}=O\{max(|g_{1}|,|g_{2}|)\}\,$
    v) Si $k\neq 0\,$ entonces $O(g_{1})=O(kg_{1})\,$ (aquí es igualdad entre conjuntos)
    vi) Si $f_{1}=O(g_{1})\,$, entonces $kf_{1}=O(g_{1})\,$.

## Ejemplos

* La función f(x) = x+10 puede ser acotada superiormente por la función g(x) = x². Para demostrarlo basta notar que para todo valor de x ≥ 3.7016, se cumple x+10 ≤ x². Por tanto x+10 = O(x²). Sin embargo, x² no sirve como cota inferior para x+10, es decir, $x^{2}\neq \bigcirc (x+10)$. Observación: Este ejemplo muestra que $f=O(g)\,$ no implica $g=O(f)\,$, es decir, la relación entre funciones dada por la notación de Landau no es simétrica. Sin embargo, sí es reflexiva: $f=O(f)\,$
* La función 200x está acotada superiormente por x². Quiere decir que cuando x tiende a infinito el valor de 200x se puede despreciar con respecto al de x².

## Órdenes usuales para funciones

Los órdenes más utilizados en análisis de algoritmos, en orden creciente, son los siguientes (donde c representa una constante y n el tamaño de la entrada):
| notación | nombre |
| O(1) | orden constante (función acotada) |
| O(log log n) | orden sublogarítmica |
| O(log n) | orden logarítmica |
| O(${\sqrt {n}}$) | orden sublineal |
| O(n) | orden lineal o de primer orden |
| O(n · log n) | orden lineal logarítmica |
| O(n$^2$) | orden cuadrática o de segundo orden |
| O(n$^3$), ... | orden cúbica o de tercer orden, ... |
| O(n$^c$) | orden potencial fija (o polinomial) |
| O(c$^n$), n > 1 | orden exponencial |
| O(n!) | orden factorial |
| O(n$^n$) | orden potencial exponencial |