4.4 KiB
Nalezení UDNF a UKNF
Př.: f(x, y) = [\overline{(\overline{x} \wedge y)} \wedge \overline{x}] \vee y = [\overline{(\overline{x} \cdot y)} \cdot x] + y
1. Tabulkou
x |
y |
\overline{x} \wedge y |
a = \overline{(\overline{x} \wedge y)} |
b = a \wedge \overline{x} |
b \vee y |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 1 |
Postup
- vybereme řádky, kde funkce vyšla 1 (ÚDNF) nebo 0 (ÚKNF)
- zapisujeme jednotlivé klauzule podle prvků (
x, y, z, \dots
) v řádcích- prvek zapíšeme jako komplement, pokud je rovna 0 (ÚDNF) nebo 1 (ÚKNF)
- když je výsledek funkce 1, čáru napíšeme nad prvkem s hodnotou 0
Výsledek
- ÚDNF:
f_{D}(x, y) = (\overline{x} \wedge \overline{y}) \vee (\overline{x} \wedge y) \vee (x \wedge y)
- ÚKNF:
f_{K}(x, y) = (\overline{x} \vee y)
2. Pomocí Booleovského kalkulusu
Využijeme pravidel Booleovského kalkulusu a pokusíme se funkci zjednodušit a roznásobit.
f(x, y) = [\overline{(\overline{x} \wedge y)} \wedge \overline{x}] \vee y = [(x \vee \overline{y}) \wedge \overline{x}] \vee y = [(x \wedge \overline{x}) \vee (\overline{y} \wedge \overline{x})] \vee y = (\overline{y} \wedge \overline{x}) \vee y = (\overline{y} \vee y) \wedge (\overline{x} \vee y) = \overline{x} \vee y
- máme jedinou spojovou klauzuli, ve které je spojení, jedná se tedy o ÚKNF
Zkusíme získat i ÚDNF:
f(x, y) = (\overline{y} \wedge \overline{x}) \vee y = (\overline{y} \wedge \overline{x}) \vee (y \wedge 1) = (\overline{y} \wedge \overline{x}) \vee [y \wedge (\overline{x} \vee x)] = (\overline{y} \wedge \overline{x}) \vee (\overline{x} \wedge y) \vee (x \wedge y)
- máme spojení 3 průsekových klauzulí, jedná se tedy o ÚDNF
Quineho-McCluskeyho metoda
- minimální disjunktivní forma, součet co nejmenšího počtu součinů
Příklad
ÚDNF: \overline{x} \overline{y} \overline{z} + \overline{x} \overline{y} z + x \overline{y} \overline{z} + x \overline{y} z + x y \overline{z}
x |
y |
z |
f(x,y,z) |
---|---|---|---|
0 | 0 | 0 | 1 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
Z tabulky vybereme koeficienty tam, kde vychází funkce 1
:
- 0 0 0
- 0 0 1
- 1 0 0
- 1 0 1
- 1 1 0
Z těchto vybraných kombinací vybereme všechny dvojice, které se liší o jednu pozici a tu nahradíme pomlčkou:
- 1, 2: 0 0 -
- 1, 3: - 0 0
- 2, 4: - 0 1
- 3, 4: 1 0 -
- 3, 5: 1 - 0
Pokračujeme stejným způsobem:
- 1, 2, 3, 4: - 0 - (
\overline{y}
) - 1, 3, 2, 4: - 0 - (máme dvě stejné, jednu vyškrtneme)
- pro 3, 5 nezbyla žádná dvojice, přepíšeme tedy do klauzule
x \overline{z}
Výsledek je f(x, y, z) = x \overline{z} + \overline{y}
(součet prostých implikantů).
- vynechání některých součinů, takže výsledek je stále roven funkci
f
Mějme Booleovy polynomy f, p
. Součin literálů je implikantem funkce f
, pokud p \leq f
. Implikant je prostý, pokud součin vzniklý odstraněním libovolných literálů z p
přestane být implikantem f
.
Tabulka pokrytí
x |
y |
z |
1 | 2 | 3 | 4 | 5 | výsledek | |
---|---|---|---|---|---|---|---|---|---|
1, 2, 3, 4 | - | 0 | - | [o] | o | o | o | \overline{y} |
|
4, 5 | 1 | - | 0 | o | [o] | x \overline{z} |
Každý prvek množiny \{ 1, 2, 3, 4, 5 \}
musí být obsažen alespoň v jedné množině vybraných podmnožin.
- minimalizace počtu pokrývajících podmnožin
- například jedna množina
\{ 1, 2, 3, 4 \}
a druhá\{ 5 \}
, využijeme tedy oba výsledky v tabulce