Supongamos que es el peor tiempo de ejecución de un problema en una entrada de tamaño . Hagamos el problema un poco extraño arreglando para pero para .
Entonces, ¿cuál es el límite inferior del problema? La forma en que lo entendí es solo el límite inferior de . Pero sabemos que implica que existe una constante k , n_0 tal que para todos n> n_0 , f (n)> kn ^ 2 , lo cual no es cierto. Por lo tanto, parece que solo podemos decir f (n) = \ Omega (n) . Pero generalmente, llamaremos que el problema tiene un límite inferior de \ Omega (n ^ 2) , ¿verdad?f ( n ) = Ω ( n 2 ) k n 0 n > n 0 f ( n ) > k n 2 f ( n ) = Ω ( n ) Ω ( n 2 )
Suponiendo que , lo que significa que existe una constante , tal que para todo , . Supongamos también que un problema tiene tiempo de ejecución . Si podemos reducir este problema para todos los primos a otro problema (con el mismo tamaño de entrada), ¿podemos decir que el tiempo de ejecución del otro problema tiene un límite inferior de ?
Respuestas:
La definición correcta de es que existe algo de tal que para infinitamente , . La definición infinitamente frecuente de límites inferiores maneja sus problemas y es cómo la usamos en la práctica.k > 0 n f ( n ) ≥ k n 2f(n)=Ω(n2) k>0 n f(n)≥kn2
Hice una publicación sobre esto en 2005.
Algunos libros de texto tienen esta definición correcta, otros no.
fuente
Con la definición de Knuth , puede afirmar solo . Como puede observar, esto no es intuitivo y ocurre para las funciones que Vitányi y Meertens llaman "salvaje". Proponen definirf(n)∈Ω(n)
(Esto es lo mismo que la definición de Lance). Con esta definición .f(n)∈Ω(n2)
fuente
No sé cuál es el más utilizado, pero creo que sé cuál es el uso más antiguo (de todos modos, para la informática).
En el artículo de 1965 de Hartmanis & Stearns "Sobre la complejidad computacional de los algoritmos", el Corolario 2.1 es:
donde es la clase de complejidad de todos los problemas computables en O ( K ( n ) ) . T (n) debe obedecer a T ( n ) ≥ n / k para algún entero k y todos n y T ( n ) ≤ T ( n + 1 ) , pero no tiene que ser construible en el tiempo.SK O(K(n)) T(n)≥n/k k n T(n)≤T(n+1)
Su función obedece la primera regla para pero no obedece la segunda regla.k=1
El corolario 2.2 es el recíproco de lo anterior y utiliza el límite superior, pero aún tiene estos requisitos. Supongo que a medida que los algoritmos se volvieron más complejos con los años, es posible que los requisitos se hayan relajado.
fuente
Creo que deberíamos distinguir entre dos cosas:
Para las funciones, cuando arreglamos un orden, la definición de lowbound / upperbound se deduce de él. Si la relación de orden es mayorización asintótica (ignorando factores constantes)
entonces la definición es la definición habitual de y Ω . Ambos se usan ampliamente en otras áreas como la combinatoria.O Ω
Pero cuando hablamos de un límite inferior para un problema (un algoritmo), lo que realmente queremos decir es que el problema requiere cierta cantidad de recursos (para ejecutar el algoritmo que resuelve el problema). A menudo, las clases de complejidad están parametrizadas por funciones como , y simplemente decimos que el problema está limitado por una función, pero esto solo funciona para funciones agradables (por ejemplo, el tiempo de ejecución del algoritmo es monótono, etc.). Lo que queremos decir en estos casos es que necesitamos n 2 tiempo de ejecución para resolver el problema, es decir, menos de n 2Time(t(n)) n2 n2 el tiempo de ejecución no es suficiente, lo que formalmente se convierte en la definición de Lance de que el tiempo de ejecución del algoritmo no está en .o(t(n))
fuente