Ein verbundener Graph ist ein Graph, der einen Pfad zwischen zwei beliebigen Eckpunkten enthält.
Herausforderung
Bauen Sie eine [2-Input NAND-Gate] -Schaltung auf, die bestimmt, ob ein 4-Vertex-Graph angeschlossen ist.
(Die 2 Eingänge eines Gatters können dasselbe Eingangsbit oder ein anderes Gatter sein.)
Ausgang Wahr, wenn der Graph verbunden ist, und Falsch, wenn nicht.
Eingang
Die sechs möglichen Kanten eines einfachen Graphen mit 4 Eckpunkten:
[ 0 e 1 , 0 e 2 , 1 e 2 , 0 e 3 , 1 e 3 , 2 e 3 ]
wobei a e b darstellt, ob es eine Kante zwischen den Eckpunkten a und b gibt
Verbundenheit entspricht den folgenden Bedingungen:
Wenn weniger als 3 Eingaben wahr sind, wird falsch ausgegeben.
Wenn mehr als 3 Eingaben wahr sind, wird wahr ausgegeben.
Wenn genau 3 Eingaben True sind und ein Dreieck bilden, wird False ausgegeben.
Andernfalls geben Sie True aus.
Die Antwort mit den wenigsten Toren gewinnt. Die Verbindungen werden durch
die niedrigste Schaltkreistiefe (Länge der längsten Pfade vom Eingang zum Ausgang) getrennt.
0
und eingegeben werden1
? Wie wäre es mit Ausgabe?Antworten:
30 NANDS
Anstatt zu fragen, wann wir eine 1 bekommen, habe ich die Frage gestellt, wann wir eine 0 bekommen. Es ist besser, es so zu stellen, weil es weniger Nullen als Einsen gibt.
Hier ist die Verteilung nach der Anzahl der Kanten (6. Reihe des Pascal-Dreiecks)
Wenn wir die Frage auf diese Weise stellen, erhalten wir das folgende Diagramm und den folgenden Ausdruck
Wir gehen davon aus, dass die Ausgabe standardmäßig 1 ist, sich jedoch unter den folgenden Bedingungen auf 0 ändert
1.A 0 für drei benachbarte Kanten (Test 3 Eingänge)
2.A 0 für zwei gegenüberliegende Kantenpaare (4 Eingänge testen)
Die obigen Begriffe sind bereits so angeordnet, dass sie wie folgt gruppiert werden können. (Diese Version des Ausdrucks ist übrigens rotationssymmetrisch um den AFB-Eckpunkt.)
Die Punktzahl für jedes
&
oder|
wird unter das Symbol gesetzt und wie folgt begründet:Stufe 0: Wir investieren in einen Wechselrichter für jeden Eingang: 6 NANDS
Stufe 1: Wir können ein ODER aus einem NAND-Gatter bauen, indem wir einen Inverter an den Eingang legen (insgesamt 3 NANDS). Da wir jedoch bereits im vorherigen Schritt in 6 NANDS investiert haben, können wir aus 7 NAND-Gattern 7 ODER-Gatter erstellen. Wir brauchen auch 3 UND-Tore. Für diese verwenden wir nur NANDs und lassen den Ausgang invertiert. 10 NANDS
Level 2: Wieder bauen wir 4 ODER-Gatter aus NAND-Gattern. In jedem Fall haben wir 1 Eingang von einem ODER-Gatter, also müssen wir das invertieren. Der andere Eingang ist jedoch bereits invertiert (von einem der NANDs im vorherigen Schritt, der
&
in drei Fällen einem Symbol entspricht , und von einem Inverter im letzten), sodass wir nur 2 Gatter für jede OR-Funktionalität benötigen. 4 * 2 = 8Level 3: Wir müssen jetzt die vier Ausgänge UND-verknüpfen. Dies erfordert 3 UND-Gatter, die jeweils aus 2 NANDs aufgebaut sind, 3 · 2 = 6
Das sind insgesamt 30 NAND-Gatter mit einer maximalen Tiefe von 2 + 2 + 4 = 8 NANDs für Zweige mit einer
|
Stufe 1 oder 3 + 1 + 4 = 8 NANDs für Zweige mit einer&
Stufe 1.Das folgende Ruby-Skript bestätigt visuell, dass der obige Ausdruck gültig ist.
quelle
19 NANDs
Es gibt keine einfachere Schaltung als diese.
Unter dem Bild befindet sich ein Code zum Testen. Was das Verständnis angeht, ist das schwierig. Dort gibt es ein paar IF-Gatter, und die Eingänge sind zu einem Dreieck gruppiert, wobei die freien Ecklinien zur Analyse einzeln hinzugefügt werden, jedoch nicht auf einfache Weise. Wenn es jemand schafft, es zu verstehen, werde ich beeindruckt sein.
Verilog-Code mit Test:
Kim Øyhus
quelle
Mathematica, 17 ToreWir listen einfach alle Regeln auf, konstruieren die Boolesche Funktion und minimieren sie in der
NAND
Form.Ergebnis :
, wo
#1...#6
sind 6 Plätze für Argumente.Testfälle :
quelle
not (p&q&r)
? Was ist das Endergebnis und was bedeutet es?p⊼q⊼r
heißt(p⊼q)⊼r
, das entspricht!(p&&q&&r)
.(p⊼q)⊼r
nicht äquivalent ist!(p&&q&&r)
.64 NANDs
Die sechs Kanten können in drei Paare gegenüberliegender Kanten aufgeteilt werden. Damit ein Graph verbunden werden kann, müssen entweder zwei gegenüberliegende Kanten sowie eine dritte Kante vorhanden sein oder drei Kanten, die mit demselben Scheitelpunkt verbunden sind.
Die entgegengesetzten Paare sind UX, VY, WZ, also:
Wenn Sie UND- und ODER-Tore auf die übliche Weise erstellen, beträgt die Gesamtanzahl der verwendeten Tore
3*3+7*3+34
= 64.quelle