4 つの変数 u、v、w、zの関数fとして定義された特定の出力の場合:
f(u,v,w,z) = ∑(0,1,2,3,6,7,8,9,10,13,15)
これは、代わりに次の真理値表で表すこともできます (ここで、sは現在の状態のインデックスであり、カルノー マップ内の一致するセルであり、oは出力値です)。
s | u v w z | o
----|---------|---
0 | 0 0 0 0 | 1
1 | 0 0 0 1 | 1
2 | 0 0 1 0 | 1
3 | 0 0 1 1 | 1
4 | 0 1 0 0 | 0
5 | 0 1 0 1 | 0
6 | 0 1 1 0 | 1
7 | 0 1 1 1 | 1
8 | 1 0 0 0 | 1
9 | 1 0 0 1 | 1
10 | 1 0 1 0 | 1
11 | 1 0 1 1 | 0
12 | 1 1 0 0 | 0
13 | 1 1 0 1 | 1
14 | 1 1 1 0 | 0
15 | 1 1 1 1 | 1
あなたの答えは次のとおりでした:
f(u,v,w,z) = ¬u⋅v⋅w + u⋅¬v⋅¬w + u⋅v⋅z + u⋅¬v⋅¬z + ¬u⋅¬v
元の関数と同等の完全に有効なブール式ですが、問題ありません。
論理回路設計に実装する必要がある場合は、論理ゲートの入力として実際に使用される変数の数、それぞれにいくつの入力があるか、または選択されたロジックのタイプと数がどれだけコストがかかるかを考慮する必要があります。時点からのゲート(および可能な遅延と危険)、お金または表面がかかります。与えられた変数の中には、設計で使用される論理ゲートの一部の入力として重要ではないものもあります。
このため、通常は、目的の出力値を損なうことなく、可能な限り最小の変数クラスターに式を最小化しようとします。
最小化 –最小の CNFまたは最小の DNFで式を取得する– は、K マップで可能な最大のグループを見つけることによって行われます。
見つかったグループのわずかな (完全ではない) オーバーラップは気にしません。これは、グループが大きいほど、実際に計画に含める必要がある変数が少なくなるためです。必要な最小値のみを含め、目的の出力値をカバーするように注意する必要があります。これにより、グループの 1 つを削除する必要がある場合、状態の 1 つ/一部/すべての出力値が変更されます。
平易な言葉で言えば、レシピは次のようになると思います:すべての 1 を丸で囲みますが、単一のゼロ(ゼロではなく、それぞれ1 つではありません) を丸で囲み、そこにある最大の泡を見つけて、各泡を何かで留める必要があります。他のものは持つことができず、まだ良くしていませんでした。
ですから、先生の「最初にクワド、次にペア」という言葉が意味していたのは、まさにその通りだと思います。
次の図(latex を使用して生成) では、同等の最小 DNF の隣にソリューションがあります( ~ を丸で囲んでください)。
オンライン ツールの Wolfram Alpha に解を挿入し、DNF と CNF であることを確認することで、次の方程式が有効であることを確認することもできます。
¬u⋅v⋅w + u⋅¬v⋅¬w + u⋅v⋅z + u⋅¬v⋅¬z + ¬u⋅¬v = ¬u⋅w + ¬v⋅¬w + ¬v⋅¬z + u⋅v⋅z