stringtranslate.com

Algoritmo de enumeración

En informática , un algoritmo de enumeración es un algoritmo que enumera las respuestas a un problema computacional . Formalmente, un algoritmo de este tipo se aplica a problemas que toman una entrada y producen una lista de soluciones, de manera similar a los problemas de funciones . Para cada entrada, el algoritmo de enumeración debe producir la lista de todas las soluciones, sin duplicados, y luego detenerse. El rendimiento de un algoritmo de enumeración se mide en términos del tiempo requerido para producir las soluciones, ya sea en términos del tiempo total requerido para producir todas las soluciones, o en términos del retraso máximo entre dos soluciones consecutivas y en términos de un tiempo de preprocesamiento , contado como el tiempo antes de generar la primera solución. Esta complejidad se puede expresar en términos del tamaño de la entrada, el tamaño de cada salida individual o el tamaño total del conjunto de todas las salidas, de manera similar a lo que se hace con los algoritmos sensibles a la salida .

Definiciones formales

Un problema de enumeración se define como una relación sobre cadenas de un alfabeto arbitrario :

Un algoritmo resuelve si para cada entrada el algoritmo produce la secuencia (posiblemente infinita) tal que no tiene duplicados y si y solo si . El algoritmo debería detenerse si la secuencia es finita.

Clases de complejidad comunes

Los problemas de enumeración se han estudiado en el contexto de la teoría de la complejidad computacional y se han introducido varias clases de complejidad para dichos problemas.

Una clase muy general de este tipo es EnumP , [1] la clase de problemas para los que se puede comprobar la exactitud de una posible salida en tiempo polinomial en la entrada y la salida. Formalmente, para un problema de este tipo, debe existir un algoritmo A que tome como entrada la entrada del problema x , la salida candidata y , y resuelva el problema de decisión de si y es una salida correcta para la entrada x , en tiempo polinomial en x e y . Por ejemplo, esta clase contiene todos los problemas que equivalen a enumerar los testigos de un problema en la clase NP .

Otras clases que se han definido incluyen las siguientes. En el caso de problemas que también están en EnumP , estos problemas se ordenan de menos a más específicos:

Técnicas comunes

Ejemplos de problemas de enumeración

Conexión con la teoría de la computabilidad

La noción de algoritmos de enumeración también se utiliza en el campo de la teoría de la computabilidad para definir algunas clases de alta complejidad como RE , la clase de todos los problemas enumerables recursivamente . Esta es la clase de conjuntos para los que existe un algoritmo de enumeración que producirá todos los elementos del conjunto: el algoritmo puede ejecutarse indefinidamente si el conjunto es infinito, pero cada solución debe ser producida por el algoritmo después de un tiempo finito.

Referencias

  1. ^ ab Strozecki, Yann; Mary, Arnaud (2019). "Enumeración eficiente de soluciones producidas por operaciones de cierre". Matemáticas discretas y ciencias de la computación teórica . 21 (3). doi :10.23638/DMTCS-21-3-22.
  2. ^ Read, Ronald C. ; Tarjan, Robert E. (1975). "Límites en algoritmos de retroceso para ciclos de listado, rutas y árboles de expansión". Redes . 5 (3): 237–252. doi :10.1002/net.1975.5.3.237.
  3. ^ Hagen, Matthias (2008). Problemas de complejidad computacional y algorítmica de MONET. Göttingen: Cuvillier. ISBN 9783736928268.
  4. ^ Bagan, Guillaume; Durand, Arnaud; Grandjean, Etienne (2007). Duparc, Jacques; Henzinger, Thomas A. (eds.). "Sobre consultas conjuntivas acíclicas y enumeración de retardo constante". Lógica informática . Apuntes de clase en informática. 4646. Springer Berlin Heidelberg: 208–222. doi :10.1007/978-3-540-74915-8_18. ISBN . 9783540749158.
  5. ^ Marquis, P.; Darwiche, A. (2002). "Un mapa de compilación de conocimientos". Revista de investigación en inteligencia artificial . 17 : 229–264. arXiv : 1106.1819 . doi :10.1613/jair.989. S2CID  9919794.