En la teoría de la complejidad computacional, la clase NC (del inglés Nick's Class ) es el conjunto de problemas de resolución que se pueden resolver en tiempo polilogarítmico en una computadora paralela con un número polinomial de procesadores. En otras palabras, un problema pertenece a la clase NC si tiene constantes y puede resolverse en el tiempo usando procesadores paralelos. Stephen Cook [1] [2] lo llamó "Nick's Class" en honor a Nick Pippenger , quien realizó una extensa investigación [3] sobre circuitos con profundidad de polílogo y tamaño polinomial. [cuatro]
Así como la clase P puede considerarse como una clase de problemas maleables ( Tesis de Cobham ), NC puede considerarse como una clase de problemas que pueden resolverse eficientemente en una computadora paralela. [5] NC es un subconjunto de P porque se pueden simular cálculos polilogarítmicos paralelos mediante cálculos polinómicos secuenciales. No se sabe si NP = P es cierto, pero la mayoría de los científicos cree que no lo es, lo que implica que es probable que haya tareas maleables que son secuenciales "por naturaleza" y que no pueden acelerarse significativamente mediante el paralelismo. Así como la clase de problemas NP-completos puede considerarse como la clase de problemas "probablemente intratables", la clase de problemas P-completos , cuando se reduce a NC, puede considerarse como "probablemente no paralelizable" o "muy probablemente secuencial por naturaleza".
Una computadora paralela en la definición puede considerarse una máquina de acceso aleatorio paralelo ( PRAM - del inglés paralelo, máquina de acceso aleatorio). Es una computadora paralela con un grupo de memoria central, cualquier procesador del cual puede acceder a cualquier bit en tiempo constante. La definición de NC no se ve afectada por la forma en que PRAM accede al mismo bit desde múltiples procesadores al mismo tiempo.
NC se puede definir como el conjunto de problemas de resolución que se pueden resolver mediante un circuito booleano distribuido con profundidad polilogarítmica y un número polinomial de puertas .
NC incluye muchas tareas, incluyendo:
A menudo, los algoritmos para estos problemas se idearon por separado y no podían ser una adaptación ingenua de algoritmos conocidos: el método de Gauss y el algoritmo de Euclides se basan en el hecho de que las operaciones se realizan secuencialmente.
NC i es el conjunto de problemas de resolución que se pueden resolver mediante circuitos booleanos distribuidos con un número polinómico de compuertas (con no más de dos entradas) y profundidad , o que se pueden resolver en el tiempo mediante una computadora paralela con un número polinómico de procesadores. Obviamente,
¿Qué es la jerarquía NC ?
Podemos asociar las clases NC con las clases de almacenamiento L , NL [6] y AC [7] :
Las clases NC y AC se definen de forma idéntica, excepto por el número ilimitado de entradas de válvula para la clase AC. Para cada , [5] [7] es verdadero :
Una consecuencia de esto es NC = AC . [8] Se sabe que ambas inclusiones son estrictas para . [5] De manera similar, podemos obtener que NC es equivalente al conjunto de problemas resueltos en una máquina de Turing variable con no más de dos opciones en cada paso, y con O (log n ) memoria y alteraciones. [9]
Una de las grandes preguntas abiertas en la teoría de la complejidad computacional es si cada incorporación de la jerarquía NC es adecuada. Como señaló Papadimitriou, si NC i = NC i +1 es cierto para algunos , entonces NC i = NC j para todos y, como consecuencia, NC i = NC . Esta observación se denomina plegamiento de jerarquía NC porque incluso a partir de una sola igualdad en la cadena de anidamiento:
se deduce que toda la jerarquía NC "colapsa" hasta cierto nivel . Por lo tanto, dos opciones son posibles:
Se cree ampliamente que (1) es cierto, aunque aún no se ha encontrado evidencia con respecto a la veracidad de ninguna de las declaraciones.
Un programa de bifurcación de ancho y largo variable consta de una secuencia de instrucciones de largo . Cada instrucción es un triple , donde es el índice de la variable a comprobar , y y son las funciones de permutación de a . Los números se llaman los estados del programa de bifurcación. El programa comienza en el estado 1, y cada instrucción cambia el estado a o , dependiendo de si la variable -ésima es igual a 0 o 1.
La familia de programas de bifurcación consta de programas de bifurcación con variables para cada uno .
Es fácil demostrar que cualquier lenguaje puede ser reconocido por una familia de programas de ramificación con ancho 5 y largo exponencial, o una familia con ancho exponencial y largo lineal.
Todos los lenguajes regulares no se pueden reconocer como una familia de programas de ramificación de instrucciones lineales de ancho constante (ya que un DFA se puede convertir en un programa de ramificación). BWBP denota una clase de lenguajes reconocidos por la familia de programas de bifurcación BWBP (ancho acotado y longitud polinomial) . [10] .
El teorema de Barrington [11] establece que BWBP es exactamente NC 1 no asignado . La demostración del teorema utiliza la indecidibilidad del grupo de simetría . [diez]
Probemos que un programa de bifurcación ( VP ) con ancho constante y tamaño polinomial se puede convertir en un circuito de NC 1 .
Por el contrario: sea un circuito C de NC 1 . Sin pérdida de generalidad, supondremos que solo se utilizan puertas AND y NOT .
Definición: Un VI se llama -calcular una función booleana o si da como resultado - la permutación idéntica , y por su resultado - la -permutación. Dado que nuestro esquema C describe alguna función booleana y solo ella, podemos intercambiar estos términos.
Para la demostración utilizaremos dos lemas:
Lema 1 : Si hay un VP que -calcula , entonces también existe un VP que -calcula (es decir, igual a at , e igual a .
Prueba : dado que y son ciclos, y dos ciclos cualesquiera son conjugados , entonces existe una permutación tal que = . Luego multiplicamos por las permutaciones y por la primera instrucción VP de la izquierda (para obtener las permutaciones y ), y multiplicamos las permutaciones de la última instrucción por la derecha (obtenemos y ). Si antes nuestras acciones (sin pérdida de generalidad) era igual a , ahora el resultado será , y si era igual a , entonces el resultado será igual a . Entonces, tenemos un VI que calcula , con la misma longitud (el número de instrucciones no ha cambiado).
Nota : si multiplicamos la salida de VP por la derecha, entonces de manera obvia obtenemos la función de cálculo de VP .
Lema 2 : Si hay dos VIs: -calculating y -computing con longitudes y , donde y son permutaciones de 5 ciclos, entonces existe un VI con una permutación de 5 ciclos tal que el VI -calcula y su tamaño no excede + .
Demostración : Dispongamos "en una fila" las instrucciones de cuatro PV: , , , (construimos las inversas por el Lema 1). Si una o ambas funciones devuelven 0, entonces el resultado de un programa grande es: por ejemplo, con . Si ambas funciones devuelven 1, entonces . Aquí , lo cual es cierto debido al hecho de que estas permutaciones son 5-cíclicas (debido a la insolubilidad del grupo de simetría ). La longitud del nuevo VI se calcula por definición.
Prueba del teorema
Probaremos por inducción. Supongamos que tenemos un circuito C con entradas y que para todos los subcircuitos D y permutaciones de 5 ciclos hay un VI que calcula D. Demostremos que para todas las 5 permutaciones existe un VP que calcula C.
El tamaño del programa de bifurcación resultante no excede , donde es la profundidad del circuito. Si el esquema tiene una profundidad logarítmica, entonces el VP tiene una longitud polinomial.
Clases de complejidad de algoritmos | |
---|---|
Considerado ligero |
|
Se supone que es difícil | |
Considerado difícil |
|