¿Qué es la complejidad del tiempo polinomial?

En informática, consideramos un algoritmo “rápido” si su costo de tiempo, en términos del tamaño [matemático] n [/ matemático] del problema, está limitado por algún polinomio [matemático] p (n) [/ matemático].

Prácticamente hablando, “tiempo polinomial” no siempre significa rápido. Un algoritmo típico [matemático] O (n ^ {20}) [/ matemático] aún no se podría utilizar para [matemático] n [/ matemático] de tamaño moderado. Y algunos algoritmos de tiempo exponencial (o los algoritmos de tiempo exponencial en el peor de los casos que suelen ser bastante rápidos) son bastante útiles en la práctica, especialmente si nunca vamos a tener una gran [matemática] n [/ matemática].

Entonces, ¿por qué “límite polinómico” es una gran definición de “eficiente”, desde la perspectiva de un teórico? Composición de funciones. Las funciones cuadráticas, digamos, no están cerradas bajo composición. Un cuadrático de un cuadrático es un cuarto. Las funciones polinomiales (para ser más precisos, funciones limitadas polinomialmente) son un conjunto cerrado en composición.

La teoría detrás de las clases de complejidad (desde P y NP , hasta R y RE ) usa muchas transformaciones de problemas. Así es como sabemos, por ejemplo, que una solución “rápida” a la suma de subconjuntos también entregaría TSP. (Técnicamente, no sabemos que estos problemas de NP completo no tienen soluciones de tiempo polinomial, ese es el problema “P? = NP”, pero en la práctica estamos bastante seguros, al menos por ahora). Estas transformaciones terminan aportando muchas composiciones de funciones, por lo que el hecho de que las funciones limitadas por polinomios estén cerradas bajo composición es un detalle importante.

Considere cualquier problema en el que el tamaño de entrada esté dado por: [math] n [/ math]

Ahora, si puede resolver este problema, y ​​el tiempo que toma su solución es de la forma [math] O (n ^ c) [/ math], para algunos [math] c \ in \ mathbb {R} [/ math ], entonces dice que la complejidad temporal de esa solución tiene un tamaño polinómico o que básicamente la solución tiene “complejidad temporal polinómica”.

Además, este “tiempo polinomial” no es en sí mismo un término autónomo. Si estás hablando de:

  1. Tiempo polinómico determinista: entonces se referirá a la clase de complejidad P.
  2. Tiempo polinómico no determinista: básicamente, se referiría a la clase de complejidad NP .
  3. Tiempo polinómico aleatorio: entonces la clase de complejidad sería RP .

No entraré en más detalles de las clases referidas (y estoy de acuerdo en que esto sería un saludo). Pero, creo que todo lo que quieres saber era sobre el tiempo polinomial determinista y , por lo tanto, la clase P.

La complejidad del tiempo polinomial es en sí mismo un término importante, ya que en teoría de la complejidad es el punto de referencia de la eficiencia. Entonces, básicamente, si algún problema tiene una solución de tiempo polinomial (determinista), puede decir que el problema se puede resolver de manera eficiente (o en cierto sentido, el problema es fácil de resolver).

El siglo pasado ha visto una revolución absoluta en la forma en que calculamos. Sin embargo, al principio, las cosas no estaban tan claras. Había varias personas escribiendo algoritmos y varias compañías construyendo máquinas de computadora. Ahora, el mismo algoritmo se ejecutaría a diferentes velocidades en diferentes máquinas (debido a las diferencias en la organización de la memoria, las características del transistor, etc.) y se estaba volviendo difícil identificar qué algoritmo usar.
Para resolver este problema, se desarrolló un novedoso sistema de clasificación. Cada algoritmo se desglosaría en pequeños bits de operación, digamos agregando dos números o multiplicando dos números o comparando dos números y luego contaríamos el número de tales operaciones “atómicas” que realizó cada algoritmo. El algoritmo que realizó menos de estas operaciones atómicas se consideró más rápido. Esto fue bueno, ya que eliminó los efectos específicos de la máquina en la velocidad del algoritmo, en cualquier máquina, independientemente de la rapidez con que esa máquina implementara estas operaciones atómicas, el algoritmo que realizaba menos de esas operaciones atómicas siempre ganaría, por lo que no hay ambigüedad. !!!. Esto condujo a la noción de complejidad asintótica del tiempo.
Para aclarar, tomemos un problema simple como la clasificación: hay literalmente docenas de algoritmos para resolver el problema, algunos buenos, otros no tanto. La operación atómica en este problema generalmente se toma como comparación: tomar dos números y compararlos (la mayoría de los algoritmos de clasificación usan tales comparaciones para intercambiar elementos en el orden correcto para avanzar). Supongamos que se nos dan 100 números para ordenar en orden creciente. Luego, un algoritmo como Bubble Sort hará aproximadamente 4950 comparaciones para ordenar los números. Un algoritmo como Merge Sort, por otro lado, solo tomará aproximadamente 665 comparaciones. Claramente, Merge Sort superará a Bubble sort si ambos se ejecutan en la misma máquina.
Si se desea una expresión general para el tiempo de ejecución, resulta que Bubble Sort requiere hasta [math] \ frac {n (n-1)} {2} [/ math] comparaciones para ordenar [math] n [/ math ] números y la combinación de ordenamiento toma [math] n \ log n [/ math] comparaciones para ordenar los mismos números [math] n [/ math].
Cada vez que un algoritmo, en una entrada de tamaño [math] n [/ math], toma como máximo operaciones [math] n ^ c [/ math] para resolver el problema (para algunas constantes fijas [math] c> 0 [/ math] ), se denomina algoritmo de tiempo polinómico o se dice que tiene una complejidad de tiempo polinomial. Para ambos tipos, Bubble y Merge, esta constante puede tomarse como [math] c = 2 [/ math] ya que [math] \ frac {n (n-1)} {2} \ leq n ^ 2 [/ math] así como [math] n \ log n \ leq n ^ 2 [/ math].
Es importante tener en cuenta que el valor [math] c [/ math] debe ser independiente de [math] n [/ math] al hacer esta declaración, es decir, debemos estar seguros de que el algoritmo toma menos de [math] n ^ c [ / math] para todas las entradas de tamaño [math] n [/ math] así como todos los valores de [math] n [/ math] antes de que podamos asignar su complejidad de tiempo.
Hay varios puntos en esta explicación que requieren mayor elaboración: el más notable de ellos es 1) ¿Cuál es el criterio para llamar a algo una operación atómica (por ejemplo, la comparación de dos números en este caso), 2) ¿Cómo definimos el “tamaño”? de la entrada [matemática] n [/ matemática] y 3) ¿Por qué la complejidad del tiempo polinomial es algo interesante para estudiar y apuntar al diseñar algoritmos?

  • El algoritmo de ordenamiento por selección en n enteros realiza operaciones An ^ 2 para alguna A constante. Por lo tanto, se ejecuta en el tiempo O (n ^ 2) y es un algoritmo de tiempo polinómico.
  • Todas las operaciones aritméticas básicas (suma, resta, multiplicación, división y comparación) se pueden realizar en tiempo polinómico.
  • Las coincidencias máximas en gráficos se pueden encontrar en tiempo polinómico

Por favor vea la complejidad del tiempo. Por ejemplo, si ordena una lista de enteros [matemáticos] n [/ matemáticos] utilizando el algoritmo de clasificación rápida, tomará operaciones [matemática] A {n} ^ {2} [/ matemática], que es un polinomio del tamaño de la lista donde [math] A [/ math] es algo constante. Con la idea de que las operaciones consumen bloques de tiempo aproximadamente iguales, esto significa que el algoritmo de clasificación rápida muestra la complejidad polinómica. Una complejidad de tiempo no polinomial sería aquella que muestra cualquier otro patrón de complejidad. Puede ser lineal, constante, cuadrático, exponencial, cualquier cosa.

More Interesting

¿Qué proyectos podría hacer en el paralelismo a nivel de hilo?

¿Por qué no hay un mayor énfasis en los algoritmos aleatorios para estudiantes de informática?

¿Cómo se maneja el equilibrio entre aplicabilidad e interés en la investigación de CS?

¿Por qué no hay más personas trabajando para mejorar la inteligencia artificial?

¿Hay algún algoritmo en línea para la reducción de dimensionalidad no lineal?

Dados los recientes avances en la curación de la ceguera, ¿sigue siendo relevante la investigación en informática de accesibilidad para discapacidades visuales?

¿Qué campos de la informática verán una explosión de nuevos desarrollos en un futuro próximo?

¿Cuáles son algunas de las grandes ideas de proyectos para un estudiante de informática?

¿Qué opinas sobre la video conferencia de visión por computadora de William Hoff?

¿Cuáles son algunos temas de investigación recientes sobre diseño de máquinas?

¿Vale la pena el tiempo dedicado a participar en la investigación financiada por NSF como estudiante?

¿Cuáles son algunas historias de éxito para Bayesian Networks?

¿Es posible que un estudiante con una disciplina que no sea informática con un CGPA de 5 sobre 10 haga una maestría en informática en una buena universidad extranjera?

¿Qué conceptos y prácticas de metodología de investigación genérica se utilizan en el campo del aprendizaje automático?

¿Cuáles son algunos temas de investigación en ingeniería informática?