Bagaimana saya bisa mengambil tabel kebenaran dan mengubahnya menjadi blok jika dipadatkan?
Sebagai contoh, katakanlah saya memiliki tabel kebenaran ini di mana A dan B adalah kondisi dan x, y dan z adalah tindakan yang mungkin:
A B | x y z
-------------
0 0 | 0 0 1
0 1 | 0 0 1
1 0 | 0 1 0
1 1 | 1 0 0
Ini bisa berubah menjadi di bawah jika memblokir:
if(A)
{
if(B)
{
do(x)
}
else
{
do(y)
}
}
else
{
do(z)
}
Ini adalah contoh yang mudah, tetapi saya sering memiliki beberapa kondisi yang digabungkan dengan cara yang berbeda harus menghasilkan output yang berbeda dan sulit untuk menemukan cara yang paling padat dan elegan untuk mewakili logika mereka dalam blok if.
Jawaban:
Jika Anda mendesain dari peta Karnaugh, maka kodenya juga mungkin terlihat seperti itu:
sumber
Di C # .NET, Anda dapat menggunakan Kelas Kamus untuk mendapatkan hasilnya tanpa JIKA LAINNYA sebagai berikut - Yang menyenangkan tentang ini adalah:
Jika Anda tidak memiliki yang setara dengan Kelas Kamus, Anda dapat melakukan hal yang sama dalam fungsi pencarian / pencarian biner.
sumber
Yang Anda inginkan adalah algoritma Rete . Ini secara otomatis menyisir seperangkat aturan dan memprioritaskannya ke pohon seperti yang Anda gambarkan.
Ada sejumlah sistem "mesin aturan" komersial yang melakukan ini pada skala yang sangat besar (jutaan aturan) di mana kecepatan eksekusi sangat penting.
sumber
Berikut ini adalah perpustakaan Anda :) Dan Anda tidak perlu melewati K-table penuh, hanya bidang yang Anda minati :) Ini mengasumsikan bahwa operator DAN-nya di tabel kebenaran. Jika Anda ingin menggunakan lebih banyak operator, Anda harus dapat menulis ulang. Anda dapat memiliki sejumlah argumen. Ditulis
python
, dan diuji.sumber
Petakan input menjadi nilai tunggal dan kemudian aktifkan:
sumber
Tabel pencarian yang berisi fungsi pointer dapat berfungsi dengan baik dalam beberapa situasi. Di C, misalnya, Anda dapat melakukan sesuatu seperti ini:
Ini adalah solusi yang baik ketika jumlah input relatif kecil, karena jumlah entri dalam tabel harus 2 ^^ n di mana n adalah jumlah input. 7 atau 8 input mungkin dapat dikelola, 10 atau 12 mulai menjadi jelek. Jika Anda memiliki banyak input, cobalah menyederhanakan dengan cara lain (seperti peta Karnaugh) terlebih dahulu.
sumber
Lihatlah perangkat lunak "Gorgeous Karnaugh" - ia dapat menerima tabel kebenaran yang cukup tepat sebagai sampel Anda, menerima definisi rumus boolean analitik, menerima skrip Lua untuk membuat tabel kebenaran. Selanjutnya, perangkat lunak "Gorgeous Karnaugh" menggambar K-Maps untuk input yang diambil, yang Anda dapat meminimalkan secara manual atau menggunakan "Espresso" logika minimizer, dan menghasilkan output untuk C / C ++ dan beberapa bahasa perangkat keras. Lihat halaman fitur ringkasan untuk "Gorgeous Karnaugh" - http://purefractalsolutions.com/show.php?a=xgk/gkm
sumber
if
setelah memasukkan tabel kebenaran.