Nociones de computación eficiente

11

Un algoritmo de máquina de Turing de tiempo polinómico se considera eficiente si su tiempo de ejecución, en el peor de los casos, está limitado por una función polinómica en el tamaño de entrada. Soy consciente de la fuerte tesis de Church-Turing:

Cualquier modelo razonable de cálculo puede simularse eficientemente en máquinas Turing

Sin embargo, no conozco una teoría sólida para analizar la complejidad computacional de los algoritmos de -calculus.λ

¿Tenemos una noción de eficiencia computacional para cada modelo conocido de computación? ¿Hay modelos que solo sean útiles para preguntas de computabilidad pero inútiles para preguntas de complejidad computacional?

Mohammad Al-Turkistany
fuente

Respuestas:

9

Hasta donde yo sé, los principales modelos de computabilidad son el cálculo λ, las máquinas de Turing y las funciones recursivas . No conozco la situación con respecto a la complejidad en las funciones recursivas, pueden o no ser inútiles para la complejidad.

Puede verse como una coincidencia afortunada que las máquinas de Turing, que no son tan indiscutiblemente máquinas muy ineficientes, también sean un muy buen modelo de complejidad. Lo que hizo que las cosas fueran naturales es que hay muchas transformaciones que involucran TM que son polinomiales. (Máquina universal, simulación de una máquina -grabada con una máquina 1-grabada, de un alfabeto arbitrario a uno binario, simulando una PRAM , ...) y que los polinomios son una clase de funciones estables por operaciones aritméticas y composición - lo que los convierte en un buen candidato para la teoría de la complejidad.n

El cálculo λ puro era en sí mismo inútil para la complejidad. Sin embargo, un sistema de tipo simple entró en juego y permitió garantías de terminación para algunos términos λ de una manera muy fácil. Luego, algunos otros sistemas (sistemas T , F , ...) permitieron una gran expresividad manteniendo la terminación.

Al ser la eficiencia o la complejidad un refinamiento de la terminación y los tipos estrechamente relacionados con la lógica, más tarde surgieron lógicas lineales ligeras que caracterizan varias clases de complejidad. ( Elemental , P y algunas variaciones para PSPACE y otras). La investigación en este dominio es muy activa y no está restringida a estas clases de complejidad, y ni siquiera está restringida al cálculo λ.

tl; dr: λ-calculus fue útil para la computabilidad, la terminación y la teoría de la complejidad.

Sin embargo, para dar crédito donde se debe, las máquinas de Turing son una forma buena y unánime de definir qué es la complejidad, pero eso es cierto solo para los límites sueltos como "polinomio", no para los límites estrechos para los que los modelos tipo PRAM son más adecuados.

jmad
fuente
¿Por qué entonces hacemos la mayoría de nuestros análisis de tiempo de ejecución utilizando modelos similares a RAM?
Raphael
La realidad tiene operaciones básicas de memoria en (yo diría que ), por lo que los modelos tipo RAM son mucho más adecuados para límites estrechos como . Entonces tiene razón: las máquinas de Turing son excelentes cuando la transformación de PRAM no afecta mucho su límite. (Por ejemplo, cuando demuestra que su problema está en P o en L / NL)O ( log | m e m o r y | ) n log 2 7O(1)O(log|memory|)nlog27
jmad
@Raphael: estabas reaccionando a mi última oración, ¿verdad?
jmad
Sí, lo hice (por el bien del lector inexperto).
Raphael
1

En términos de complejidad temporal, creo que esto es difícil con el cálculo lambda. La razón es que el paso computacional de la unidad en el cálculo lambda es -reduction ( entrada de wikipedia ): Todas las expresiones, independientemente de su longitud, tomaría paso de tiempo computacional bajo este modelo.( λ x . t e r m ) v t e r m [ x : = v ] 1β

(λx.term)vterm[x:=v]
1

fuente
Puede poner un costo en reducción en términos de la cantidad o el tamaño de los canjes. De hecho, esto se ha estudiado ampliamente (busque referencias sobre reducción óptima, por ejemplo). β
Gilles 'SO- deja de ser malvado'
@Gilles: Dado que no sabemos cuál es el costo real (modelo unitario) de implementar una reducción óptima, su comentario no es realmente relevante. Por ahora, estos estudios solo proporcionan un refinamiento del problema planteado en esta respuesta.
Stéphane Gimenez
1

Acerca de incluir el cálculo λ en el modelo de complejidad estándar, aquí está el resumen de algunas (muy) recientes investigaciones sobre el tema. Da una respuesta a esta pregunta para alguna forma restringida de reducción β. Básicamente, la complejidad en el modelo de costo estándar es similar a contar los pasos de reducción β cuando se restringe a la reducción de carga (que incluye estrategias de llamada por nombre y llamada por valor).

Sobre la invarianza del modelo de costo unitario para la reducción de la cabeza por Beniamino Accattoli y Ugo Dal Lago. (WST2012, enlace al procedimiento )

El cálculo λ es un modelo computacional ampliamente aceptado de programas funcionales de orden superior, sin embargo, no hay ningún modelo de costo directo y universalmente aceptado para él. Como consecuencia, la dificultad computacional de reducir los términos λ a su forma normal generalmente se estudia razonando sobre algoritmos de implementación concretos. Aquí, mostramos que cuando la reducción de la cabeza es la dinámica subyacente, el modelo de costo unitario es invariable. Esto mejora los resultados conocidos, que solo tratan con una reducción débil (llamada por valor o llamada por nombre). La invarianza se prueba por medio de un cálculo lineal de sustituciones explícitas, que permite descomponer muy bien cualquier paso de reducción de la cabeza en el cálculo λ en pasos de sustitución más elementales, lo que hace que la combinación de reducción de cabeza sea más fácil de razonar.

Stéphane Gimenez
fuente
El OP solicitó modelos que no admitan análisis de complejidad. -calculus solo sirvió como motivación. λ
Raphael