Rzeczywiście istnieje niewiele powiązań. Dla dokładnego zrozumienia pozwól mi wyjaśnić związek między programami i obwodami .
Programu (lub algorytm lub maszyny ) jest mechanizmem do obliczania funkcji. Dla definitywności załóżmy, że wejście jest ciągiem binarnym , a wyjście jest wyjściem logicznym . Rozmiar danych wejściowych jest potencjalnie nieograniczony. Jednym z przykładów jest program, który określa, czy wejście jest kodowaniem binarnym liczby pierwszej.bxb
Obwód (boolowski) to zbiór instrukcji do obliczania niektórych funkcji skończonych . Możemy sobie wyobrazić obwód jako obwód elektryczny, lub myśleć o nim jako o sekwencji instrukcji (ten widok nazywa się myląco programem linii prostej ). Konkretnie możemy założyć, że wejście jest ciągiem binarnym długości , a wyjście jest logiczne. Jednym z przykładów jest obwód, który określa, czy wejście koduje liczbę pierwszą (tak jak poprzednio, tylko teraz wejście musi mieć długość ).n nx nn
Możemy przekonwertować program na obwód który symuluje na wejściach o długości . Odpowiednia sekwencja obwodów nie jest dowolna - wszystkie można zbudować za pomocą programu, który dał wyjść . Taką sekwencję obwodów nazywamy obwodem jednorodnym (myląco często myślimy o sekwencji jako o „pojedynczym” obwodzie dla nieokreślonego ).P n PPPnPnP.0, P1, P2), …nP.nP.nn
Nie każda sekwencja obwodów jest jednorodna. Rzeczywiście, sekwencja obwodów może obliczyć każdą funkcję od ciągów znaków do wartości logicznej, obliczalnej lub nieobliczalnej! Niemniej jednak w teorii złożoności interesują nas takie niejednorodne modele, w których obwody są ograniczone. Na przykład pytanie P = NP stwierdza, że problemów z kompletnością NP nie można rozwiązać za pomocą algorytmów wielomianowych. Oznacza to, że problemów z kompletnością NP nie można rozwiązać za pomocą jednorodnych obwodów wielomianowych. Przypuszcza się ponadto, że problemów z kompletnością NP nie można rozwiązać za pomocą obwodów wielomianowych bez wymogu jednorodności .
Kompletne modele obliczeniowe Turinga to modele, które realizują wszystkie funkcje obliczeniowe (i nie więcej). Natomiast kompletne systemy bramek (takie jak AND, OR, NOT lub NAND) pozwalają na obliczenie dowolnych funkcji skończonych przy użyciu obwodów wykonanych z tych bramek. Takie kompletne systemy mogą obliczać całkowicie dowolne funkcje przy użyciu (nieograniczonych) sekwencji obwodów.