A maneira mais eficiente de converter um circuito em um circuito (de qualquer profundidade) com fanout de portão 1

18

EDIT (22 de agosto de 2011):

Estou simplificando ainda mais a questão e colocando uma recompensa nela. Talvez esta pergunta mais simples tenha uma resposta fácil. Também vou rascunhar todas as partes da pergunta original que não são mais relevantes. (Obrigado a Stasys Jukna e Ryan O'Donnell por responderem parcialmente à pergunta original!)


Fundo:

Dado um circuito CA 0 com profundidade k e tamanho S, existe outro circuito CA 0 que calcula a mesma função com profundidade ke tamanho modo que o novo circuito tenha fanout = 1 para todos os portões. Em outras palavras, o circuito se parece com uma árvore (exceto nas entradas, pois as entradas podem se espalhar para mais de um portão). Uma maneira de fazer isso é duplicar todos os portões que possuem fanout> 1 até que todos os portões tenham fanout = 1.O(Sk)

Mas esta é a maneira mais eficiente para converter AC 0 circuitos de AC 0 circuitos com fanout 1? Li o seguinte na Aula 14 das notas do curso de Ryan O'Donnell :

Suponha que C seja qualquer circuito de profundidade k do tamanho S que calcule Paridade. É um exercício para mostrar que C pode ser convertido em um circuito nivelado de profundidade k, onde os níveis alternam as portas AND e OR, os fios de entrada são os 2n literais e cada porta possui uma saída 1 (ou seja, é uma árvore ) - e o tamanho aumenta para no máximo .(2kS)2O(S4)

Nota de rodapé: Na verdade, este é um exercício um pouco complicado. É mais fácil se você precisar obter o tamanho , que é quase o mesmo para nossos propósitos, se você pensar em k como uma "constante".O(Sk)

Isso significa que existe uma maneira de obter qualquer circuito de profundidade k CA 0 do tamanho S e convertê-lo em um circuito CA 0 com fanout 1, profundidade k e tamanho ? Se sim, como isso é feito e este é o método mais conhecido? (2kS)2

Pergunta original:

Dado um circuito CA 0 com profundidade k e tamanho S, qual é o método mais conhecido (em termos de minimizar o tamanho do circuito resultante) para convertê-lo em um circuito CA 0 de profundidade k e fanout 1 do portão? Existem limites inferiores conhecidos por isso?


Pergunta mais recente e mais simples:

Esta questão é um relaxamento da original, onde não insisto que o circuito resultante seja de profundidade constante. Como explicado acima, existe uma maneira de converter um circuito CA 0 com profundidade k, tamanho S, em um circuito com tamanho modo que o novo circuito tenha fanout = 1 para todos os portões. Existe uma construção melhor?O(Sk)

Dado um circuito AC 0 com profundidade k e tamanho S, qual é o método mais conhecido (em termos de minimizar o tamanho do circuito resultante) para convertê-lo em um circuito de qualquer profundidade com a saída 1 da porta?

Robin Kothari
fonte
5
O limite está ok. Mas se o limite fosse válido para circuitos arbitrários (não apenas aqueles que calculam a função Paridade), então seria possível simular cada circuito fanin-2 do tamanho por um ventilador. 2 fórmula do tamanho : os portões fanin-2 são suficientes para simular um portão de fanin ilimitado. Então a fórmula poderia ser transformada em uma profundidade (um resultado bem conhecido, atribuído erroneamente a Spira). Assim, veríamos que a profundidade do circuito é o máximo . Mas isso é bom demais para ser verdade: o limite superior mais conhecido para a profundidade do circuito é apenas( 2 k S ) 2 S O ( S 5 ) S O ( log S ) O ( log S ) O ( S / log S )O(Sk)(2kS)2SO(S5)SO(logS)O(logS)O(S/logS).
Stasys
2
Btw também se aplica a circuitos arbitrários , mas somente se permitirmos portões de fanin-2 (ver, por exemplo, Thm. 4.1 no livro de Wegener); então os circuitos ainda conseguem se lembrar de resultados intermediários. A situação com o fanin-1 é muito diferente: aqui os circuitos não têm memória nenhuma. Mas a pergunta de Robin é muito interessante. Seria até interessante mostrar que os circuitos de profundidade 3 do tamanho podem ser simulados por fórmulas de profundidade 3 de tamanho menor que . S S 2O(kS)2)SS2
Stasys
4
Eu confiaria no que Stas disser acima; Eu não estava sendo muito cuidadoso nessas notas (desculpe). Por outro lado, lembro-me de que, ao escrevê-los, bastante frustrados em saber o fato - mencionado em muitos artigos, mas quase nunca com citação -, é possível converter circuitos arbitrários em circuitos em camadas, sem explodir em tamanho "muito" . Eu adoraria ver um ponteiro para o resultado mais conhecido sobre esse assunto. AC0
Ryan O'Donnell
2
@ Ryan O'Donnell: de fato, pode-se facilmente fazer um circuito em camadas com . Usamos a associatividade para conseguir que cada porta AND tenha apenas portas OR como entradas e vice-versa; a profundidade permanece inalterada. Em seguida, organize os portões de acordo com a profundidade e adicione, se necessário, os ventiladores triviais-1 OR e AND para obter um circuito em camadas; a profundidade permanece a mesma e o tamanho aumenta apenas um fator de k. Mas eu entendi que Robin quer que um circuito seja convertido em uma fórmula (um circuito em forma de árvore, exceto que os literais de entrada podem ter grande repercussão). O(kS)
Stasys
2
@ Ryan O'Donnell: Obrigado pela resposta e por colocar suas anotações de aula on-line! Em particular, suas notas de aula sobre a análise de funções booleanas foram super úteis.
Robin Kothari

Respostas:

11

Vou tentar resumir meus comentários anteriores.

kSASFO(SA)A=O(S/log2S)S=O(n)exp(n/logn)

FFM=O(S2A)DFD=O(logM)=O(AlogS)D1.73log2MDepth=O(Size/logSize)AS/log2S

kA=kA=k1k=3SS2? Eu acho que a resposta deve ser "não" (pode ser um exercício interessante para os alunos). Uma fórmula de profundidade 3 é apenas um grande OR de CNFs. A questão é encontrar um OR de CNFs que compartilhem muitas cláusulas em comum, mas, caso contrário, são "muito diferentes" para forçar uma grande fórmula de profundidade 3.

SD3S2n2DO(S2)O(DlogS)

fAC0 kSfDk1+log2SDklogSlogS

Stasys
fonte