12 votos

Puede un algoritmo de ser más rápido que O(1)?

Esta semana hemos tenido una brillante entrevistado quien afirmó que la matriz de constantes de tiempo de búsqueda y el mapa tiene incluso más rápido que el tiempo de búsqueda. Ahora a mí si algún algoritmo O(1) tiempo de complejidad es la única manera para que otra equivalente en el algoritmo más rápido es de tener un menor coeficiente constante en O(1) estimación (como una toma de algoritmo en la mayoría de los 230 primitivo de operaciones y otra toma en la mayoría de los 50 primitivo de las operaciones y por lo tanto es más rápido a pesar de que ambos tienen O(1) la complejidad).

Es posible que un algoritmo más rápido que O(1) excepto el tener un menor coeficiente en la estimación?

19voto

Bluebird75 Puntos 4612

Creo que Qiaochu Yuan probablemente estaba bromeando, pero que en realidad está en la pista de la derecha, en el sentido de que la respuesta a la pregunta, en realidad, depende de lo teórico, físico, o modelo práctico de cálculo que tiene en mente.

No es descabellado imaginar modelos en los que un cálculo puede tomar 0 tiempo. Por ejemplo, usted podría tener una máquina de engranajes y palancas donde se configuran los engranajes en una posición determinada, como una entrada. Para obtener la salida, girar una manivela hasta que, después de la k revoluciones, se congela y no se enciende más. El número k es la potencia y el tiempo de ejecución. Es posible que k es cero, de modo que el tiempo de ejecución es cero. Por supuesto, esto no contar el tiempo que se tarda en entrar en la habitación, configurar las entradas, agarrar la manivela, etc. Pero no es completamente descabellado imaginar un útil modelo matemático en el que no se tienen en cuenta esas cosas como el tiempo de ejecución.

Tampoco es descabellado imaginar que podría haber más rápido y más rápido procesamiento de la información como n crece. A veces más información que hace que su tarea más fácil. Si yo soy un editor de libros y mi trabajo es tomar un montón de envíos, seleccione el mejor, y, a continuación, escribe el autor de una solicitud de las necesarias revisiones, mi trabajo podría ser más fácil cuando la pila es más alto, porque me puede permitirse el lujo de ser más exigente, probablemente voy a tener una mejor manuscrito, y no requieren de muchas revisiones.

Sin embargo, creo que hay un asunto fundamental que impide que nada de ser más rápido que O(1), que es de la que estamos hablando computación digital, no analógica. Si se trata de una máquina de Turing o una computadora de escritorio o el sistema de engranajes y palancas descrito anteriormente, una computadora digital normalmente opera en diferentes ciclos. Usted puede obtener un resultado de 0 ciclos, o en 1 ciclo, pero usted no puede tener la mitad de un ciclo. Si usted realmente desea tener O(1/n) de rendimiento, entonces tiene que haber alguna $n_o$ tal que para $n \ge n_o$ el tiempo de ejecución es de no más de 1/2 de un ciclo. Esto significa que para $n \ge n_o$ el cálculo siempre termina en 0 ciclos. El ejemplo de las palancas y engranajes que muestra que es posible para un cálculo para terminar en 0 ciclos, pero no puede haber tal cosa como un trivial de cálculo que siempre termina en 0 ciclos para la gran n. Para un cálculo como la que, simplemente, no sería necesario el uso de la máquina para $n \ge n_o$. Otra forma de decirlo es que si su cálculo siempre termina en 0 ciclos de $n \ge n_o$, luego de que su cómputo no sólo es más rápido que O(1), S(0), lo que significa que es trivial.

Así que creo que la respuesta es que el rendimiento más rápido que O(1) no es razonable que una computadora digital, y desde el big-O notación es realmente diseñado para los ordenadores digitales, no es obvio cómo plantear la cuestión en el caso de los equipos analógicos.

6voto

Curt Hagenlocher Puntos 12432

Otros han argumentado que, en el contexto de secuencia de algoritmos y modelos clásicos de la computación (por ejemplo, máquinas de Turing o la memoria RAM modelo), un tiempo de ejecución de $0$ tiene poco sentido. Sin embargo, existen otros modelos.


En el contexto de los algoritmos distribuidos, se suele definir que el tiempo de ejecución de un algoritmo es igual al número de comunicación rondas.

Con esta definición, tenemos no sólo la no-trivial gráfico de algoritmos con el tiempo de ejecución $O(1)$, pero también algunos algoritmos de gráfico con el tiempo de ejecución $0$.

Como un ejemplo simple, el aleatorizados 2-algoritmo de aproximación para la máxima corte tiene tiempo de ejecución $0$ en este modelo: no hay necesidad de comunicarse con los vecinos; cada nodo (simultáneamente en paralelo) solo tira una moneda y produce su propio local de salida basados en el azar tirón de la moneda.


Así que no es solo el caso de que uno podría, hipotéticamente hablando, la definición de un modelo de cálculo en el que un tiempo de ejecución de $0$ tendría sentido, si abusamos de algunos artificial definición de "tiempo".

Tenemos estos modelos, están estudiando activamente, y la definición de "tiempo" es natural para estos fines. En particular, precisamente, con esta definición, el tiempo (número de comunicación rondas) y la distancia (ruta más corta distancia en el gráfico) se convierten en más o menos equivalente conceptos.

4voto

Tsuyoshi Ito Puntos 1589

Es razonable y común asumir que cualquier algoritmo necesita al menos una constante positiva cantidad de tiempo para cada entrada. Por ejemplo, cualquier útil algoritmo debe responder a algo (por ejemplo, SÍ/NO o algún número, cadena, etc.), y es razonable suponer que para hacerlo se necesita al menos alguna cantidad constante de tiempo. Bajo este supuesto, ningún algoritmo puede tener un subconstant tiempo de complejidad.

(En las computadoras, esta constante la cantidad mínima de tiempo puede ser menor por avanzar en la ciencia y la tecnología, pero no importa lo rápido que las computadoras, él todavía está allí como una constante que no depende de el tamaño de entrada.)

Vhailor comentarios que de una hipotética algoritmo, que se espera que 1/n segundos, donde n es la entrada de longitud, podría satisfacer la condición. El argumento de la anterior asume que no existe tal algoritmo. Para justificar esto, yo diría que es razonable asumir que una máquina puede esperar de 1/n segundos por la gran n, porque eso requeriría más rápido y más rápido procesamiento de la información como n crece.

A veces se puede oír "subconstant operaciones de tiempo," pero antes de que los fanáticos de usted, vea lo que realmente significa. Por lo general, esto significa que el tiempo requerido dividido por algún otro parámetro es subconstant, no es que el tiempo en sí es subconstant.

4voto

sagar Puntos 11

El Big-O de un algoritmo es el Big-O de la cantidad de pasos que una máquina de Turing se toma antes de parar. Así que considere el trivial de la máquina de Turing, donde el estado inicial es en el conjunto de estados finales.

$ q_0 \in F $

El número de pasos que hay que dar antes de parar es 0.

Ahora considere la definición formal de Big-O:

$ f(x) = O(g(x)) $ si y sólo si $ \exists M>0, x_o $ tal que $ |f(x)|\leq M|g(x)| $ todos los $ x > x_o $

El Big-O de lo trivial máquina de Turing es, a continuación, $ O(0) $ que es "más rápido" que $ O(1) $ en algún sentido.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X