Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Decidibilidad y Complejidad

[date: 14-01-2025] [last modification: 14-01-2025]
[words: 1042] [reading time: 5min] [size: 10996 bytes]

Lenguajes generados por las máquinas de Turing. Análisis de la complejidad de una máquina de Turing y las clases de complejidades P y NP. Decibilidad y el problema de la parada.

Lenguajes recursivos (LRC) y recursivamente enumerables (LRE)

Lenguaje Recursivamente Enumerable (LRE)

Un lenguaje LL es recursivamente enumerable (LRE) si existe una máquina de Turing que acepta cualquier cadena del lenguaje y se para:

q0wx1qfx2 q_0 w \vdash^* x_1 q_f x_2

Si ww es una palabra del lenguaje (wLw \in L) y qfq_f es un estado final (qfFq_f \in F).

Sin embargo, si ww no es del lenguaje (wLw \notin L), la máquina se parará en un estado no final o entrará en un bucle infinito.

Es decir, los LRE son la clase de lenguajes que aceptan las máquinas de Turing.

Lenguaje recursivo (LRE)
Un lenguaje LL sobre un alfabeto Σ\Sigma es recursivo (LRC) si existe una MT que acepta LL y se para con cualquier cadena de Σ+\Sigma^+, se acepte o no.

Los lenguajes LRC garantizan que la MT que los acepta terminará siempre y nunca entrará en un bucle infinito.

Hay lenguajes que no son LRE. La demostración es compleja, puesto que todos los lenguajes descritos de forma algorítmica son aceptados por MT.

Decidibilidad

Ya hemos visto que una función ff es computable en un dominio si existe una MT que computa el valor de ff para todos los argumentos del dominio.

Si el resultado de la computación de un problema es Sí / No, se habla de decidibilidad / indecidibilidad (respectivamente).

Decidibilidad
Los problemas decidibles son aquellos en los que existe una MT que da la respuesta correcta (Sí o No) para cada argumento del dominio. Esto significa que si un problema es computable, también será decidible.

Problema de la parada

Sea MM una MT cualquiera, descrita por la cadena wMw_M, y sea ww una cadena de entrada a la máquina MM.

Una solución al problema de la parada sería una máquina de Turing universal HH en la que, para cualquier máquina MM (cualesquiera wMw_M y ww), se ejecuta una computación para determinar si MM entra en un bucle infinito o no:

qyq_y el es estado final representando la respuesta Sí, se para y qnq_n de la respuesta No, no se para, para la máquina HH.

No existe ninguna MT HH que se comporte como se require para el problema de la parada: es un problema indecidible. De lo contrario, entonces todos los LRE sería LRC.

Nota
Ver también el artículo sobre algoritmos

Complejidad computacional

Para determinar la complejidad computacional de cualquier algoritmo:

Complejidad temporal

Si cualquier cadena ww de LL y con menos símbolos que nn (wn|w| \le n) es aceptada en O(T(n))O(T(n)) movimientos, entonces se dice que la MT acepta LL en tiempo T(n)T(n).

Por tanto, si una computación tiene una complejidad temporal T(n)T(n), significa que puede ser resuelta en no más de T(n)T(n) movimientos de una MT para un tamaño de problema nn.

Es decir, que una computación o MT tiene complejidad temporal de T(n)T(n) si acepta o termina en menos de esos movimientos sea cual sea la entrada. Generalmente, no nos interesará el tiempo exacto, pero sí el orden de magnitud.

Desde el punto de vista de la decidibilidad, todas las MT son equivalentes; pero desde el punto de vista de la complejidad no. Por ejemplo, para reconocer el lenguaje L={anbnn1}L = \set{a^n b^n | n \ge 1}:

Complejidades P y NP

Nota
Ver también el artículo sobre algoritmos
Teorema
Para cualquier cadena ww de LL, existe al menos una secuencia de movimientos O(T(n))O(T(|n|)) en una máquina de Turing no determinista que lleva a la aceptación.
TD(T(n))TND(T(n)) \operatorname{TD}(T(n)) \subseteq \operatorname{TND}(T(n))
P

PP es el conjunto de lenguajes aceptados por una MT determinista en tiempo polinómico.

P=i1TD(ni) P = \bigcup_{i \ge 1} \operatorname{TD}(n^i)
NP

NPNP es el conjunto de lenguajes aceptados por una MT no determinista en tiempo polinómico.

NP=i1TND(ni) NP = \bigcup_{i \ge 1} \operatorname{TND}(n^i)

Sabemos que PNPP \subseteq NP, pero…

P=?NP P \overset{?}{=} NP

Este es un problema del milenio, todavía sin resolver.

Problemas intratables
Problemas computables pero que requerirían, para entradas grandes, tal cantidad de recursos (tiempo y memoria) que su implementación no es viable en la práctica.
Tesis Cook-Karp
Los problemas de la clase PP son tratables y el resto son intratables.
Lenguajes reducibles en tiempo polinómico

Un lenguaje L1L_1 es reducible en tiempo polinómico a otro lenguaje L2L_2 si existe una MT determinista tal que cualquier cadena w1Σ1+w_1 \in \Sigma_1^+ puede ser transformada en tiempo polinómico en otra cadena w2Σ2+w_2 \in \Sigma_2^+ de forma que:

w1L1    w2L2 w_1 \in L_1 \iff w_2 \in L_2

Es decir, que es posible transformar un problema (o computación, representado como una cadena de un lenguaje) a otro por una MT en tiempo polinómico. Si uno de estos problemas es de la clase PP o NPNP, entonces el otro también lo será, dado que se puede convertir de uno a otro sin un gran coste adicional.

NPNP-completo
Un lenguaje LL es NPNP-completo si LNPL \in NP y todo LNPL’ \in NP es reducible en tiempo polinómico a LL.

Además, existe un conjunto de problemas NPNP, donde todos son reducibles en tiempo polinómico entre sí.

Anterior: Máquinas de Turing Volver a Compiladores e Intérpretes