En informática teórica , la complejidad de circuitos es una rama de la teoría de la complejidad computacional en la que las funciones booleanas se clasifican según el tamaño o la profundidad de los circuitos booleanos que las calculan. Un concepto relacionado es la complejidad de circuitos de un lenguaje recursivo que se determina mediante una familia uniforme de circuitos (véase más abajo).
Demostrar límites inferiores para el tamaño de circuitos booleanos que calculan funciones booleanas explícitas es un enfoque popular para separar clases de complejidad. Por ejemplo, una clase de circuito destacada , P/poly, consiste en funciones booleanas computables por circuitos de tamaño polinomial. Demostrar eso separaría P y NP (ver a continuación).
Las clases de complejidad definidas en términos de circuitos booleanos incluyen AC 0 , AC , TC 0 , NC 1 , NC y P/poly .
Un circuito booleano con bits de entrada es un gráfico acíclico dirigido en el que cada nodo (generalmente llamado compuerta en este contexto) es un nodo de entrada de grado de entrada 0 etiquetado por uno de los bits de entrada, una compuerta AND , una compuerta OR o una compuerta NOT . Una de estas compuertas se designa como la compuerta de salida. Un circuito de este tipo calcula naturalmente una función de sus entradas. El tamaño de un circuito es el número de compuertas que contiene y su profundidad es la longitud máxima de un camino desde una compuerta de entrada hasta la compuerta de salida.
Existen dos nociones principales de complejidad de circuitos [1] La complejidad del tamaño del circuito de una función booleana es el tamaño mínimo de cualquier circuito computacional . La complejidad de la profundidad del circuito de una función booleana es la profundidad mínima de cualquier circuito computacional .
Estas nociones se generalizan cuando se considera la complejidad del circuito de cualquier lenguaje que contenga cadenas con diferentes longitudes de bits, especialmente lenguajes formales infinitos . Los circuitos booleanos, sin embargo, solo permiten un número fijo de bits de entrada. Por lo tanto, ningún circuito booleano es capaz de decidir tal lenguaje. Para tener en cuenta esta posibilidad, se consideran familias de circuitos donde cada uno acepta entradas de tamaño . Cada familia de circuitos generará naturalmente el lenguaje mediante la salida del circuito cuando una cadena de longitud es un miembro de la familia, y en caso contrario. Decimos que una familia de circuitos es de tamaño mínimo si no hay otra familia que decida sobre entradas de cualquier tamaño, , con un circuito de tamaño menor que (respectivamente para familias de profundidad mínima ). Por lo tanto, la complejidad del circuito es significativa incluso para lenguajes no recursivos . La noción de una familia uniforme permite que las variantes de la complejidad del circuito se relacionen con medidas de complejidad basadas en algoritmos de lenguajes recursivos. Sin embargo, la variante no uniforme es útil para encontrar límites inferiores sobre cuán compleja debe ser cualquier familia de circuitos para decidir lenguajes dados.
Por lo tanto, la complejidad del tamaño del circuito de un lenguaje formal se define como la función , que relaciona una longitud de bit de una entrada, , con la complejidad del tamaño del circuito de un circuito mínimo que decide si las entradas de esa longitud están en . La complejidad de la profundidad del circuito se define de manera similar.
Los circuitos booleanos son uno de los principales ejemplos de los llamados modelos no uniformes de computación en el sentido de que las entradas de diferentes longitudes son procesadas por diferentes circuitos, en contraste con los modelos uniformes como las máquinas de Turing donde se utiliza el mismo dispositivo computacional para todas las longitudes de entrada posibles. Un problema computacional individual se asocia así con una familia particular de circuitos booleanos donde cada uno es el circuito que maneja entradas de n bits. A menudo se impone una condición de uniformidad en estas familias, requiriendo la existencia de alguna máquina de Turing posiblemente limitada por recursos que, en la entrada n , produzca una descripción del circuito individual . Cuando esta máquina de Turing tiene un polinomio de tiempo de ejecución en n , se dice que la familia de circuitos es P-uniforme. El requisito más estricto de DLOGTIME -uniformidad es de particular interés en el estudio de clases de circuitos de poca profundidad como AC 0 o TC 0 . Cuando no se especifican límites de recursos, un lenguaje es recursivo (es decir, decidible por una máquina de Turing) si y solo si el lenguaje es decidido por una familia uniforme de circuitos booleanos.
Una familia de circuitos booleanos es uniforme en tiempo polinomial si existe una máquina de Turing determinista M , tal que
Una familia de circuitos booleanos es uniforme en el espacio logarítmico si existe una máquina de Turing determinista M , tal que
La complejidad de los circuitos se remonta a Shannon en 1949 [2], quien demostró que casi todas las funciones booleanas con n variables requieren circuitos de tamaño Θ(2 n / n ). A pesar de este hecho, los teóricos de la complejidad hasta ahora no han podido demostrar un límite inferior superlineal para ninguna función explícita.
Los límites inferiores de los superpolinomios se han demostrado bajo ciertas restricciones en la familia de circuitos utilizados. La primera función para la que se mostraron límites inferiores de circuitos superpolinomios fue la función de paridad , que calcula la suma de sus bits de entrada módulo 2. El hecho de que la paridad no esté contenida en AC 0 fue establecido por primera vez de forma independiente por Ajtai en 1983 [3] [4] y por Furst, Saxe y Sipser en 1984. [5] Las mejoras posteriores de Håstad en 1987 [6] establecieron que cualquier familia de circuitos de profundidad constante que calcule la función de paridad requiere un tamaño exponencial. Extendiendo un resultado de Razborov, [7] Smolensky en 1987 [8] demostró que esto es cierto incluso si el circuito se amplía con puertas que calculan la suma de sus bits de entrada módulo algún primo impar p .
El problema de la k -clique consiste en decidir si un grafo dado en n vértices tiene una clique de tamaño k . Para cualquier elección particular de las constantes n y k , el grafo se puede codificar en binario utilizando bits, que indican para cada arista posible si está presente. Luego, el problema de la k -clique se formaliza como una función tal que da como salida 1 si y solo si el grafo codificado por la cadena contiene una clique de tamaño k . Esta familia de funciones es monótona y se puede calcular mediante una familia de circuitos, pero se ha demostrado que no se puede calcular mediante una familia de circuitos monótonos de tamaño polinomial (es decir, circuitos con puertas AND y OR pero sin negación). El resultado original de Razborov en 1985 [7] fue mejorado posteriormente a un límite inferior de tamaño exponencial por Alon y Boppana en 1987. [9] En 2008, Rossman [10] demostró que los circuitos de profundidad constante con puertas AND, OR y NOT requieren tamaño para resolver el problema de k -clique incluso en el caso promedio . Además, hay un circuito de tamaño que calcula .
En 1999, Raz y McKenzie demostraron posteriormente que la jerarquía NC monótona es infinita. [11]
El problema de división de enteros se encuentra en un TC uniforme de 0. [12]
Los límites inferiores del circuito son generalmente difíciles. Los resultados conocidos incluyen
Está abierto si NEXPTIME tiene circuitos TC 0 no uniformes .
Las pruebas de los límites inferiores de los circuitos están estrechamente relacionadas con la desaleatorización . Una prueba que implicaría que uno o ambos permanentes no pueden calcularse mediante circuitos aritméticos no uniformes (polinomios) de tamaño y grado polinomiales. [16]
En 1997, Razborov y Rudich demostraron que muchos límites inferiores de circuitos conocidos para funciones booleanas explícitas implican la existencia de las llamadas propiedades naturales útiles contra la clase de circuito respectiva. [17] Por otro lado, las propiedades naturales útiles contra P/poly romperían los generadores pseudoaleatorios fuertes. Esto a menudo se interpreta como una barrera de "pruebas naturales" para demostrar límites inferiores de circuitos fuertes. En 2016, Carmosino, Impagliazzo, Kabanets y Kolokolova demostraron que las propiedades naturales también se pueden utilizar para construir algoritmos de aprendizaje eficientes. [18]
Muchas clases de complejidad de circuitos se definen en términos de jerarquías de clases. Para cada entero no negativo i , existe una clase NC i , que consiste en circuitos de tamaño polinómico de profundidad , que utilizan puertas AND, OR y NOT acotadas en abanico . La unión NC de todas estas clases es un tema de discusión. Al considerar puertas fan-in ilimitadas, se pueden construir las clases AC i y AC (que es igual a NC). Se pueden construir muchas otras clases de complejidad de circuitos con las mismas restricciones de tamaño y profundidad al permitir diferentes conjuntos de puertas.
Si un lenguaje determinado, pertenece a la clase de complejidad temporal para alguna función , entonces tiene complejidad de circuito . Si la máquina de Turing que acepta el lenguaje es inconsciente (es decir, lee y escribe las mismas celdas de memoria independientemente de la entrada), entonces tiene complejidad de circuito . [19]
Un circuito booleano monótono es aquel que solo tiene puertas AND y OR, pero ninguna puerta NOT. Un circuito monótono solo puede calcular una función booleana monótona, que es una función donde para cada , , donde significa que para todos los .