Definiciones de un algoritmo que se ejecuta en tiempo polinómico y en tiempo fuertemente polinómico

18

Wikipedia lo define como

Se dice que un algoritmo es de tiempo polinómico si su tiempo de ejecución está limitado por una expresión polinómica en el tamaño de la entrada para el algoritmo, es decir, para alguna constante k.T(norte)=O(nortek)

El algoritmo se ejecuta en tiempo fuertemente polinómico si [8]

  • el número de operaciones en el modelo aritmético de computación está limitado por un polinomio en el número de enteros en la instancia de entrada; y

  • El espacio utilizado por el algoritmo está limitado por un polinomio en el tamaño de la entrada.

En Bernhard Korte, Jens Vygen, Optimización combinatoria :

Definición 1.4.

Se dice que un algoritmo con entrada racional se ejecuta en tiempo polinómico si

  • hay un número entero k tal que se ejecuta en tiempo , donde n es el tamaño de entrada yO(nortek)
  • Todos los números en los cálculos intermedios se pueden almacenar con bits.O(nortek)

Se dice que un algoritmo con entrada arbitraria se ejecuta en tiempo fuertemente polinómico si

  • hay un número entero k tal que se ejecuta en tiempo para cualquier entrada que consta de n números yO(nortek)
  • se ejecuta en tiempo polinómico para entrada racional.

Por favor, corríjame si estoy equivocado. Las siguientes son las diferencias literales que noté:

  • Para los algoritmos de tiempo polinómico, la definición de Korte y Vygen es "la definición de Wikipedia + espacio de almacenamiento polinómico".

  • Para algoritmos de tiempo fuertemente polinomiales, la definición de Korte y Vygen y la definición de Wikipedia requieren tiempo polinomial en el tamaño de almacenamiento de entrada. Pero K y V además requieren tiempo polinómico en el número de números en cualquier entrada, mientras que Wikipedia también requiere espacio de almacenamiento polinómico en el tamaño de entrada.

Entonces, ¿las definiciones de K y V y Wikipedia para estos dos conceptos son equivalentes, respectivamente? ¿Qué otras diferencias y relaciones hay entre ellos?

¡Gracias y saludos!

StackExchange para todos
fuente
la sección de wikipedia justo después de la definición tiene una explicación bastante buena, ¿no es lo suficientemente clara? tiene que ver con cuántos bits representan números, y los números muy grandes pueden afectar las mediciones de complejidad "hacia arriba". creo que las defensas con K&V son probablemente un "casi" equivalente. En cuanto a las entradas racionales, se necesita una prueba de que la aritmética en los racionales no aumenta su tamaño en gran medida. cree que esto se puede mostrar al encontrar la pantalla LCD de todas las entradas y hacer todos los números aritméticos en la pantalla LCD.
vzn
@vzn: la explicación en Wikipedia (1) es decente para la máquina aritmética vs. Turing, pero es bastante superficial con respecto al propósito y la definición fuertemente polivinílica, y (2) estaba completamente equivocado en lo que ejemplifica GCD.
alexei

Respuestas:

5

Antes de las definiciones formales, considere lo que la clasificación "fuerte / débil" pretende distinguir.

Primero, considere ejecutar cualquiera de ellos en una máquina Turing. Ambos se ejecutarán en una serie de pasos polinomiales en la longitud de la entrada codificada en binario. En consecuencia, el número de operaciones aritméticas realizadas por ambos tendría que ser polinomial en la longitud de la entrada codificada en binario . Por lo tanto, para ambos, el tiempo de funcionamiento de la máquina Turing crecería polinomialmente a medida que aumenta el número de valores de entrada o sus magnitudes. Para enfatizar lo último, tenga en cuenta que incluso el fuerte tomará más pasos TM en magnitudes más grandes (necesita al menos leer los bits adicionales). Bajo ninguna circunstancia uno se vuelve exponencial (como es el caso del tiempo pseudo-polinomial no relacionado). Con una máquina de Turing sola, una diferencia fundamental no parece detectable.

O(1)

El conjunto de algoritmos que se ejecutan en número de operaciones aritméticas polinomiales en el número de números de entrada está bien definido, pero se superpone con la clase de algoritmos que toman el número de pasos TM exponenciales en la longitud de la entrada codificada en binario (ver ejemplos ). Por lo tanto, para este conjunto, las propiedades en el segundo párrafo no serían válidas. Para excluir la intersección no deseada, agregamos una condición para un espacio polinomial TM [*].

En [1] esto se afirma de dos maneras:

  • El algoritmo se ejecuta en tiempo fuertemente polinómico si el algoritmo es un algoritmo de espacio polinomómico y realiza una serie de operaciones aritméticas elementales que están limitadas por un polinomio en el número de números de entrada.
  • Un algoritmo polinómico es un algoritmo de espacio polinómico (en nuestro modelo estándar de máquina de Turing) y un algoritmo de tiempo polinómico en el modelo aritmético (consulte esta pregunta para obtener una aclaración).

O(norte3)O(norte2)

[*] La segunda condición se establece en todas partes como espacio polinómico, mientras que requerir tiempo polinómico tiene más sentido para mí. El primero es más inclusivo, pero extraño. ¿Existen algoritmos fuertemente polinomiales que toman más tiempo que el polinomio? Tenga en cuenta que el ejemplo de cuadratura repetida no requiere tiempo polinómico ni espacio polinómico.

[1] Grötschel, Martin; László Lovász, Alexander Schrijver (1988). "Complejidad, oráculos y computación numérica". Algoritmos Geométricos y Optimización Combinatoria. Saltador. ISBN 0-387-13624-X.

alexei
fuente