Notación O grande
La notación O grande es una notación matemática que describe el comportamiento límite de una función cuando el argumento tiende hacia un valor particular o infinito. Big O es miembro de una familia de notaciones inventadas por Paul Bachmann, Edmund Landau y otros, denominadas colectivamente notación de Bachmann-Landau o notación asintótica. La letra O fue elegida por Bachmann para representar Ordnung, es decir, el orden de aproximación.
En informática, la notación O grande se utiliza para clasificar los algoritmos según el tiempo de ejecución o los requisitos de espacio aumentan a medida que crece el tamaño de entrada. En la teoría analítica de números, la notación O grande se usa a menudo para expresar un límite en la diferencia entre una función aritmética y una aproximación mejor entendida; un ejemplo famoso de tal diferencia es el término restante en el teorema de los números primos. La notación Big O también se usa en muchos otros campos para proporcionar estimaciones similares.
La notación Big O caracteriza las funciones según sus tasas de crecimiento: diferentes funciones con la misma tasa de crecimiento asintótica se pueden representar usando la misma notación O. La letra O se usa porque la tasa de crecimiento de una función también se conoce como el orden de la función. Una descripción de una función en términos de notación O grande generalmente solo proporciona un límite superior en la tasa de crecimiento de la función.
Asociadas con la notación O grande hay varias notaciones relacionadas, que utilizan los símbolos o, Ω, ω y Θ, para describir otros tipos de límites en las tasas de crecimiento asintótico.
Definición formal
Vamos f{displaystyle f}, la función a estimar, ser una función valorada real o compleja y dejar g{displaystyle g}, la función de comparación, ser una función real valorada. Que ambas funciones se definan en un subconjunto sin límites de los números reales positivos, y g()x){displaystyle g(x)} ser estrictamente positivo para todos los valores suficientemente grandes x{displaystyle x}. Uno escribe
En muchos contextos, la suposición de que estamos interesados en la tasa de crecimiento como variable x{displaystyle x} va al infinito se deja sin estado, y uno escribe más simplemente que
La notación también se puede utilizar para describir el comportamiento de f{displaystyle f} cerca de un número real a{displaystyle a} (a menudo, a=0{displaystyle a=0}): diremos
As g()x){displaystyle g(x)} es elegido para ser estrictamente positivo para tales valores x{displaystyle x}, ambas definiciones pueden ser unificadas usando el límite superior:
Y en ambas definiciones el punto límite a{displaystyle a} (Whether) JUEGO JUEGO {displaystyle infty } o no) es un punto de agrupación de los dominios de f{displaystyle f} y g{displaystyle g}en todos los barrios a{displaystyle a} tiene que haber infinitamente muchos puntos en común. Además, como se señala en el artículo sobre el límite inferior y el límite superior, el lim supx→ → a{displaystyle textstyle limsup _{xto a} (al menos en la línea de números reales extendidos) siempre existe.
En la ciencia informática, una definición ligeramente más restrictiva es común: f{displaystyle f} y g{displaystyle g} ambos están obligados a ser funciones de algún subconjunto sin límites de los enteros positivos a los números reales no negativos; entonces f()x)=O()g()x)){displaystyle f(x)=O{bigl (}g(x){bigr)} si existen números enteros positivos M{displaystyle M} y n0{displaystyle No. tales que f()n)≤ ≤ Mg()n){displaystyle f(n)leq Mg(n)} para todos n≥ ≥ n0{displaystyle ngeq n_{0}.
Ejemplo
En el uso típico, la notación O es asintótica, es decir, se refiere a x. En este escenario, la contribución de los términos que crecen "más rápido" eventualmente hará que los otros sean irrelevantes. En consecuencia, se pueden aplicar las siguientes reglas de simplificación:
- Si f()x) es una suma de varios términos, si hay uno con mayor tasa de crecimiento, se puede mantener, y todos los demás omitidos.
- Si f()x) es un producto de varios factores, cualquier constante (terminos en el producto que no dependen de xSe puede omitir.
Por ejemplo, sea f(x) = 6x4 − 2x3 + 5, y supongamos que deseamos simplificar esta función, usando O, para describir su tasa de crecimiento a medida que x se acerca al infinito. Esta función es la suma de tres términos: 6x4, −2x3 y 5. De estos tres términos, el que tiene la tasa de crecimiento más alta es el que tiene el exponente más grande en función de x, a saber, 6x4. Ahora se puede aplicar la segunda regla: 6x4 es un producto de 6 y x4 en los que el primer factor no depende de x. Omitir este factor da como resultado la forma simplificada x4. Por lo tanto, decimos que f(x) es una "gran O" de x4. Matemáticamente, podemos escribir f(x) = O(x4). Uno puede confirmar este cálculo usando la definición formal: let f(x) = 6x 4 − 2x3 + 5 y g( x) = x4. Aplicando la definición formal anterior, la afirmación de que f(x) = O(x 4) es equivalente a su expansión,
Uso
La notación Big O tiene dos áreas principales de aplicación:
- En matemáticas, se utiliza comúnmente para describir cómo una serie finita aproxima una función determinada, especialmente en el caso de una serie truncada de Taylor o expansión asintotica
- En la ciencia informática, es útil en el análisis de algoritmos
En ambas aplicaciones, la función g(x) que aparece dentro de O(·) normalmente se elige para que sea lo más simple posible, omitiendo factores constantes y términos de orden inferior.
Hay dos usos formalmente cercanos, pero notablemente diferentes, de esta notación:
- infinito
- Asintotismo infinitesimal.
Sin embargo, esta distinción es solo en aplicación y no en principio: la definición formal de la "gran O" es el mismo para ambos casos, solo que con diferentes límites para el argumento de la función.
Asintótica infinita
La notación Big O es útil cuando se analiza la eficiencia de los algoritmos. Por ejemplo, el tiempo (o la cantidad de pasos) que lleva completar un problema de tamaño n podría ser T(n) = 4n2 − 2n + 2. A medida que n crece, n2 el término llegará a dominar, de modo que todos los demás términos pueden ignorarse; por ejemplo, cuando n = 500, el término 4n2 es 1000 veces más grande que 2n término. Ignorar este último tendría un efecto insignificante en el valor de la expresión para la mayoría de los propósitos. Además, los coeficientes se vuelven irrelevantes si los comparamos con cualquier otro orden de expresión, como una expresión que contiene un término n3 o n4. Incluso si T(n) = 1,000,000n2, si U(n) = n3, el último siempre superará al primero una vez que n crezca más de 1,000,000 (T(1 000 000) = 1 000 0003 = U(1 000 000)). Además, la cantidad de pasos depende de los detalles del modelo de máquina en el que se ejecuta el algoritmo, pero los diferentes tipos de máquinas suelen variar solo por un factor constante en la cantidad de pasos necesarios para ejecutar un algoritmo. Entonces, la notación O grande captura lo que queda: escribimos
- T()n)=O()n2){displaystyle T(n)=O(n^{2}}
o
- T()n)▪ ▪ O()n2){displaystyle T(n)in O(n^{2}
y digamos que el algoritmo tiene orden de n2 complejidad de tiempo. El signo "=" no pretende expresar "es igual a" en su sentido matemático normal, sino más bien un 'es' más coloquial, por lo que la segunda expresión a veces se considera más precisa (consulte la discusión sobre el 'signo igual' a continuación) mientras que la primera se considera por algunos como un abuso de notación.
Asintótica infinitesimal
Gran O también se puede usar para describir el término de error en una aproximación a una función matemática. Los términos más significativos se escriben explícitamente y luego los términos menos significativos se resumen en un solo término O grande. Considere, por ejemplo, la serie exponencial y dos expresiones de la misma que son válidas cuando x es pequeño:
- ex=1+x+x22!+x33!+x44!+⋯ ⋯ para todosx=1+x+x22+O()x3)comox→ → 0=1+x+O()x2)comox→ → 0{displaystyle {begin{aligned}e^{x} {x^{2}{2}}}+{frac {x^{3}{3}}}+{frac {x^{4} {4}}}+dotsb {fnMicrosoft Sans Serif}x[4pt] {x^{2}{2}}+O(x^{3}) Sentado {text{as }xto 0[4pt] simultáneamente=1+x+O(x^{2})
La segunda expresión (la que tiene O(x3)) significa el valor absoluto del error ex − (1 + x + x2/2) es a lo sumo algunos tiempos constantes |x3| cuando x está lo suficientemente cerca de 0.
Propiedades
Si la función f se puede escribir como una suma finita de otras funciones, entonces la de mayor crecimiento determina el orden de f(n). Por ejemplo,
- f()n)=9log n+5()log n)4+3n2+2n3=O()n3)comon→ → JUEGO JUEGO .{displaystyle f(n)=9log n+5(log n)^{4}+3n^{2}+2n^{3}=O(n^{3})qquad {text{as }nto infty.}
En particular, si una función puede estar limitada por un polinomio en n, entonces como n tiende a infinito, uno puede ignorar los términos de orden inferior del polinomio. Los conjuntos O(nc) y O(cn) son muy diferentes. Si c es mayor que uno, este último crece mucho más rápido. Una función que crece más rápido que nc para cualquier c se llama superpolinomio. Una que crece más lentamente que cualquier función exponencial de la forma cn se llama subexponencial. Un algoritmo puede requerir un tiempo que sea tanto superpolinomial como subexponencial; ejemplos de esto incluyen los algoritmos más rápidos conocidos para la factorización de enteros y la función nlog n.
Podemos ignorar cualquier potencia de n dentro de los logaritmos. El conjunto O(log n) es exactamente igual que O (registro(nc)). Los logaritmos difieren solo por un factor constante (ya que log(nc) = c log n) y, por lo tanto, la notación O grande ignora eso. De manera similar, los logaritmos con diferentes bases constantes son equivalentes. Por otro lado, las exponenciales con diferentes bases no son del mismo orden. Por ejemplo, 2n y 3n no son del mismo orden.
Cambiar las unidades puede o no afectar el orden del algoritmo resultante. Cambiar unidades es equivalente a multiplicar la variable apropiada por una constante dondequiera que aparezca. Por ejemplo, si un algoritmo se ejecuta en el orden de n2, reemplazando el estilo n por cn significa que el algoritmo se ejecuta en el orden de c2n2, y la notación O grande ignora la constante c2. Esto se puede escribir como c2n2 = O(n2). Sin embargo, si un algoritmo se ejecuta en el orden de 2n, reemplazando el estilo n con cn da 2cn = (2c)n. Esto no es equivalente a 2n en general. El cambio de variables también puede afectar el orden del algoritmo resultante. Por ejemplo, si el tiempo de ejecución de un algoritmo es O(n) cuando se mide en términos del número n de dígitos de un número de entrada x, entonces su tiempo de ejecución es O(log x) cuando se mide como una función del número de entrada x en sí mismo, porque n = O(log x).
Producto
- f1=O()g1)yf2=O()g2)⇒ ⇒ f1f2=O()g1g2){displaystyle f_{1}=O(g_{1}){text{ and } {2}=O(g_{2})Rightarrow f_{1}f_{2}=O(g_{1}g_{2}}
- f⋅ ⋅ O()g)=O()fg){displaystyle fcdot O(g)=O(fg)}
Suma
Si f1=O()g1){displaystyle f_{1}=O(g_{1}} y f2=O()g2){displaystyle f_{2}=O(g_{2}} entonces f1+f2=O()max()g1,g2)){displaystyle f_{1}+f_{2}=O(max(g_{1},g_{2})}}. De ello se desprende que si f1=O()g){displaystyle f_{1}=O(g)} y f2=O()g){displaystyle f_{2}=O(g)} entonces f1+f2▪ ▪ O()g){displaystyle f_{1}+f_{2}in O(g)}. En otras palabras, esta segunda declaración dice que O()g){displaystyle O(g)} es un cono convexo.
Multiplicación por una constante
Vamos k ser una constante no cero. Entonces... O()SilenciokSilencio⋅ ⋅ g)=O()g){displaystyle O(Principalmente bajo palabra)=O(g)}. En otras palabras, si f=O()g){displaystyle f=O(g)}, entonces k⋅ ⋅ f=O()g).{displaystyle kcdot f=O(g).}
Múltiples variables
Grande O (y poco o, Ω, etc.) también se puede utilizar con múltiples variables. Para definir grande O formalmente para múltiples variables, suponga f{displaystyle f} y g{displaystyle g} son dos funciones definidas en algún subconjunto Rn{displaystyle mathbb {R} {} {}} {fn}}. Dijimos
- f()x)esO()g()x))comox→ → JUEGO JUEGO {displaystyle f(mathbf {x}){text{ is }O(g(mathbf {x})quad {text{ as }mathbf {x} to infty }
si y sólo si existen constantes M{displaystyle M} y 0}" xmlns="http://www.w3.org/1998/Math/MathML">C■0{displaystyle C confiar0}0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/c84d4126c6df243734f9355927c026df6b0d3859" style="vertical-align: -0.338ex; width:6.027ex; height:2.176ex;"/> tales que Silenciof()x)Silencio≤ ≤ CSilenciog()x)Silencio{displaystyle Silenciof(mathbf {x}) para todos x{displaystyle mathbf {x} con xi≥ ≥ M{displaystyle x_{i}gq M. para algunos i.{displaystyle i.}Equivalentemente, la condición de que xi≥ ≥ M{displaystyle x_{i}gq M. para algunos i{displaystyle i} puede ser escrito .. x.. JUEGO JUEGO ≥ ≥ M{displaystylefnMitbf {x} ################################################################################################################################################################################################################################################################ M., donde .. x.. JUEGO JUEGO {displaystylefnMitbf {x} {fnK} denota la norma Chebyshev. Por ejemplo, la declaración
- f()n,m)=n2+m3+O()n+m)comon,m→ → JUEGO JUEGO {displaystyle f(n,m)=n^{2}+m^{3}+O(n+m)quad {text{ as }n,mto infty }
afirma que existen constantes C y M tales que
- Silenciof()n,m)− − ()n2+m3)Silencio≤ ≤ CSilencion+mSilencio{displaystyle Silenciof(n,m)-(n^{2}+m^{3} Cliven+m sometida}
cada vez m≥ ≥ M{displaystyle mgeq M} o n≥ ≥ M{displaystyle ngeq M} sostiene. Esta definición permite todas las coordenadas de x{displaystyle mathbf {x} aumentar a infinito. En particular, la declaración
- f()n,m)=O()nm)comon,m→ → JUEGO JUEGO {displaystyle f(n,m)=O(n^{m}quad {text{ as }n,mto infty}
(es decir, ∃ ∃ C∃ ∃ MО О nО О m⋯ ⋯ {displaystyle exists C,exists M,forall n,forall m,cdots }) es bastante diferente de
- О О m:: f()n,m)=O()nm)comon→ → JUEGO JUEGO {displaystyle forall mcolon ~f(n,m)=O(n^{m}quad {text{ as }nto infty }
(es decir, О О m∃ ∃ C∃ ∃ MО О n⋯ ⋯ {displaystyle forall m,exists C,exists M,forall n,cdots }).
De acuerdo con esta definición, el subconjunto en el que se define una función es significativo cuando se generalizan las declaraciones de la configuración univariada al entorno multivariable. Por ejemplo, si f()n,m)=1{displaystyle f(n,m)=1} y g()n,m)=n{displaystyle g(n,m)=n}, entonces f()n,m)=O()g()n,m)){displaystyle f(n,m)=O(g(n,m)} si restringimos f{displaystyle f} y g{displaystyle g} a [1,JUEGO JUEGO )2{displaystyle [1,infty], pero no si se definen en [0,JUEGO JUEGO )2{displaystyle [0,infty].
Esta no es la única generalización de O grande a funciones multivariadas y, en la práctica, existe cierta inconsistencia en la elección de la definición.
Cuestiones de notación
Signo igual
La declaración "f(x) es O(g(x ))" como se definió anteriormente, generalmente se escribe como f(x) = O(g(x)). Algunos consideran que esto es un abuso de notación, ya que el uso del signo igual podría ser engañoso ya que sugiere una simetría que esta declaración no tiene. Como dice de Bruijn, O(x) = O(x2) es cierto pero O(x2) = O(x) no lo es. Knuth describe declaraciones como "igualdades unidireccionales", ya que si los lados pudieran invertirse, "podríamos deducir cosas ridículas como n = n2 de las identidades n = O (n2) y n2 = O(n2)." En otra carta, Knuth también señaló que "el signo de igualdad no es simétrico con respecto a tales notaciones", ya que, en esta notación, "los matemáticos suelen usar el signo = como usan la palabra & #34;es" en español: Aristóteles es un hombre, pero un hombre no es necesariamente Aristóteles.
Por estas razones, sería más preciso usar la notación de conjuntos y escribir f(x) ∈ O(g(x)) (léase como: "f(x) es un elemento de O(g(x))", o &# 34;f(x) está en el conjunto O(g(x))"), pensando en O(g(x)) como la clase de todos funciones h(x) tales que |h(x)| ≤ C|g(x)| para alguna constante C. Sin embargo, el uso del signo igual es habitual.
Otros operadores aritméticos
La notación Big O también se puede usar junto con otros operadores aritméticos en ecuaciones más complicadas. Por ejemplo, h(x) + O(f(x)) denota la colección de funciones que tienen el crecimiento de h(x) más una parte cuyo crecimiento se limita al de f(x). Por lo tanto,
- g()x)=h()x)+O()f()x)){displaystyle g(x)=h(x)+O(f(x)}
expresa lo mismo que
- g()x)− − h()x)=O()f()x)).{displaystyle g(x)-h(x)=O(f(x)). }
Ejemplo
Supongamos que se está desarrollando un algoritmo para operar en un conjunto de n elementos. Sus desarrolladores están interesados en encontrar una función T(n) que exprese cuánto tardará en ejecutarse el algoritmo (en alguna medida de tiempo arbitraria) en términos del número de elementos en el conjunto de entrada. El algoritmo funciona llamando primero a una subrutina para ordenar los elementos del conjunto y luego realizar sus propias operaciones. La clasificación tiene una complejidad de tiempo conocida de O(n2), y después de que se ejecuta la subrutina, el algoritmo debe tomar una 55n3 + 2n + 10 pasos antes de que termine. Por lo tanto, la complejidad temporal general del algoritmo se puede expresar como T(n) = 55n3 + O(n2). Aquí los términos 2n + 10 se subsumen dentro de O(n) de crecimiento más rápido 2). Nuevamente, este uso ignora parte del significado formal de "=" símbolo, pero permite usar la notación O grande como una especie de marcador de posición conveniente.
Múltiples usos
En uso más complicado, O(·) puede aparecer en diferentes lugares en una ecuación, incluso varias veces a cada lado. Por ejemplo, los siguientes son verdaderos n→ → JUEGO JUEGO {displaystyle nto infty }:
Composición tipográfica
Grande O es tipología como una maleta superior italicizada "O", como en el siguiente ejemplo: O()n2){displaystyle O(n^{2}}. En TeX, se produce simplemente escribiendo O en modo matemático. A diferencia de las notaciones de Bachmann-Landau, no necesita ningún símbolo especial. Sin embargo, algunos autores utilizan la variante caligráfica O{displaystyle {fnMithcal}} en su lugar.
Órdenes de funciones comunes
Aquí hay una lista de clases de funciones que se encuentran comúnmente al analizar el tiempo de ejecución de un algoritmo. En cada caso, c es una constante positiva y n crece sin límite. Las funciones de crecimiento más lento generalmente se enumeran primero.
Notación | Nombre | Ejemplo |
---|---|---|
O()1){displaystyle O(1)} | constante | Determinar si un número binario es uniforme o extraño; Calcular ()− − 1)n{displaystyle (-1)}; Usando una mesa de búsqueda de tamaño constante |
O()log log n){displaystyle O(log log n)} | doble logarítmica | Número medio de comparaciones gastadas encontrando un artículo usando búsqueda de interpolación en un conjunto de valores distribuidos uniformemente |
O()log n){displaystyle O(log n)} | logaritmic | Encontrar un artículo en un array ordenados con una búsqueda binaria o un árbol de búsqueda equilibrado, así como todas las operaciones en un montón binomio |
O()()log n)c){displaystyle O(log n)} 1}" xmlns="http://www.w3.org/1998/Math/MathML">c■1{textstyle c]1}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/9057ec1c55def34aa105650bfe9491240553d160" style="vertical-align: -0.338ex; width:5.268ex; height:2.176ex;"/> | polilogarítmica | Ordenación de cadena de matriz se puede resolver en el tiempo polilogarítmico en una máquina de acceso aleatorio paralelo. |
O()nc){displaystyle O(n^{c}} <math alttext="{textstyle 0<c0.c.1{textstyle 0 se hizo realidad<img alt="{textstyle 0<c | poder fraccional | Búsqueda en un árbol k-d |
O()n){displaystyle O(n)} | lineal | Encontrar un artículo en una lista sin surtido o en un array sin surtido; añadir dos n-bit enteros por carga ondulada |
O()nlogAlternativa Alternativa n){displaystyle O(nlog ^{*}n)} | n Log-star n | Realizar triangulación de un simple polígono usando el algoritmo de Seidel, o el algoritmo de unión-encontrado. Note que 1end{cases}}}" xmlns="http://www.w3.org/1998/Math/MathML">logAlternativa Alternativa ()n)={}0,sin≤ ≤ 11+logAlternativa Alternativa ()log n),sin■1{displaystyle log ^{*}(n)={begin{cases}0, reducida{text{if }nleq 11+log ^{*}(log n), limit{text{if }nend{cases}}}}}}}}}1end{cases}}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/8a8ce0b95ab4bdc244b0ad464677f1709df7c562" style="vertical-align: -2.505ex; width:37.979ex; height:6.176ex;"/> |
O()nlog n)=O()log n!){displaystyle O(nlog n)=O(log n)} | linearithmic, loglinear, quasilinear, or "n log n" | Realización de una rápida transformación Fourier; tipo de comparación más rápido posible; heapsort y combinar tipo |
O()n2){displaystyle O(n^{2}} | quadratic | Multiplicando dos n- números de dígitos por multiplicación de libros escolares; algoritmos de clasificación simples, tales como burbujas, tipo de selección y tipo de inserción; (caso peor) ligados a algunos algoritmos de clasificación generalmente más rápidos como el surtido rápido, Shellsort y tipo de árbol |
O()nc){displaystyle O(n^{c}} | polinomio o algebraico | Prótesis de gramática conjunción de árboles; ajuste máximo para gráficos bipartitos; encontrar el determinante con LU descomposición |
Ln[α α ,c]=e()c+o()1))()In n)α α ()In In n)1− − α α {displaystyle L_{n}[alphac]=e^{(c+o(1))(ln n)^{alpha }(lnln n)^{1-alpha } <math alttext="{textstyle 0<alpha 0.α α .1{textstyle 0 0 0 0.<img alt="{textstyle 0<alpha | L-notation or sub-exponential | Factorización de un número utilizando el tamiz cuadrático o el sieve de campo número |
O()cn){displaystyle O(c^{n}} 1}" xmlns="http://www.w3.org/1998/Math/MathML">c■1{textstyle c]1}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/9057ec1c55def34aa105650bfe9491240553d160" style="vertical-align: -0.338ex; width:5.268ex; height:2.176ex;"/> | exponencial | Encontrar la solución (exacta) al problema del vendedor que viaja utilizando programación dinámica; determinar si dos declaraciones lógicas son equivalentes mediante búsqueda de fuerza bruta |
O()n!){displaystyle O(n!)} | factorial | Resolver el problema de los vendedores itinerantes mediante la búsqueda de fuerza bruta; generar todas las permutaciones no restringidas de una pose; encontrar el determinante con la expansión de Laplace; enumerar todas las particiones de un conjunto |
La declaración f()n)=O()n!){displaystyle f(n)=O(n)} a veces se debilita f()n)=O()nn){displaystyle f(n)=Oleft(n^{n}right)} para obtener fórmulas más simples para la complejidad asintotica. Para cualquier 0}" xmlns="http://www.w3.org/1998/Math/MathML">k■0{displaystyle k]0" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/27b3af208b148139eefc03f0f80fa94c38c5af45" style="vertical-align: -0.338ex; width:5.472ex; height:2.176ex;"/> y 0}" xmlns="http://www.w3.org/1998/Math/MathML">c■0{displaystyle c]0}0" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/2ba126f626d61752f62eaacaf11761a54de4dc84" style="vertical-align: -0.338ex; width:5.268ex; height:2.176ex;"/>, O()nc()log n)k){displaystyle O(n^{c}(log n)^{k} es un subconjunto de O()nc+ε ε ){displaystyle O(n^{c+varepsilon }} para cualquier 0}" xmlns="http://www.w3.org/1998/Math/MathML">ε ε ■0{displaystyle varepsilon }0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e04ec3670b50384a3ce48aca42e7cc5131a06b12" style="vertical-align: -0.338ex; width:5.344ex; height:2.176ex;"/>, así se puede considerar como un polinomio con algún orden más grande.
Notaciones asintóticas relacionadas
Big O es ampliamente utilizado en informática. Junto con algunas otras notaciones relacionadas, forma la familia de notaciones de Bachmann-Landau.
Notación de o pequeña
Intuitivamente, la afirmación "f(x) es o(g(x))" (léase "f(x) es la pequeña o de g(x)") significa que g(x) crece mucho más rápido que f(x). Como antes, sea f una función de valor real o complejo y g una función de valor real, ambas definidas en algún subconjunto ilimitado de números reales positivos, tal que g(x) es estrictamente positivo para todos los valores suficientemente grandes de x. uno escribe
- f()x)=o()g()x))comox→ → JUEGO JUEGO {displaystyle f(x)=o(g(x))quad {text{ as }xto infty }
si por cada constante positiva ε existe una constante x0{displaystyle x_{0} tales que
- Silenciof()x)Silencio≤ ≤ ε ε g()x)para todosx≥ ≥ x0.{displaystyle Silenciof(x) soportarleq varepsilon g(x)quad {text{ for all }xgeq x_{0}}
Por ejemplo, uno tiene
- 2x=o()x2){displaystyle 2x=o(x^{2}} y 1/x=o()1),{displaystyle 1/x=o(1),} ambos x→ → JUEGO JUEGO .{displaystyle xto infty.}
La diferencia entre la definición de la notación grande-O y la definición de little-o es que mientras que la primera tiene que ser verdadera para al menos uno constante M, este último debe esperar cada uno constante positiva ε, por pequeño que sea. De esta manera, la pequeña notación hace una más firme declaración que la notación de gran-O correspondiente: cada función que es poco-o de g es también grande-O de g, pero no todas las funciones que son grandes g también es poco-o de g. Por ejemplo, 2x2=O()x2){displaystyle 2x^{2}=O(x^{2}} pero 2x2ل ل o()x2){displaystyle 2x^{2}neq o(x^{2}}.
As g()x) es no cero, o al menos se convierte en no cero más allá de cierto punto, la relación f()x)=o()g()x)){displaystyle f(x)=o(g(x)} equivale a
- limx→ → JUEGO JUEGO f()x)g()x)=0{displaystyle lim _{xto infty}{frac {f(x)}{g(x)}=0} (y esto es de hecho cómo Landau definió originalmente la pequeña notación).
Little-o respeta una serie de operaciones aritméticas. Por ejemplo,
- si c es una constante no cero y f=o()g){displaystyle f=o(g)} entonces c⋅ ⋅ f=o()g){displaystyle ccdot f=o(g)}, y
- si f=o()F){displaystyle f=o(F)} y g=o()G){displaystyle g=o(G)} entonces f⋅ ⋅ g=o()F⋅ ⋅ G).{displaystyle fcdot g=o(Fcdot G).}
También satisface una relación de transitividad:
- si f=o()g){displaystyle f=o(g)} y g=o()h){displaystyle g=o(h)} entonces f=o()h).{displaystyle f=o(h).}
Notación Big Omega
Otra notación asintotica es Ω Ω {displaystyle Omega }, lee "grande omega". Hay dos definiciones generalizadas e incompatibles de la declaración
- f()x)=Ω Ω ()g()x)){displaystyle f(x)=Omega (g(x)} como x→ → a{displaystyle xto a},
donde a es un número real, ∞, o −∞, donde f y g son funciones reales definidas en un entorno de a, y donde g es positivo en este vecindario.
La definición de Hardy-Littlewood se usa principalmente en la teoría analítica de números y la definición de Knuth principalmente en la teoría de la complejidad computacional; las definiciones no son equivalentes.
La definición de Hardy-Littlewood
En 1914 Godfrey Harold Hardy y John Edensor Littlewood presentaron el nuevo símbolo Ω Ω {displaystyle Omega }, que se define como sigue:
- f()x)=Ω Ω ()g()x)){displaystyle f(x)=Omega (g(x)} como x→ → JUEGO JUEGO {displaystyle xto infty } si 0.}" xmlns="http://www.w3.org/1998/Math/MathML">lim supx→ → JUEGO JUEGO Silenciof()x)g()x)Silencio■0.{displaystyle limsup _{xto infty }left forever{frac {f(x)}{g(x)}}right perpetua0.}0.}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/f02693ebc49fda74d24532947d3ec8ad39161c0f" style="vertical-align: -2.671ex; width:18.961ex; height:6.509ex;"/>
Así f()x)=Ω Ω ()g()x)){displaystyle f(x)=Omega (g(x)} es la negación de f()x)=o()g()x)){displaystyle f(x)=o(g(x)}.
En 1916 los mismos autores presentaron los dos nuevos símbolos Ω Ω R{displaystyle Omega ¿Qué? y Ω Ω L{displaystyle Omega _{L}}, definido como:
- f()x)=Ω Ω R()g()x)){displaystyle f(x)=Omega _{R}(g(x)} como x→ → JUEGO JUEGO {displaystyle xto infty } si 0}" xmlns="http://www.w3.org/1998/Math/MathML">lim supx→ → JUEGO JUEGO f()x)g()x)■0{displaystyle limsup _{xto infty }{frac {f(x)}{g(x)}] 0}0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/5c07767c7745ce1d57ae0684265036fe6542f232" style="vertical-align: -2.671ex; width:17.02ex; height:6.509ex;"/>;
- f()x)=Ω Ω L()g()x)){displaystyle f(x)=Omega _{L}(g(x)} como x→ → JUEGO JUEGO {displaystyle xto infty } si <math alttext="{displaystyle liminf _{xto infty }{frac {f(x)}{g(x)}}lim infx→ → JUEGO JUEGO f()x)g()x).0.{displaystyle liminf _{xto infty }{frac {f(x)}{g(x)}}} {0}}<img alt="{displaystyle liminf _{xto infty }{frac {f(x)}{g(x)}}
Estos símbolos fueron utilizados por Edmund Landau, con los mismos significados, en 1924. Después de Landau, las notaciones nunca se utilizaron de nuevo exactamente así; Ω Ω R{displaystyle Omega ¿Qué? se convirtió en Ω Ω +{displaystyle Omega _{+}} y Ω Ω L{displaystyle Omega _{L}} se convirtió en Ω Ω − − {displaystyle Omega _{-}}.
Estos tres símbolos Ω Ω ,Ω Ω +,Ω Ω − − {displaystyle OmegaOmega Omega., así como f()x)=Ω Ω ± ± ()g()x)){displaystyle f(x)=Omega _{pm }(g(x)} (que significa que f()x)=Ω Ω +()g()x)){displaystyle f(x)=Omega _{+}(g(x)} y f()x)=Ω Ω − − ()g()x)){displaystyle f(x)=Omega _{-}(g(x)} son ambos satisfechos), se utilizan actualmente en la teoría de números analíticos.
Ejemplos simples
Tenemos
- pecado x=Ω Ω ()1){displaystyle sin x=Omega (1)} como x→ → JUEGO JUEGO ,{displaystyle xto infty}
y más precisamente
- pecado x=Ω Ω ± ± ()1){displaystyle sin x=Omega _{pm }(1)} como x→ → JUEGO JUEGO .{displaystyle xto infty.}
Tenemos
- pecado x+1=Ω Ω ()1){displaystyle sin x+1=Omega (1)} como x→ → JUEGO JUEGO ,{displaystyle xto infty}
y más precisamente
- pecado x+1=Ω Ω +()1){displaystyle sin x+1=Omega _{+}(1)} como x→ → JUEGO JUEGO ;{displaystyle xto infty;}
sin embargo
- pecado x+1لΩ Ω − − ()1){displaystyle sin x+1not =Omega _{-}(1)} como x→ → JUEGO JUEGO .{displaystyle xto infty.}
La definición de Knuth
En 1976 Donald Knuth publicó un documento para justificar su uso del Ω Ω {displaystyle Omega }- Símbolo para describir una propiedad más fuerte. Knuth escribió: "Para todas las aplicaciones que he visto hasta ahora en la informática, un requisito más fuerte... es mucho más apropiado". Definió
- f()x)=Ω Ω ()g()x)).. g()x)=O()f()x)){displaystyle f(x)=Omega (g(x))Leftrightarrow g(x)=O(f(x)}
con el comentario: "Aunque he cambiado la definición de Hardy y Littlewood Ω Ω {displaystyle Omega }, Me siento justificado al hacerlo porque su definición no es de ningún modo en uso amplio, y porque hay otras maneras de decir lo que quieren decir en los casos comparativamente raros cuando su definición se aplica."
Familia de notaciones de Bachmann-Landau
Notación | Nombre | Descripción | Definición formal | Definición |
---|---|---|---|---|
f()n)=o()g()n)){displaystyle f(n)=o(g(n)} | Pequeña O; Pequeña Oh | f está dominado por g asintotically | 0,exists n_{0},forall n>n_{0}colon |f(n)|О О k■0∃ ∃ n0О О n■n0:: Silenciof()n)Silencio.kg()n){fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif}0,exists n_{0},forall n>n_{0}colon |f(n)| | limn→ → JUEGO JUEGO f()n)g()n)=0{displaystyle lim _{nto infty}{frac {f(n)}{g(n)}=0} |
f()n)=O()g()n)){displaystyle f(n)=O(g(n)} | Big O; Big Oh; Big Omicron | SilenciofSilencio{displaystyle Silencioso está obligado por encima g (hasta el factor constante) asintotípicamente | 0,exists n_{0},forall n>n_{0}colon |f(n)|leq k,g(n)}" xmlns="http://www.w3.org/1998/Math/MathML">∃ ∃ k■0∃ ∃ n0О О n■n0:: Silenciof()n)Silencio≤ ≤ kg()n){displaystyle exists k Conf0,exists n_{0},forall no confían_{0}colon Silenciof(n)0,exists n_{0},forall n>n_{0}colon |f(n)|leq k,g(n)}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/16115602291a322030d1f83eaa012a3e8f11e10d" style="vertical-align: -0.838ex; width:35.342ex; height:2.843ex;"/> | <math alttext="{displaystyle limsup _{nto infty }{frac {f(n)}{g(n)}}lim supn→ → JUEGO JUEGO f()n)g()n).JUEGO JUEGO {displaystyle limsup _{nto infty }{frac {f(n)}{g(n)}} {infty }} {infty }<img alt="{displaystyle limsup _{nto infty }{frac {f(n)}{g(n)}} |
f()n)=.. ()g()n)){displaystyle f(n)=Theta (g(n)} | Big Theta | f está obligado tanto por encima como por debajo g asintotically | 0,exists k_{2}>0,exists n_{0},forall n>n_{0}colon }" xmlns="http://www.w3.org/1998/Math/MathML">∃ ∃ k1■0∃ ∃ k2■0∃ ∃ n0О О n■n0:: {displaystyle exists k_{1} {0},exists k_{2}] confianza0,exists n_{0},forall n título0,exists k_{2}>0,exists n_{0},forall n>n_{0}colon }" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/be379e6bea41362b562f8783c99e54cc4b716ca2" style="vertical-align: -0.671ex; width:29.422ex; height:2.509ex;"/> k1g()n)≤ ≤ f()n)≤ ≤ k2g()n)[displaystyle k_{1},g(n)leq f(n)leq k_{2},g(n)} | f()n)=O()g()n)){displaystyle f(n)=O(g(n)} y f()n)=Ω Ω ()g()n)){displaystyle f(n)=Omega (g(n)} (Versión numérica) |
f()n)♪ ♪ g()n){displaystyle f(n)sim g(n)} | Por orden de | f es igual a g asintotically | 0,exists n_{0},forall n>n_{0}colon left|{frac {f(n)}{g(n)}}-1right|О О ε ε ■0∃ ∃ n0О О n■n0:: Silenciof()n)g()n)− − 1Silencio.ε ε {displaystyle forall varepsilon √0,exists n_{0},forall n títulon_{0}colon left sometida{frac {f(n)}{g(n)}}}-1derechactamente escuchadavarepsilon }0,exists n_{0},forall n>n_{0}colon left|{frac {f(n)}{g(n)}}-1right| | limn→ → JUEGO JUEGO f()n)g()n)=1{displaystyle lim _{nto infty}{frac {f(n)}{g(n)}}=1} |
f()n)=Ω Ω ()g()n)){displaystyle f(n)=Omega (g(n)} | Gran Omega en la teoría de la complejidad (Knuth) | f se vincula a continuación g asintotically | 0,exists n_{0},forall n>n_{0}colon f(n)geq k,g(n)}" xmlns="http://www.w3.org/1998/Math/MathML">∃ ∃ k■0∃ ∃ n0О О n■n0:: f()n)≥ ≥ kg()n){displaystyle exists k título0,exists n_{0},forall no confían_{0}colon f(n)geq k,g(n)}0,exists n_{0},forall n>n_{0}colon f(n)geq k,g(n)}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bb5154c98624eb114e71485abb7ec1396d157e6a" style="vertical-align: -0.838ex; width:34.048ex; height:2.843ex;"/> | 0}" xmlns="http://www.w3.org/1998/Math/MathML">lim infn→ → JUEGO JUEGO f()n)g()n)■0{displaystyle liminf _{nto infty }{frac {f(n)}{g(n)} {n]} {f}0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/8d9e629f09dbf872b91187297980c2e624d58a54" style="vertical-align: -2.671ex; width:16.235ex; height:6.509ex;"/> |
f()n)=⋅ ⋅ ()g()n)){displaystyle f(n)=omega (g(n)} | Pequeña Omega | f dominados g asintotically | 0,exists n_{0},forall n>n_{0}colon f(n)>k,g(n)}" xmlns="http://www.w3.org/1998/Math/MathML">О О k■0∃ ∃ n0О О n■n0:: f()n)■kg()n){fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif} {fnMicrosoft Sans Serif}0,exists n_{0},forall n>n_{0}colon f(n)>k,g(n)}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/b016c45b28b07815ff7f1e86ce09064f61057faf" style="vertical-align: -0.838ex; width:34.048ex; height:2.843ex;"/> | limn→ → JUEGO JUEGO f()n)g()n)=JUEGO JUEGO {displaystyle lim _{nto infty}{frac {f(n)}{g(n)}=infty } |
f()n)=Ω Ω ()g()n)){displaystyle f(n)=Omega (g(n)} | Gran Omega en la teoría de números (Hardy-Littlewood) | SilenciofSilencio{displaystyle Silencioso no está dominado por g asintotically | 0,forall n_{0},exists n>n_{0}colon |f(n)|geq k,g(n)}" xmlns="http://www.w3.org/1998/Math/MathML">∃ ∃ k■0О О n0∃ ∃ n■n0:: Silenciof()n)Silencio≥ ≥ kg()n){displaystyle exists k confía0,forall n_{0},exists n confían_{0}colon Silenciof(n)0,forall n_{0},exists n>n_{0}colon |f(n)|geq k,g(n)}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/ee1de6bf9135e3729da954f9a7e35225a1689c31" style="vertical-align: -0.838ex; width:35.342ex; height:2.843ex;"/> | 0}" xmlns="http://www.w3.org/1998/Math/MathML">lim supn→ → JUEGO JUEGO Silenciof()n)Silenciog()n)■0{displaystyle limsup _{nto infty }{frac {left habitf(n)right sobre la vida}{g(n)}} {}}}}}0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/6fd52d75e1283fbf16cee8ade84c95a94b39e776" style="vertical-align: -2.671ex; width:18.379ex; height:6.509ex;"/> |
Las definiciones límite suponen 0}" xmlns="http://www.w3.org/1998/Math/MathML">g()n)■0{displaystyle g(n)}0}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/59f58b017ed2f12e925640328d716644bced11d4" style="vertical-align: -0.838ex; width:8.581ex; height:2.843ex;"/> suficientemente grande n{displaystyle n}. La tabla está (en parte) clasificada de la más pequeña a la más grande, en el sentido de que o,O,.. ,♪ ♪ ,{displaystyle o,O,Thetasim} (Versión de Knuth) Ω Ω ,⋅ ⋅ {displaystyle Omegaomega } en funciones corresponden a <math alttext="{displaystyle .,≤ ≤ ,.. ,=,{displaystyle ■,leqapprox=,}<img alt="{displaystyle }" xmlns="http://www.w3.org/1998/Math/MathML">≥ ≥ ,■{displaystyle geq confianza}}" aria-hidden="true" class="mwe-math-fallback-image-inline" src="https://wikimedia.org/api/rest_v1/media/math/render/svg/8d0adc8772efbceb6ee25889368c7e0b08c1abf8" style="vertical-align: -0.671ex; width:4.65ex; height:2.343ex;"/> en la línea real (la versión Hardy-Littlewood de Ω Ω {displaystyle Omega }, sin embargo, no corresponde a tal descripción).
La ciencia informática utiliza el gran O{displaystyle O., grande Theta .. {displaystyle Theta }, poco o{displaystyle o}, pequeña omega ⋅ ⋅ {displaystyle omega } y la gran Omega de Knuth Ω Ω {displaystyle Omega } notaciones. La teoría del número analítico a menudo utiliza el grande O{displaystyle O., pequeño o{displaystyle o}, Hardy-Littlewood grande Omega Ω Ω {displaystyle Omega } (con o sin los subscriptos +, − o ±) y ♪ ♪ {displaystyle sim } notaciones. La pequeña omega ⋅ ⋅ {displaystyle omega } la notación no se utiliza tan a menudo en el análisis.
Uso en informática
De manera informal, especialmente en informática, la notación O grande a menudo se puede usar de manera algo diferente para describir un límite estrecho asintótico donde usar la notación Theta Θ grande podría ser más apropiado en un contexto dado. Por ejemplo, al considerar una función T(n) = 73n3 + 22n2 + 58, todos los siguientes son generalmente aceptables, pero los límites más estrictos (como los números 2 y 3 a continuación) suelen preferirse a los límites más flexibles (como el número 1 a continuación).
- T()n) O()n100)
- T()n) O()n3)
- T()n.n3)
Las declaraciones equivalentes en inglés son respectivamente:
- T()n) crece asintoticamente no más rápido que n100
- T()n) crece asintoticamente no más rápido que n3
- T()n) crece asintoticamente tan rápido como n3.
Entonces, si bien las tres afirmaciones son verdaderas, cada una contiene progresivamente más información. En algunos campos, sin embargo, la notación O grande (número 2 en las listas anteriores) se usaría más comúnmente que la notación Theta grande (elementos numerados 3 en las listas anteriores). Por ejemplo, si T(n) representa el tiempo de ejecución de un algoritmo recientemente desarrollado para el tamaño de entrada n, los inventores y usuarios del algoritmo podría estar más inclinado a poner un límite asintótico superior sobre cuánto tardará en ejecutarse sin hacer una declaración explícita sobre el límite asintótico inferior.
Otra notación
En su libro Introducción a los algoritmos, Cormen, Leiserson, Rivest y Stein consideran el conjunto de funciones f que satisfacen
- f()n)=O()g()n))()n→ → JUEGO JUEGO ).{displaystyle f(n)=O(g(n))quad (nto infty)~.}
En una notación correcta, este conjunto puede, por ejemplo, llamarse O(g), donde
- O()g)={}f:existen constantes positivascyn0tales que0≤ ≤ f()n)≤ ≤ cg()n)para todosn≥ ≥ n0}.{displaystyle O(g)={f:{text{ therere exist positive constants}~c~{text{and}~n_{0}~{text{such that}}~0leq f(n)leq cg(n){text{ for all }ngeq No.
Los autores afirman que el uso del operador de igualdad (=) para denotar la pertenencia a un conjunto en lugar del operador de pertenencia al conjunto (∈) es un abuso de la notación, pero que hacerlo tiene ventajas. Dentro de una ecuación o desigualdad, el uso de la notación asintótica representa una función anónima en el conjunto O(g), que elimina los términos de orden inferior y ayuda a reducir los elementos no esenciales. desorden en las ecuaciones, por ejemplo:
- 2n2+3n+1=2n2+O()n).{displaystyle 2n^{2}+3n+1=2n^{2}+O(n). }
Extensiones a las notaciones de Bachmann-Landau
Otra notación que se usa a veces en informática es Õ (léase soft-O): f(n) = Õ(g(n)) es la abreviatura de f(n) = O(g(n) registrok n ) por algo de k. Algunos autores escriben O* con el mismo propósito. Esencialmente, es una notación O grande, que ignora los factores logarítmicos porque los efectos de la tasa de crecimiento de alguna otra función superlogarítmica indican una explosión de la tasa de crecimiento para parámetros de entrada de gran tamaño que es más importante para predecir un mal rendimiento en tiempo de ejecución que el más fino. -efectos puntuales aportados por el (los) factor(es) de crecimiento logarítmico. Esta notación se usa a menudo para obviar el "quisquilloso" dentro de las tasas de crecimiento que se establecen como demasiado limitadas para los asuntos en cuestión (dado que logk n siempre es o(nε) para cualquier constante k y cualquier ε > 0).
También la notación L, definida como
- Ln[α α ,c]=e()c+o()1))()In n)α α ()In In n)1− − α α {displaystyle L_{n}[alphac]=e^{(c+o(1))(ln n)^{alpha }(lnln n)^{1-alpha }
es conveniente para las funciones que están entre polinomio y exponencial en términos de In n{displaystyle ln n}.
Generalizaciones y usos relacionados
La generalización a funciones que toman valores en cualquier espacio vectorial normado es sencilla (reemplazando valores absolutos por normas), donde f y g no necesitan tomar sus valores en el mismo espacio. También es posible una generalización a funciones g que toman valores en cualquier grupo topológico. El "proceso de limitación" x → xo también se puede generalizar introduciendo una base de filtro arbitraria, es decir, a redes dirigidas f y g. La notación o se puede usar para definir derivadas y diferenciabilidad en espacios bastante generales, y también (asintótica) equivalencia de funciones,
- f♪ ♪ g⟺ ⟺ ()f− − g)▪ ▪ o()g){displaystyle fsim giff (f-g)in o(g)}
que es una relación de equivalencia y una noción más restrictiva que la relación "f es Θ(g)" desde arriba. (Se reduce a lim f / g = 1 si f y g son funciones de valor real positivo.) Para ejemplo, 2x es Θ(x), pero 2x − x no es o(x).
Historia (notaciones de Bachmann–Landau, Hardy y Vinogradov)
El símbolo O fue introducido por el teórico número Paul Bachmann en 1894, en el segundo volumen de su libro Analytische Zahlentheorie ("teoría de números análicos"). El teórico número Edmund Landau lo adoptó, y por lo tanto se inspiró en introducir en 1909 la notación o; por lo tanto, ambos se llaman símbolos Landau. Estas notaciones se utilizaron en matemáticas aplicadas durante la década de 1950 para el análisis asintotico. El símbolo Ω Ω {displaystyle Omega } (en el sentido "no es un o de") fue presentado en 1914 por Hardy y Littlewood. Hardy y Littlewood también introducido en 1916 los símbolos Ω Ω R{displaystyle Omega ¿Qué? ("derecho") y Ω Ω L{displaystyle Omega _{L}} ("izquierda"), precursores de los símbolos modernos Ω Ω +{displaystyle Omega _{+}} ("no es más pequeño que un pequeño o de") y Ω Ω − − {displaystyle Omega _{-}} ("no es más grande que un pequeño o de"). Así, los símbolos Omega (con sus significados originales) a veces también se denominan "símbolos de Landau". Esta notación Ω Ω {displaystyle Omega } se usó comúnmente en la teoría de números al menos desde la década de 1950. En la década de 1970 el gran O fue popularizado en la informática por Donald Knuth, quien introdujo la notación Theta relacionada, y propuso una definición diferente para la notación Omega.
Landau nunca usó los símbolos theta grande y omega pequeño.
Los símbolos de Hardy eran (en términos de la notación O moderna)
- f≼ ≼ g⟺ ⟺ f▪ ▪ O()g){displaystyle fpreccurlyeq giff fin O(g)} y f≺ ≺ g⟺ ⟺ f▪ ▪ o()g);{displaystyle fprec giff fin o(g);}
(Hardy sin embargo nunca definió o utilizó la notación ≺ ≺ ≺ ≺ {displaystyle prec !prec}, ni ≪ ≪ {displaystyle ll}, como se ha informado a veces). Hardy introdujo los símbolos ≼ ≼ {displaystyle preccurlyeq } y ≺ ≺ {displaystyle prec} (así como algunos otros símbolos) en su tracto de 1910 "Orders of Infinity", e hizo uso de ellos sólo en tres papeles (1910-1913). En sus casi 400 documentos y libros restantes utilizó sistemáticamente los símbolos de Landau O y o.
La notación de Hardy ya no se utiliza. Por otro lado, en la década de 1930, el teórico ruso Ivan Matveyevich Vinogradov introdujo su notación≪ ≪ {displaystyle ll}, que se ha utilizado cada vez más en la teoría de números en lugar de la O{displaystyle O. notación. Tenemos
- f≪ ≪ g⟺ ⟺ f▪ ▪ O()g),{displaystyle fll giff fin O(g),}
y, con frecuencia, ambas notaciones se utilizan en el mismo documento.
La gran O originalmente significa "orden de" ("Ordnung", Bachmann 1894), y por lo tanto es una letra latina. Ni Bachmann ni Landau lo llaman nunca 'Omicron'. El símbolo fue visto mucho más tarde (1976) por Knuth como un omicrón mayúscula, probablemente en referencia a su definición del símbolo Omega. No se debe usar el dígito cero.
Referencias y notas
- ^ a b Bachmann, Paul (1894). Analytische Zahlentheorie [Número analítico Teoría] (en alemán). Vol. 2. Leipzig: Teubner.
- ^ a b Landau, Edmund (1909). Handbuch der Lehre von der Verteilung der Primzahlen [Manual sobre la teoría de la distribución de los primos] (en alemán). Leipzig: B. G. Teubner. p. 883.
- ^ Mohr, Austin. "Cuantum Computing in Complexity Theory and Theory of Computation" (PDF). p. 2. Archivado (PDF) del original el 8 de marzo de 2014. Retrieved 7 de junio 2014.
- ^ Landau, Edmund (1909). Handbuch der Lehre von der Verteilung der Primzahlen [Manual sobre la teoría de la distribución de los primos] (en alemán). Leipzig: B.G. Teubner. p. 31.
- ^ Michael Sipser (1997). Introducción a la teoría de la computación. Boston/MA: PWS Publishing Co. Aquí: Def.7.2, p.227
- ^ a b Cormen,Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (2009). Introducción a los algoritmos (3a edición). Cambridge/MA: MIT Press. p. 45. ISBN 978-0-262-53305-8.
Porque... Silencio()g()n) es un conjunto, podríamos escribir "f()n) Silencio()g()n)" para indicar que f()n) es un miembro de Silencio()g()n)). En lugar de eso, normalmente escribiremos f()n) Silencio()g()n)) para expresar la misma noción. Usted podría estar confundido porque abusamos de la igualdad de esta manera, pero veremos más adelante en esta sección que hacerlo tiene sus ventajas.
- ^ Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford (2009). Introducción a los algoritmos (Tercera edición). MIT. pág. 53.
- ^ Howell, Rodney. "En la notación asintotica con múltiples variables" (PDF). Archivado (PDF) del original en 2015-04-24. Retrieved 2015-04-23.
- ^ a b N. G. de Bruijn (1958). Métodos asintoticos en Análisis. Amsterdam: North-Holland. pp. 5–7. ISBN 978-0-486-64221-5. Archivado desde el original el 2023-01-17. Retrieved 2021-09-15.
- ^ a b c Graham, Ronald; Knuth, Donald; Patashnik, Oren (1994). Matemáticas concretas (2 ed.). Reading, Massachusetts: Addison–Wesley. p. 446. ISBN 978-0-201-55802-9. Archivado desde el original el 2023-01-17. Retrieved 2016-09-23.
- ^ Donald Knuth (junio a julio de 1998). "Teach Calculus con Big O" (PDF). Avisos de la Sociedad Americana de Matemáticas. 45 (6): 687. (PDF) del original el 2021-10-14. Retrieved 2021-09-05. (versión sin puente Archivado 2008-05-13 en la máquina Wayback)
- ^ Donald E. Knuth, El arte de la programación informática. Vol. 1. algoritmos fundamentales, tercera edición, Addison Wesley Longman, 1997. Sección 1.2.11.1.
- ^ Ronald L. Graham, Donald E. Knuth y Oren Patashnik, Matemáticas concretas: Fundación para la Ciencia de la Computación (2a edición)., Addison-Wesley, 1994. Sección 9.2, pág. 443.
- ^ Sivaram Ambikasaran y Eric Darve, An O()Nlog N){displaystyle {mathcal}(Nlog N)} Fast Direct Solver for Partial Hierarchically Semi-Separable Matrices, J. Computación científica 57 (2013), No. 3, 477-501.
- ^ Saket Saurabh y Meirav Zehavi, ()k,n− − k){displaystyle (k,n-k)}-Max-Cut: An OAlternativa Alternativa ()2p){displaystyle {mathcal {}} {} {cH00}} {cH00}} {cH00}} {cH00}} {cH00}}} {cH00}}}} {cH00}}- Algoritmo de tiempo y un núcleo polinomio, Algorithmica 80 (2018), 12, 3844–3860.
- ^ a b Landau, Edmund (1909). Handbuch der Lehre von der Verteilung der Primzahlen [Manual sobre la teoría de la distribución de los primos] (en alemán). Leipzig: B. G. Teubner. p. 61.
- ^ Thomas H. Cormen et al., 2001, Introduction to Algorithms, Second Edition, Ch. 3.1 Archived 2009-01-16 at the Wayback Machine
- ^ Cormen TH, Leiserson CE, Rivest RL, Stein C (2009). Introducción a algoritmos (3rd ed.). Cambridge, Mass.: MIT Press. p. 48. ISBN 978-0-262-27083-0. OCLC 676697295.
- ^ a b c Hardy, G. H.; Littlewood, J. E. (1914). "Algunos problemas de aproximación diofantina: Parte II. La serie trigonométrica asociada a las funciones elípticas θ". Acta Mathematica. 37: 225. doi:10.1007/BF02401834. Archivado desde el original en 2018-12-12. Retrieved 2017-03-14.
- ^ a b G. H. Hardy y J. E. Littlewood, « Contribución a la teoría de la función Riemann zeta y la teoría de la distribución de los primos », Acta Mathematica, vol. 41, 1916.
- ^ E. Landau, "Über die Anzahl der Gitterpunkte in gewissen Bereichen. IV." Nachr. Gesell. Wiss. Matemáticas. Kl. 1924, 137–150.
- ^ a b Aleksandar Ivić. La función de Riemann zeta, capítulo 9. John Wiley ' Sons 1985.
- ^ Gérald Tenenbaum, Introducción a la teoría analítica y probabilística del número, Capítulo I.5. American Mathematical Society, Providence RI, 2015.
- ^ a b c d e f Knuth, Donald (abril a junio de 1976). "Gran Omicron y gran Omega y gran Theta" (PDF). SIGACT Noticias. 8 (2): 18–24. doi:10.1145/1008328.1008329. S2CID 5230246. Archivado desde el original el 2022-04-08. Retrieved 2022-12-08.
{{cite journal}}
: CS1 maint: bot: original URL status unknown (link) - ^ Balcázar, José L.; Gabarró, Joaquim. Clases de complejidad no uniformes especificadas por límites inferiores y superiores (PDF). RAIRO – Teoretical Informatics and Applications – Informatique Théorique et Applications. 23 (2): 180. ISSN 0988-3754. Archivado (PDF) del original el 14 marzo 2017. Retrieved 14 de marzo 2017.
- ^ Cucker, Felipe; Bürgisser, Peter (2013). "A.1 Big Oh, Little Oh, y otras comparaciones". Condición: Geometría de los algoritmos numéricos. Berlín, Heidelberg: Springer. pp. 467-468. doi:10.1007/978-3-642-38896-5. ISBN 978-3-642-38896-5.
- ^ a b Vitányi, Paul; Meertens, Lambert (abril de 1985). "Big Omega contra las funciones salvajes" (PDF). ACM SIGACT Noticias. 16 (4): 56–59. CiteSeerX10.1.1.694.3072. doi:10.1145/382242.382835. S2CID 11700420. Archivado (PDF) del original en 2016-03-10. Retrieved 2017-03-14.
- ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001) [1990]. Introducción a los algoritmos (2a edición). MIT Press and McGraw-Hill. pp. 41–50. ISBN 0-262-03293-7.
- ^ por ejemplo se omite en: Hildebrand, A.J. "Notaciones sintomáticas" (PDF). Departamento de Matemáticas. Métodos asintoticos en el análisis. Matemáticas 595, otoño 2009. Urbana, IL: Universidad de Illinois. Archivado (PDF) del original el 14 marzo 2017. Retrieved 14 de marzo 2017.
- ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (2009). Introducción a los algoritmos (3a edición). Cambridge/MA: MIT Press. p. 47. ISBN 978-0-262-53305-8.
Cuando sólo tenemos un límite superior asintotico, utilizamos O-notación. Para una función determinada g()n), denotamos O()g()n) (pronunciado "grande-oh de g de no a veces simplemente "oh de g de n") el conjunto de funciones O()g()n) = { f()n) existen constantes positivas c y n0 tal que 0 ≤ f()n≤ cg()n) para todos n ≥ n0}
- ^ Cormen,Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (2009). Introducción a los algoritmos (3a edición). Cambridge/MA: MIT Press. p. 49. ISBN 978-0-262-53305-8.
Cuando la notación asintotica permanece sola (es decir, no dentro de una fórmula más grande) en el lado derecho de una ecuación (o desigualdad), como en n = O(n)2), ya hemos definido el signo igual a la membresía fija: n2). En general, sin embargo, cuando la notación asintotica aparece en una fórmula, la interpretamos como de pie para alguna función anónima que no nos importa nombrar. Por ejemplo, la fórmula 2n2 + 3n + 1 = 2n2 + Silencio()n) significa que 2n2 + 3n + 1 = 2n2 + f()n), donde f()n) es una función en el conjunto Silencio()n). En este caso, dejamos que f()n) = 3n + 1, que es en efecto Silencio()n). Utilizar la notación asintotica de esta manera puede ayudar a eliminar el detalle inesencial y el desorden en una ecuación.
- ^ Introducción a algoritmos. Cormen, Thomas H. (Third ed.). Cambridge, Mass.: MIT Press. 2009. p. 63. ISBN 978-0-262-27083-0. OCLC 676697295.
{{cite book}}
: CS1 maint: others (link) - ^ Andreas Björklund y Thore Husfeldt y Mikko Koivisto (2009). "Seguir partición a través de la inclusión" (PDF). SIAM Journal on Computing. 39 (2): 546–563. doi:10.1137/070683933. Archivado (PDF) del original el 2022-02-03. Retrieved 2022-02-03. See sect.2.3, p.551.
- ^ Erdelyi, A. (1956). Expansions asintotic. ISBN 978-0-486-60318-6.
- ^ E. C. Titchmarsh, The The Theory of the Riemann Zeta-Function (Oxford; Clarendon Press, 1951)
- ^ Vea por ejemplo "Una nueva estimación para G()n) en el problema de Waring" (ruso). Doklady Akademii Nauk SSSR 5, No 5-6 (1934), 249–253. Traducido en inglés en: Obras seleccionadas / Ivan Matveevič Vinogradov; preparado por el Steklov Mathematical Institute de la Academia de Ciencias de la URSS con motivo de su 90 cumpleaños. Springer-Verlag, 1985.
Contenido relacionado
Afinación pitagórica
Espacio vectorial normado
Espacio métrico completo