Aquí hay dos capas de abstracción:
- Teóricamente , todas las computadoras simplemente implementan máquinas de Turing. Por lo tanto, pueden resolver todos los problemas que una máquina de Turing podría resolver, dado que una máquina de Turing solo toma un algoritmo y una entrada, una máquina de Turing puede resolver cualquier cosa que, en principio, se pueda resolver en una serie de pasos.
Entonces, ¿problemas de matemáticas en la secundaria? Cheque. ¿Ecuaciones diferenciales parciales de alta dimensión que describen la evolución de las masas estelares? Cheque. Si alguien puede idear una serie de pasos para resolver un problema, una máquina Turing automatizará esos pasos por usted.
En consecuencia, las máquinas de Turing pueden resolver una amplia clase de problemas, pero existen clases conocidas de problemas que no se pueden resolver. Estos son conocidos como problemas indeciables , y aquí hay una lista muy interesante de ellos. Un problema indecidible no puede resolverse en una serie de pasos, incluso en principio, en otras palabras, nunca puede haber un algoritmo para resolverlos.
- ¿Necesito ser bueno en matemáticas para aprender codificación?
- ¿Por qué los maestros programadores insisten en usar las matemáticas para enseñar a sus estudiantes los conceptos básicos de la programación dado que no se usa tanto a diario?
- ¿Qué tipos de matemáticas son las más destacadas en informática?
- Debe encontrar para un número determinado de pulsaciones de teclas (N) el número máximo de caracteres 'A' que puede generar. Solo puede usar 4 teclas: A, Ctrl + A, Ctrl + C y Ctrl + V. Solo se permiten N pulsaciones de teclas. ¿Puedes escribir este programa?
- En términos simples, ¿qué es SOCP (programación de cono de segundo orden / programación semi-definida) y en qué se diferencia la optimización convexa de otros tipos de optimizaciones?
¿Qué hace que un problema sea indecidible? Resulta que hay ciertos problemas de ‘abuela’ a los que equivalen muchos problemas indecidibles, el más famoso de los cuales es el problema de la detención. Los problemas de detención preguntan si hay un programa que siempre puede decidir si un programa determinado finalmente devuelve una respuesta SÍ / NO de otra computadora.
¿Por qué es esto problemático? Una manera fácil de ver por qué esto podría hacer que una computadora nunca responda: suponga que existe un programa así, y lo llamamos A. Ahora presentamos un nuevo algoritmo B que nunca devuelve una respuesta si A regresa, y que regresa solo si A nunca devuelve una respuesta (sí, es posible hacer esto). Luego lo alimentamos a A, y vemos que no hay ninguna circunstancia en la que A devuelva una respuesta, lógicamente imposible, ya que se supone que A siempre regresa para cualquier programa. ¡Así que tal programa A nunca puede existir!
Cualquier problema que sea equivalente o reducible al problema de detención es efectivamente insoluble por una computadora. A muchas personas les gusta pensar que los problemas indecidibles tienen un elemento de autorreferencia para ellos (como vimos en el boceto de prueba del problema de detención anterior), pero eso no está bien definido de una manera concreta. Los problemas indecidibles también pueden existir sin conexiones subyacentes; de hecho, no todos los problemas indecidibles están relacionados con el problema de detención, aunque muchos de ellos lo están.
Larga historia corta: una computadora puede resolver todos los problemas para los cuales existen una serie de pasos para resolverlos. No todos los problemas, sorprendentemente, se pueden resolver con una serie de pasos, por lo que una computadora, naturalmente, nunca puede resolverlos.
- Prácticamente , las computadoras no son máquinas de Turing. Las máquinas de Turing son abstractas y pueden suponer una memoria infinita: la mayoría de las computadoras personales tienen un límite de 128 GB de memoria de acceso aleatorio y pueden alcanzar hasta 2 TB en el espacio en disco (que todavía es bastante alto, pero está muy lejos del infinito).
Por lo tanto, las computadoras están limitadas a resolver problemas de tal manera que resolverlos realmente consuma demasiada memoria. Los programadores encuentran rutinariamente los llamados ‘desbordamientos de pila’, donde tratar de resolver un problema ocupa tanta memoria que excede el límite de memoria asignado a ese programa.
Es natural descartar esto como una condición temporal: siempre es posible obtener acceso a más memoria, por ejemplo, al tener en sus manos dispositivos de almacenamiento más eficientes que comprimen información en espacios más pequeños o simplemente multiplicando el número de tarjetas de memoria o discos tener y conectarlos. Sin embargo, resulta que hay límites físicos en la cantidad de memoria que, en teoría, podría almacenar en un solo disco, lo que, aunque todavía estamos muy lejos de alcanzar, es una consideración importante.
Por lo tanto, puede haber en la práctica problemas que una computadora física nunca podría resolver, aunque uno teórico sí puede resolverlo.