¿Por qué la teoría de la complejidad computacional es un campo importante y cuáles son algunos sistemas / productos interesantes que se crean a partir de ella?

La complejidad computacional es el estudio de si existe una solución factible a un problema.

foto del usuario Charla del usuario: Chris-martin tomado de wikepedia P versus NP problem – Wikipedia

La potencia de cálculo disponible siempre aumenta, pero no a un ritmo que en algunos años a partir de ahora la mayoría de los problemas se considerarán obsoletos. De hecho, no creo que la clase de problemas que podemos resolver haya cambiado mucho en los últimos 20–40 años.

La verificación de la complejidad de un algoritmo es un problema importante porque nos permite saber qué problemas podemos abordar. Hace un año, se publicó este artículo [1] de László Babai que proponía una solución cuasi polinómica al problema del isomorfismo gráfico .

Se dice que dos gráficos que contienen el mismo número de vértices de gráficos conectados de la misma manera son isomórficos

definición por wolfram Gráficos isomorfos

El documento atrajo una gran atención y estudios de revisión posteriores descubrieron ambigüedades que causaron la revocación del reclamo original (tiempo cuasi polinomial). A partir de enero de 2017, el reclamo ha sido restaurado y hay una versión actualizada en revisión. Página de inicio de Laszlo Babai

El disponible soluciones al isomorfismo gráfico problema tiene gran impacto en las necesidades informáticas modernas. Eche un vistazo a esta pregunta, ¿cuáles son las aplicaciones de los gráficos isomorfos? por el usuario ankurtr en Mathematics Stack Exchange.

Constantinos Daskalakis, Paul W. Goldberg y Christos H. Papadimitriou en su artículo The Complexity of Computing a Nash Equilibrium [2] probaron que calcular un Nash Equilibrium es un problema completo de PPAD [3], por lo que es muy difícil de resolver. Incluso con grandes cantidades de problemas de potencia de procesamiento que pertenecen a clases difíciles son imposibles de resolver en casos del mundo real.

¿Qué podríamos hacer si supiéramos un algoritmo que resuelve los equilibrios de Nash en tiempo polinómico? Probablemente podríamos modelar con precisión el mercado global y hacer ajustes en tiempo real para evitar crisis micro y macro económicas.

Notas al pie

[1] [1512.03547] Isomorfismo gráfico en tiempo cuasipolinomial

[2] http://people.csail.mit.edu/cost…

[3] PPAD (complejidad) – Wikipedia

En informática, el análisis de algoritmos es la determinación de la cantidad de tiempo, almacenamiento y / u otros recursos necesarios para ejecutarlos. Por lo general, esto implica determinar una función que relaciona la longitud de la entrada de un algoritmo con el número de pasos que toma (su complejidad de tiempo) o el número de ubicaciones de almacenamiento que usa (su complejidad de espacio). Se dice que un algoritmo es eficiente cuando los valores de esta función son pequeños. Dado que las diferentes entradas de la misma longitud pueden hacer que el algoritmo tenga un comportamiento diferente, la función que describe su rendimiento suele ser un límite superior del rendimiento real, determinado a partir de las entradas del algoritmo en el peor de los casos.

El término “análisis de algoritmos” fue acuñado por Donald Knuth.

El análisis de algoritmos es una parte importante de una teoría de la complejidad computacional más amplia, que proporciona estimaciones teóricas de los recursos necesarios para cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones proporcionan una idea de las direcciones razonables de búsqueda de algoritmos eficientes.

En el análisis teórico de algoritmos es común estimar su complejidad en el sentido asintótico, es decir, estimar la función de complejidad para entradas arbitrariamente grandes. La notación Big O, la notación Big-omega y la notación Big-theta se utilizan para este fin. Por ejemplo, se dice que la búsqueda binaria se ejecuta en varios pasos proporcionales al logaritmo de la longitud de la lista ordenada que se busca, o en O (log (n)), coloquialmente “en tiempo logarítmico”. Por lo general, se utilizan estimaciones asintóticas porque diferentes implementaciones del mismo algoritmo pueden diferir en eficiencia. Sin embargo, las eficiencias de dos implementaciones “razonables” de un algoritmo dado están relacionadas por un factor multiplicativo constante llamado constante oculta .

Las medidas exactas (no asintóticas) de eficiencia a veces se pueden calcular, pero generalmente requieren ciertas suposiciones sobre la implementación particular del algoritmo, llamado modelo de cálculo. Un modelo de cálculo puede definirse en términos de una computadora abstracta, por ejemplo, una máquina de Turing, y / o postulando que ciertas operaciones se ejecutan en unidades de tiempo. Por ejemplo, si la lista ordenada a la que aplicamos la búsqueda binaria tiene n elementos, y podemos garantizar que cada búsqueda de un elemento en la lista se puede hacer en unidades de tiempo, entonces, como máximo, se necesitan log2 n + 1 unidades de tiempo para regresar una respuesta.