Sebuah terhubung grafik adalah grafik yang berisi jalur antara dua simpul.
Tantangan
Buat sirkuit [gerbang NAND-input 2] yang menentukan apakah grafik 4-simpul terhubung.
(2 input gerbang dapat berupa bit input yang sama atau gerbang lainnya.)
Output True jika grafik terhubung, dan False sebaliknya.
Memasukkan
Enam kemungkinan tepi grafik sederhana dengan 4 simpul:
[ 0 e 1 , 0 e 2 , 1 e 2 , 0 e 3 , 1 e 3 , 2 e 3 ]
di mana sebuah e b mewakili apakah ada kelebihan antara simpul a dan b
Keterhubungan setara dengan kondisi berikut:
Jika kurang dari 3 input Benar maka output Salah.
Jika lebih dari 3 input Benar maka output Benar.
Jika tepat 3 input Benar dan mereka membentuk segitiga kemudian output Salah.
Kalau tidak, output Benar.
Jawaban yang menggunakan gerbang paling sedikit menang. Ikatan akan rusak oleh
kedalaman rangkaian terendah (panjang jalur terpanjang dari input ke output).
0
dan1
? Bagaimana dengan output?Jawaban:
30 NANDS
Alih-alih bertanya kapan kita mendapatkan angka 1, saya mengajukan pertanyaan kapan kita mendapatkan angka 0. Lebih baik bertanya dengan cara ini karena ada kurang dari 0 daripada 1.
Berikut distribusi menurut jumlah sisi (baris ke-6 dari pascal's triangle)
Mengajukan pertanyaan seperti ini, kita mendapatkan diagram dan ungkapan berikut
Kami mengasumsikan output akan default ke 1, tetapi akan berubah menjadi 0 dalam kondisi berikut
1.A 0 untuk tiga sisi yang berdekatan (uji 3 input)
2.A 0 untuk dua pasang sisi yang berlawanan (tes 4 input)
Persyaratan di atas sudah dipesan dengan cara yang akan memungkinkan mereka untuk dikelompokkan seperti di bawah ini. (Kebetulan, versi ekspresi ini simetris secara rotasi tentang titik AFB.)
Skor untuk masing-masing
&
atau|
ditempatkan di bawah simbol dan dibenarkan sebagai berikut:Level 0: Kami berinvestasi dalam inverter untuk setiap input: 6 NANDS
Level 1: Kita dapat membangun OR dari gerbang NAND dengan meletakkan inverter pada input (total 3 NANDS) tetapi karena kita telah berinvestasi dalam 6 NAND pada langkah sebelumnya, kita dapat membuat 7 OR gerbang dari 7 gerbang NAND. Kami juga membutuhkan 3 DAN gerbang. Untuk ini, kita hanya akan menggunakan NAND dan membiarkan outputnya terbalik. 10 NANDS
Level 2: Sekali lagi kami membangun 4 OR gerbang dari gerbang NAND. Dalam setiap kasus kami memiliki 1 input dari gerbang OR, jadi kami harus membalikkannya. Tetapi input lainnya sudah terbalik (berasal dari salah satu NAND pada langkah sebelumnya yang sesuai dengan
&
simbol dalam tiga kasus, dan dari inverter di yang terakhir) sehingga kita hanya perlu 2 gerbang untuk setiap fungsi ATAU. 4 * 2 = 8Level 3: Kita sekarang perlu DAN empat output bersama. Ini membutuhkan 3 gerbang AND, masing-masing dibangun dari 2 NAND, 3 * 2 = 6
Itu total 30 gerbang NAND, dengan kedalaman maksimal 2 + 2 + 4 = 8 NAND untuk cabang dengan
|
level 1 atau 3 + 1 + 4 = 8 NAND untuk cabang dengan&
level 1.Script Ruby berikut secara visual mengkonfirmasi bahwa ekspresi di atas adalah valid.
sumber
19 NANDs
Tidak ada rangkaian yang lebih sederhana dari ini.
Ada kode untuk mengujinya di bawah gambar. Sedangkan untuk memahaminya, itu sulit. Ada beberapa gerbang IF di sana, dan input agak dikelompokkan menjadi segitiga dengan garis sudut bebas ditambahkan untuk analisis satu per satu, tetapi tidak dengan cara yang sederhana. Jika ada yang berhasil memahaminya, saya akan terkesan.
Kode Verilog dengan pengujian:
Kim Øyhus
sumber
Mathematica, 17 gerbangKami hanya menyebutkan semua aturan, membangun fungsi boolean, dan menguranginya dalam
NAND
bentuk.Hasil :
, di mana
#1...#6
ada 6 slot untuk argumen.Kasus uji :
sumber
not (p&q&r)
? Apa hasil akhir Anda & artinya?p⊼q⊼r
berarti(p⊼q)⊼r
, yang setara dengan!(p&&q&&r)
.(p⊼q)⊼r
tidak setara dengan!(p&&q&&r)
.64 NANDs
Keenam sisi dapat dibagi menjadi tiga pasang sisi yang berlawanan. Agar grafik terhubung, harus ada dua sisi yang berlawanan serta sisi ketiga, atau tiga sisi yang terhubung ke titik yang sama.
Pasangan yang berlawanan adalah UX, VY, WZ, jadi:
Membangun AND dan OR gerbang dengan cara biasa, jumlah total gerbang yang digunakan adalah
3*3+7*3+34
= 64.sumber