Considere el problema de verificar si un número N es primo o no. Supongamos que N es 3127. Una forma de resolver esto sería verificar si algún número entre 2 y 3127 divide N o no. Suponiendo que podamos realizar la verificación del divisor en tiempo constante (O (1)), esto tomaría como máximo 3127 pasos. Puede ver fácilmente que para un número general N, esto necesitaría O (N) pasos. Voila! Entonces, ¿tenemos un algoritmo de tiempo polinómico para la prueba de primalidad?
Realmente no. Esto se debe a que 3127 cuando se proporciona como entrada no tiene una longitud de 3127 bits. Tiene solo 4 dígitos (en base 10) o 12 bits binarios. Esta es nuestra entrada real y lamentablemente su longitud no es igual a N. Es del orden de log (N). Y, por lo tanto, nuestro algoritmo de tiempo aparentemente polinómico en realidad toma O (2 ^ (log (N))) pasos, es decir, es exponencial en el tamaño de entrada.
Queremos un algoritmo que se ejecute en el tiempo que sea un polinomio en el tamaño de entrada, no el valor que representa la entrada. Y, por lo tanto, el algoritmo anterior no es realmente un algoritmo de tiempo polinómico.
Llamamos a estos algoritmos algoritmos de tiempo pseudo-polinomiales.
- Cómo escribir una función recursiva usando Python que toma una cadena como entrada e imprime cada carácter en una línea separada
- El comportamiento emergente se encuentra en el núcleo de las ciencias físicas y de la vida: posiblemente por conveniencia computacional. ¿La teoría de la complejidad ofrece ideas aquí?
- ¿Por qué mi código solo pasa números pequeños y no los grandes (con respecto a subconjuntos no divisibles)?
- ¿Qué tipo de algoritmo de programación de CPU se utiliza actualmente en los sistemas operativos?
- ¿Cómo se diseña el algoritmo de búsqueda difusa en Sublime Text? ¿Cómo diseñarías algo similar?
De manera similar, en el algoritmo de mochila, la representación del tamaño de la mochila W solo toma bits de registro (W) cuando se proporciona como entrada. Por lo tanto, el algoritmo sopla para convertirse en uno exponencial en el tamaño de la entrada, aunque aparentemente es polinomial.