La gran mayoría de los resultados positivos sobre problemas computacionales son pruebas constructivas , es decir, se demuestra que un problema computacional es resoluble mostrando un algoritmo que lo resuelve; se demuestra que un problema computacional pertenece a P mostrando un algoritmo que lo resuelve en un tiempo polinomial en el tamaño de la entrada; etc.
Sin embargo, existen varios resultados no constructivos , en los que se demuestra la existencia de un algoritmo sin mostrar el algoritmo en sí. Se utilizan diversas técnicas para proporcionar dichas pruebas de existencia.
Utilizando un conjunto finito desconocido
En teoría de juegos combinatorios
Un ejemplo sencillo de algoritmo no constructivo fue publicado en 1982 por Elwyn R. Berlekamp , John H. Conway y Richard K. Guy en su libro Winning Ways for Your Mathematical Plays . Se trata del juego Sylver Coinage , en el que los jugadores se turnan para especificar un número entero positivo que no puede expresarse como la suma de valores previamente especificados, y un jugador pierde cuando se ve obligado a especificar el número 1. Existe un algoritmo (presentado en el libro como un diagrama de flujo) para determinar si un primer movimiento dado es ganador o perdedor: si es un número primo mayor que tres, o uno de un conjunto finito de números 3-suaves , entonces es un primer movimiento ganador, y de lo contrario es perdedor. Sin embargo, se desconoce el conjunto finito.
En teoría de grafos
Las demostraciones algorítmicas no constructivas para problemas en teoría de grafos fueron estudiadas a partir de 1988 por Michael Fellows y Michael Langston . [ 1 ]
Una pregunta común en la teoría de grafos es si un grafo de entrada determinado tiene una propiedad específica. Por ejemplo:
- Entrada: un grafo G.
- Pregunta: ¿Se puede incrustar G en un espacio tridimensional, de manera que no haya dos ciclos disjuntos de G vinculados topológicamente (como en los eslabones de una cadena)?
Existe un algoritmo altamente exponencial que determina si dos ciclos incrustados en un espacio tridimensional están conectados, y se podrían probar todos los pares de ciclos en el grafo, pero no es obvio cómo considerar todas las posibles incrustaciones en un espacio tridimensional. Por lo tanto, a priori no está nada claro si el problema de la conexión es decidible.
Sin embargo, existe una demostración no constructiva que muestra que la vinculación es decidible en tiempo polinomial. La demostración se basa en los siguientes hechos:
- El conjunto de grafos para los que la respuesta es "sí" es cerrado bajo la operación de tomar menores . Es decir, si un grafo G puede incrustarse sin enlaces en el espacio tridimensional, entonces cada menor de G también puede incrustarse sin enlaces.
- Para cualquier par de grafos G y H , es posible encontrar en tiempo polinomial si H es un menor de G.
- Según el teorema de Robertson-Seymour , cualquier conjunto de grafos finitos contiene solo un número finito de elementos mínimos menores. En particular, el conjunto de instancias "sí" tiene un número finito de elementos mínimos menores.
Dado un grafo de entrada G , el siguiente "algoritmo" resuelve el problema anterior:
- Para cada elemento mínimo menor H :
- Si H es un menor de G , entonces devuelve "sí".
- devolver "no".
- Para cada elemento mínimo menor H :
La parte no constructiva aquí es el teorema de Robertson-Seymour. Si bien garantiza que existe un número finito de elementos mínimos menores, no nos dice cuáles son estos elementos. Por lo tanto, en realidad no podemos ejecutar el "algoritmo" mencionado anteriormente. Sin embargo, sabemos que existe un algoritmo y que su tiempo de ejecución es polinomial.
Existen muchos otros problemas similares cuya decidibilidad puede probarse de manera similar. En algunos casos, el conocimiento de que un problema puede probarse en tiempo polinomial ha llevado a los investigadores a buscar y encontrar un algoritmo real de tiempo polinomial que resuelve el problema de una manera completamente diferente. Esto demuestra que las pruebas no constructivas pueden tener resultados constructivos. [ 1 ]
La idea principal es que un problema puede resolverse mediante un algoritmo que utiliza, como parámetro, un conjunto desconocido. Aunque el conjunto sea desconocido, sabemos que debe ser finito, por lo que existe un algoritmo de tiempo polinomial.
Existen muchos otros problemas combinatorios que pueden resolverse con una técnica similar. [ 2 ]
Contando los algoritmos
En ocasiones, el número de algoritmos potenciales para un problema dado es finito. Podemos contar el número de algoritmos posibles y demostrar que solo un número limitado de ellos son "malos", por lo que al menos un algoritmo debe ser "bueno".
Como ejemplo, consideremos el siguiente problema. [ 3 ]
Selecciono un vector v compuesto por n elementos que son números enteros entre 0 y una cierta constante d .
Debes adivinar v mediante consultas de suma , que son consultas del tipo: "¿Cuál es la suma de los elementos con índices i y j ?". Una consulta de suma puede referirse a cualquier número de índices del 1 al n .
¿Cuántas consultas necesitas? Obviamente, n consultas siempre son suficientes, porque puedes usar n consultas para obtener la "suma" de un solo elemento. Pero cuando d es suficientemente pequeño, es posible hacerlo mejor. La idea general es la siguiente.
Cada consulta puede representarse como un vector de 1 por n cuyos elementos están todos en el conjunto {0,1}. La respuesta a la consulta es simplemente el producto escalar del vector de consulta por v . Cada conjunto de k consultas puede representarse mediante una matriz de k por n sobre {0,1}; el conjunto de respuestas es el producto de la matriz por v .
Una matriz M es "buena" si nos permite identificar de forma única a v . Esto significa que, para cada vector v , el producto M v es único. Una matriz M es "mala" si existen dos vectores distintos, v y u , tales que M v = M u .
Mediante álgebra, es posible acotar el número de matrices "malas". Esta cota depende de d y k . Por lo tanto, para un valor de d suficientemente pequeño , debe existir una matriz "buena" con un valor de k pequeño , lo que corresponde a un algoritmo eficiente para resolver el problema de identificación.
Esta demostración no es constructiva en dos sentidos: no se sabe cómo encontrar una buena matriz; e incluso si se proporciona una buena matriz, no se sabe cómo reconstruir eficientemente el vector a partir de las respuestas de la consulta.
Hay muchos más problemas similares que pueden demostrarse que son resolubles de manera similar. [ 3 ]
Ejemplos adicionales
- Algunos problemas computacionales pueden demostrarse como decidibles mediante la Ley del Tercero Excluido . Sin embargo, estas demostraciones no suelen ser muy útiles en la práctica, ya que los problemas en cuestión son bastante artificiales.
- En [ 4 ] se da un ejemplo de la teoría de la complejidad cuántica (relacionada con la complejidad de las consultas cuánticas ).
Referencias
- 1 2 Fellows, MR; Langston, MA (1988). "Herramientas no constructivas para probar la decidibilidad en tiempo polinomial" . Journal of the ACM . 35 (3): 727. doi : 10.1145/44483.44491 . S2CID 16587284 .
- ↑ Brown, DJ; Fellows, MR; Langston, MA (2007). "Autorreducción en tiempo polinomial: motivaciones teóricas y resultados prácticos*". International Journal of Computer Mathematics . 31 ( 1–2 ): 1–9 . doi : 10.1080/00207168908803783 .
- 1 2 Grebinski, V.; Kucherov, G. (2000). "Reconstrucción óptima de grafos bajo el modelo aditivo" (PDF) . Algorithmica . 28 : 104–124 . doi : 10.1007/s004530010033 . S2CID 33176053 .
- ↑ Kimmel, S. (2013). "Quantum Adversary (Upper) Bound". Chicago Journal of Theoretical Computer Science . 19 : 1–14 . arXiv : 1101.0797 . doi : 10.4086/cjtcs.2013.004 . S2CID 119264518 .
Créditos
Las referencias de esta página se recopilaron de los siguientes hilos de Stack Exchange :
- ¿Existen problemas sin algoritmos eficientes, donde los teoremas de existencia demuestran que tales algoritmos deben existir? . CS Theory Stack Exchange . Consultado el 21 de noviembre de 2014 .
- "¿Existen pruebas no constructivas de la existencia de algoritmos?" . CS Theory Stack Exchange . Consultado el 21 de noviembre de 2014 .
- "¿Existe algún algoritmo cuya existencia esté demostrable, aunque desconozcamos cuál es?" . Computer Science Stack Exchange . Consultado el 21 de noviembre de 2014 .
Véase también
- Teoría de la complejidad computacional
- Constructivismo (filosofía de las matemáticas)