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.
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 y
- Todos los números en los cálculos intermedios se pueden almacenar con bits.
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 y
- 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!
fuente
Respuestas:
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.
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:
[*] 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.
fuente