C'è davvero poca connessione. Per una comprensione approfondita, lasciami spiegare la connessione tra programmi e circuiti .
Un programma (o algoritmo o macchina ) è un meccanismo per calcolare una funzione. Per sicurezza, supponiamo che l' input sia una stringa binaria e che l' output sia un output booleano b . La dimensione dell'input è potenzialmente illimitata. Un esempio è un programma che determina se l'input è la codifica binaria di un numero primo.xb
Un circuito (booleano) è una raccolta di istruzioni per calcolare alcune funzioni finite . Possiamo immaginare il circuito come un circuito elettrico, o pensarlo come una sequenza di istruzioni (questa visione è chiamata confusamente un programma a linea retta ). Concretamente, possiamo supporre che l' input sia una stringa binaria di lunghezza n e che l' output sia booleano. Un esempio è un circuito che determina se l'ingresso codifica un numero primo (proprio come prima, solo ora l'ingresso deve essere di lunghezza n ).x nn
Possiamo convertire un programma in un circuito P n che simula P su ingressi di lunghezza n . La sequenza corrispondente dei circuiti P 0 , P 1 , P 2 , ... non è arbitraria - possono essere tutti costruiti da un programma che ha dato n uscite P n . Chiamiamo una tale sequenza di circuiti un circuito uniforme (confusamente, spesso pensiamo alla sequenza come un "singolo" circuito P n per un n indefinito ).PPnPnP0,P1,P2,…nPnPnn
Non tutte le sequenze di circuiti sono uniformi. In effetti, una sequenza di circuiti può calcolare ogni funzione dalle stringhe al booleano, calcolabile o non calcolabile! Tuttavia, nella teoria della complessità siamo interessati a tali modelli non uniformi in cui i circuiti sono limitati. Ad esempio, la domanda P = NP afferma che i problemi NP-completi non possono essere risolti con algoritmi temporali polinomiali. Ciò implica che i problemi NP-completi non possono essere risolti da circuiti uniformi di dimensioni polinomiali. Si ipotizza inoltre che i problemi NP-completi non possano essere risolti da circuiti di dimensioni polinomiali senza il requisito di uniformità .
I modelli di calcolo completi di Turing sono modelli che realizzano tutte le funzioni calcolabili (e non di più). Al contrario, sistemi completi di gate (come AND, OR, NOT o NAND) consentono di calcolare funzioni finite arbitrarie utilizzando circuiti costituiti da questi gate. Tali sistemi completi possono calcolare funzioni completamente arbitrarie usando sequenze (illimitate) di circuiti.