Podemos probar absolutamente tales cosas.
Muchos problemas tienen límites inferiores triviales, como el hecho de que encontrar el mínimo de un conjunto de números (que no están ordenados / estructurados de ninguna manera) lleva al menos Ω ( n ) tiempo. La prueba de esto es simple: un algoritmo hipotético que se ejecuta en o ( n ) tiempo no puede examinar todos los números en la entrada. Entonces, si ejecutamos el algoritmo en alguna entrada, podríamos observar que nunca examinó un elemento particular de la entrada. Cambiando ese elemento al mínimo, podemos hacer que el algoritmo falle.norteΩ ( n )o ( n )
Un límite inferior menos trivial es el límite inferior para la clasificación en el modelo basado en la comparación. La prueba de esto va a lo largo de las siguientes líneas: dada una entrada de n números, ¡hay n ! posibles salidas (la entrada podría ser cualquier permutación de la lista ordenada, por lo que la salida también puede ser cualquier permutación de la entrada). Si estamos limitados a hacer solo comparaciones, entonces nuestro algoritmo (en promedio) necesita realizar al menos log 2 ( n ! ) = Ω ( n log n ) comparaciones para poder dar nΩ ( n logn )norten !Iniciar sesión2( n ! ) = Ω ( n logn )Diferentes salidas.n !
Los límites inferiores pueden ser aún más fuertes. Hay varios problemas (especialmente elproblemas duros E X P T I M E ) para los cuales hay un límite inferior exponencial. Los problemas en esta clase incluyen el cálculo de estrategias óptimas para juegos como el ajedrez (generalizado), damas y go. La prueba de esto es a través delTeorema de la jerarquía de tiempo, que establece (sujeto a algunas restricciones en f ):miXPAGSTyoMETROmiF
Dada una función , existe un problema computacional que puede resolverse en el tiempo O ( fF pero no puede resolverse en el tiempo o ( f ( n )O ( f( n ) ).o ( f( n )Iniciar sesiónnorte)
Básicamente, si puedes pensar en una función , existe un problema que requiere tanto tiempo para resolverse.F
Finalmente, otra vía de no necesariamente probar un límite inferior de tiempo pero algo aún más fuerte es mostrar la indecidibilidad de un problema (por ejemplo, detenerse, correspondencia posterior).
Tom van der Zanden
fuente
Si es posible. El ejemplo clásico es el hecho de que cualquier algoritmo de clasificación basado en comparación requiere para ordenar una lista de longitud n .Ω ( n logn ) norte
Sin embargo, los límites inferiores parecen ser mucho más difíciles de probar que los límites superiores. Para demostrar que hay un algoritmo de ordenación que requiere comparaciones , solo necesita exhibir dicho algoritmo (fusionar sort - voila !). Pero para un límite inferior, de alguna manera necesita demostrar que ningún algoritmo en una clase en particular puede resolver su problema. La dificultad de hacerlo se ilustra por el hecho de que solo sabemos que L ⊆ N L ⊆ P ⊆ N P ⊆ P S P A C EO ( n logn )
aunque sabemos que al menos una de esas inclusiones es estricta ( L ⊂ P S
Por otro lado, Ryan Williams tiene un buen artículo (y una charla, que he escuchado un par de veces) llamado Algorithms for Circuits y Circuits for Algorithms , en el que argumenta que encontrar límites más bajos y encontrar algoritmos no son fundamentalmente todos que diferente Por ejemplo, cita la prueba de la indecidibilidad del problema de detención como un ejemplo de un algoritmo (la máquina universal de Turing) que se usa exactamente para probar un límite inferior (indecidibilidad).
fuente
Para tomar un ejemplo trivial, no puede encontrar el número más grande de un conjunto denorte
Sin embargo, hay un punto en la pregunta que requiere más comentarios sobre el límite inferior (o los límites de complejidad en general).
En realidad, la elección de lo que es un solo paso computacional es irrelevante, siempre y cuando los pasos computacionales puedan considerarse que tienen un límite superior constante (y un límite inferior). El resultado de la complejidad será el mismo ya que se define hasta una constante. Tomar 3 comparaciones como operaciones unitarias, o solo una, no hace ninguna diferencia.
Lo mismo es cierto con respecto al tamaño de los datos que sirve de referencia para evaluar el costo del cálculo. Tomar un solo entero o dos enteros como unidad de tamaño no hace ninguna diferencia.
Sin embargo, las dos opciones deben estar relacionadas.
Si una operación puede considerarse que tiene un costo unitario está estrechamente relacionada con qué datos pueden considerarse que tienen un tamaño unitario. Y eso depende del nivel de abstracción que elija para su modelo de cálculo.
fuente