La forma más eficiente de convertir un circuito

18

EDITAR (22 de agosto de 2011):

Estoy simplificando aún más la pregunta y generando una recompensa por la pregunta. Quizás esta pregunta más simple tenga una respuesta fácil. También voy a tachar todas las partes de la pregunta original que ya no son relevantes. (¡Gracias a Stasys Jukna y Ryan O'Donnell por responder parcialmente la pregunta original!)


Antecedentes:

Dado un circuito AC 0 con profundidad k y tamaño S, existe otro circuito AC 0 que calcula la misma función con profundidad k y tamaño modo que el nuevo circuito tiene fanout = 1 para todas las puertas. En otras palabras, el circuito se ve como un árbol (excepto en las entradas, ya que las entradas pueden desplegarse en más de una puerta). Una forma de hacerlo es duplicando todas las puertas que tienen fanout> 1 hasta que todas las puertas tengan fanout = 1.O(Sk)

¿Pero es esta la forma más eficiente de convertir AC? 0 circuitos de CA a 0 circuitos con despliegue en abanico 1? Leí lo siguiente en la Lección 14 de las notas del curso de Ryan O'Donnell :

Supongamos que C es cualquier circuito de profundidad k de tamaño S que calcula la paridad. Es un ejercicio para mostrar que C puede convertirse en un circuito de profundidad k nivelado, donde los niveles alternan las puertas AND y OR, los cables de entrada son los literales 2n, y cada puerta tiene un abanico 1 (es decir, es un árbol ) - y el tamaño aumenta a lo sumo .(2kS)2O(S4)

Nota al pie: En realidad, este es un ejercicio un poco complicado. Es más fácil si solo tiene que obtener el tamaño , que es casi lo mismo para nuestros propósitos si piensa en k como una "constante".O(Sk)

¿Significa esto que hay una manera de tomar cualquier circuito k AC 0 de profundidad de tamaño S y convertirlo en un circuito AC 0 con fanout 1, profundidad k y tamaño ? Si es así, ¿cómo se hace esto y es este el método más conocido? (2kS)2

Pregunta original

Dado un circuito AC 0 con profundidad k y tamaño S, ¿cuál es el método más conocido (en términos de minimizar el tamaño del circuito del circuito resultante) de convertir esto en un circuito AC 0 de profundidad k y puerta de salida 1? ¿Hay algún límite inferior conocido para esto?


Pregunta más nueva y simple:

Esta pregunta es una relajación de la original donde no insisto en que el circuito resultante sea de profundidad constante. Como se explicó anteriormente, hay una manera de convertir un circuito AC 0 con profundidad k, tamaño S en un circuito con tamaño modo que el nuevo circuito tenga un fanout = 1 para todas las puertas. ¿Hay una mejor construcción?O(Sk)

Dado un circuito AC 0 con profundidad k y tamaño S, ¿cuál es el método más conocido (en términos de minimizar el tamaño del circuito del circuito resultante) de convertir esto a un circuito de cualquier profundidad con puerta de salida 1?

Robin Kothari
fuente
55
El límite está bien. Pero si el límite ( 2 k S ) 2 fuera válido para circuitos arbitrarios (no solo aquellos que calculan la función de Paridad), entonces uno podría simular cada circuito fanin-2 de tamaño S por un fanin- Fórmula 2 de tamaño O ( S 5 ) : las puertas S fanin-2 son suficientes para simular una puerta de fanin sin límites. Entonces la fórmula podría transformarse en una de profundidad O ( log S )O(Sk)(2kS)2SO(S5)SO(logS)(un resultado bien conocido, atribuido erróneamente a Spira). Por lo tanto, obtendríamos que la profundidad del circuito es más . Pero esto es demasiado bueno para ser verdad: el límite superior más conocido para la profundidad del circuito es solo O ( S / log S ) . O(logS)O(S/logS)
Stasys
2
Btw también es válido para circuitos arbitrarios , pero solo si permitimos puertas de fanin-2 (ver, por ejemplo, Thm. 4.1 en el libro de Wegener); entonces los circuitos aún pueden recordar resultados intermedios. La situación con fanin-1 es muy diferente: aquí los circuitos no tienen memoria en absoluto. Pero la pregunta de Robin es muy interesante. Incluso sería interesante mostrar que los circuitos de profundidad 3 de tamaño S pueden simularse mediante fórmulas de profundidad 3 de tamaño menor que S 2 . O(kS)2)SS2
Stasys
44
Confiaría en lo que sea que Stas diga arriba; No estaba siendo muy cuidadoso en esas notas (lo siento). Por otro lado, recuerdo que cuando los escribí me sentí bastante frustrado por el hecho del hecho, mencionado en muchos documentos, pero casi nunca con citas, de que uno puede convertir circuitos arbitrarios en capas sin inflar el tamaño "mucho" . Me encantaría ver un puntero al resultado más conocido sobre este tema. AC0
Ryan O'Donnell
2
@ Ryan O'Donnell: de hecho, uno puede hacer fácilmente un circuito en capas con una explosión . Utilizamos asociatividad para lograr que cada compuerta AND tenga solo compuertas OR como entradas, y viceversa; La profundidad permanece sin cambios. Luego, organice las puertas por su profundidad y agregue, si es necesario, puertas triviales fanin-1 OR y AND para obtener un circuito en capas; la profundidad sigue siendo la misma y el tamaño aumenta solo por un factor de k. Pero entendí que Robin quiere que un circuito se convierta en una fórmula (un circuito en forma de árbol, excepto que los literales de entrada pueden tener un gran abanico). O(kS)
Stasys
2
@ Ryan O'Donnell: ¡Gracias por la respuesta y por publicar sus apuntes en línea! En particular, sus apuntes sobre el análisis de las funciones booleanas han sido de gran ayuda.
Robin Kothari

Respuestas:

11

Intentaré resumir mis comentarios anteriores.

Primero ignoremos el hecho de que su circuito original tiene una profundidad (constante) ; acaba de asumir que tiene el tamaño S . Sea A el número más pequeño, de modo que cada tamaño de circuito de ventilador sin límites S pueda transformarse en una fórmula de ventilador sin límites F de tamaño O ( S A ) . Afirmo que lo mejor que podemos hacer hasta ahora es lograr A = O ( S / log 2 S ) . Digamos, incluso no se sabe si hay algún circuito (fanin-2) de tamaño S = O ( n )kSASFO(SA)A=O(S/log2S)S=O(n)se puede simular con una fórmula de tamaño menor que .exp(n/logn)

Para mostrar el reclamo, transformamos la fórmula en una fórmula fanin-2 F ' de tamaño M = O ( S 2 A ) . Es bien sabido que la profundidad D de cada fórmula F ' puede hacerse logarítmica en su tamaño, es decir D = O ( log M ) = O ( A log S ) . [Esto fue demostrado por primera vez por Khrapchenko 1968, y luego la constante bajo big-O se mejoró a D 1.73 log 2 MFFM=O(S2A)DFD=O(logM)=O(AlogS)D1.73log2Mpor varios autores.] Por otro lado, el resultado más conocido para los circuitos fanin-2 [Paterson y Valiant, TCS 2 (3), 397-400] dice que . Por lo tanto, tener una simulación con A mucho más pequeña que S / log 2 S mejoraría la simulación de tamaño-profundidad más conocida para circuitos.Depth=O(Size/logSize)AS/log2S

Sin embargo, esto es solo una "palabra de precaución": no responde a su pregunta porque supone que su circuito original tiene una profundidad constante , lo que implica que en este caso solo podemos tomar A = k (o A = k - 1 si tenemos una sola puerta de salida). ¡El poder de la simulación Paterson-Valiant es que se aplica a circuitos arbitrarios, incluso muy desequilibrados, cuya profundidad es casi del tamaño completo! Pero en su configuración de profundidad acotada, incluso el caso k = 3 no está claro: ¿puede cada circuito de profundidad 3 de tamaño S transformarse en una fórmula de profundidad 3 de tamaño mucho más pequeño que S 2?kA=kA=k1k=3SS2? Supongo que la respuesta debería ser "no" (podría ser un ejercicio interesante para los estudiantes). Una fórmula de profundidad 3 es solo un gran OR de CNF. La pregunta es encontrar un OR de CNF que compartan muchas cláusulas en común, pero que por lo demás sean "muy diferentes" para forzar una fórmula grande de profundidad 3.

El problema es que queremos obtener una fórmula (un circuito fanout-1). Como se señaló anteriormente, permitir puertas de fanout-2 simplifica la simulación: Hoover, Klawe y Pippenger [JACM 31 (1), 1980] muestran que cualquier circuito fanin-2 de tamaño y profundidad D tiene un fanin-2 y fanout equivalentes -2 circuito de tamaño 3 S - 2 n y la profundidad 2 D . Por lo tanto, si fanin no tiene límites, el circuito resultante tendrá un tamaño O ( S 2 ) y una profundidad O ( D log S ) .SD3S2n2DO(S2)O(DlogS)

Hay otro resultado relacionado de alguna manera con su pregunta. Lozhkin (1981) demostró que si una función booleana puede calcularse mediante una fórmula A C 0 de profundidad k y tamaño S , entonces f puede calcularse mediante una fórmula fanin-2 de profundidad D k - 1 + log 2 S (Esto se desprende del Teorema 6.2 en mi libro). Tenga en cuenta que un límite superior trivial solo sería D k log S (si simulamos cada puerta por un árbol de profundidad log S ).fAC0 kSfDk1+log2SDklogSlogS

Stasys
fuente