Přejít na hlavní obsah

Jak vytvořit disjunktivní normální formu na příkladech a algoritmech

  • Ján Ježek
  • Praxe

Disjunktivní normální forma (DNF) - je to standardní způsob reprezentace logických výrazů v diskrétní matematice a logice. Umožňuje zapsat jakoukoli logickou funkci ve formě spojivky, díky čemuž je výraz snadno srozumitelný a snadno analyzovatelný. V tomto článku se podíváme na příklady a algoritmy pro konstrukci DNF.

Proces budování DNF jde o aplikaci logických zákonů, jako je distribuce, De Morgana, rozpor atd. Pomocí těchto zákonů můžeme uvést původní logický výraz na druh, kde každá disjunkce se skládá z Konjunktur literátů nebo jejich negací.

Příklady a algoritmy v tomto článku vám pomůže hlouběji se naučit techniku budování DNF. Začneme jednoduchými příklady a postupně přejdeme ke složitějším. V tomto případě budeme rozebírat nejen základní pravidla, ale také specifické případy, které mohou nastat při práci s DNF.

Co je disjunktivní normální forma

DNF je jednou z hlavních forem reprezentace logických funkcí a má mnoho aplikací v matematice, počítačových vědách a logice. Pomocí DNF lze snadno určit hodnoty logické funkce pro všechny možné varianty hodnot proměnných.

Nechť máme logickou funkci definovanou dvěma proměnnými a A B. Možnosti hodnot proměnných: a =, B = . Také máme tabulku pravdivosti, která určuje hodnoty funkce pro každou variantu hodnot proměnných.

ADoVýznam funkce
001
010
101
111

Pro tuto funkci lze vytvořit následující DNF:

(A ∧ V) ∨ (A ∧ V) ∨ (A ∧ V)

Zde každá disjunkce odpovídá jednomu řádku tabulky pravdivosti a proměnné a jejich negace jsou definovány podle hodnot proměnných v každém řádku.

Použití DNF usnadňuje práci s logickými funkcemi, umožňuje provádět různé operace na nich, jako je zjednodušení, kontrola ekvivalence a další.

Příklady disjunktivní normální formy

Uveďme několik příkladů DNF:

Příklad 1: Zvažte logickou funkci F (a, b, c) = (a ∧ b) ∨ (A ∧ c). Její DNF bude prezentována následovně:

(a ∨ ¬a) ∧ (a ∨ c) ∧ (b ∨ ¬a) ∧ (b ∨ c)

Příklad 2: Uvažujme logickou funkci G(x, y, z) = (x ∧ y ∧ z) ∨ (x ∧ y ∧ z) ∨ (x ∧ y ∧ z). Její DNF bude prezentována následovně:

(x ∨ ¬x) ∧ (x ∨ ¬y) ∧ (x ∨ ¬z) ∧ (y ∨ ¬x) ∧ (y ∨ ¬y) ∧ (y ∨ ¬z) ∧ (¬x ∨ ¬x) ∧ (¬x ∨ ¬y) ∧ (¬x ∨ ¬z)

Příklad 3: Uvažujme logickou funkci H(p, q, r, s) = (p ∧ q ∧ r ∧ s) ∨ (p ∧ q ∧ r ∧ s) ∨ (p ∧ q ∧ r ∧ s). Její DNF bude prezentována následovně:

(p ∨ ¬p) ∧ (p ∨ ¬q) ∧ (p ∨ r) ∧ (p ∨ ¬s) ∧ (q ∨ ¬p) ∧ (q ∨ ¬q) ∧ (q ∨ r) ∧ (q ∨ ¬s) ∧ (¬r ∨ ¬p) ∧ (¬r ∨ ¬q) ∧ (¬r ∨ r) ∧ (¬r ∨ ¬s) ∧ (¬s ∨ ¬p) ∧ (¬s ∨ ¬q) ∧ (¬s ∨ r) ∧ (¬s ∨ ¬s)

Disjunktivní normální forma umožňuje pohodlně reprezentovat složité logické výrazy a provádět nad nimi různé operace, jako je zjednodušení, analýza atd. Porozumění DNF je důležitým základem v logice a matematickém modelování.

Příklad 1: DNF se 3 proměnnými

Vezměme si příklad konstrukce disjunktivního normálního tvaru (DNF) se třemi proměnnými.

Existují tři proměnné: A, B A C. Předpokládejme, že máme určitou logickou funkci danou tabulkou pravdivosti:

ABCF(A, B, C)
0000
0010
0100
0111
1001
1011
1101
1111

Tuto logickou funkci si můžeme představit jako disjunkci, tedy kombinaci nebo:

F(A, B, C) = (¬A ∧ ¬B ∧ B) ∨ (A ∧ ¬B ∧ C) ∨ (A ∧ B ∧ ¬C) ∨ (A ∧ B ∧ C)

Získali jsme tedy disjunktivní normální tvar (DNF) pro danou logickou funkci se třemi proměnnými.

Příklad 2: DNF se 4 proměnnými

Vezměme si příklad konstrukce DNF se 4 proměnnými: A, B, C a D.pro začátek musíme určit všechny možné kombinace hodnot proměnných (0 nebo 1).

Celkem je možné 16 různých kombinací:

ABCDf
0000f(A,B,C,D)
0001f(A,B,C,D)

Na každém řádku tabulky jsou uvedeny hodnoty proměnných A, B, C,D a jejich odpovídající hodnota funkce f(A,B,C, D).

Dále identifikujeme všechny řádky tabulky, kde je hodnota funkce 1. Tyto řádky budou odpovídat jednomu nebo více spojivkám, které pak lze sloučit do DNF.

Pro tento příklad nechť jsou řádky s hodnotou funkce 1 následující:

ABCDf
00111

Vhodné konjunktury pro DNF tedy budou:

(¬A∧¬B∧C∧D)

Měly by být sloučeny do DNF pomocí disjunkce:

V důsledku toho získáme DNF se 4 proměnnými, které odpovídají této funkci.

Algoritmy pro vytváření disjunktivního normálního tvaru

Existuje několik základních algoritmů pro konstrukci DNF, které lze použít k přeměně logického výrazu na jeho formu DNF. Zvažte některé z nich:

Quinův Algoritmus - jeden z klasických algoritmů pro konstrukci DNF. Je založen na použití pravdivostní tabulky a sekvenčním přerušení všech kombinací hodnot proměnných. Quineův algoritmus umožňuje převést logický výraz do jeho tvaru DNF přidělením všech konjunktivních členů, které dávají skutečnou hodnotu danému logickému výrazu.

Algoritmus Sklusky - další populární algoritmus pro konstrukci DNF. Tento algoritmus je založen na použití zákonů algebry logiky a nabízí efektivnější způsob, jak převést logický výraz do jeho tvaru DNF. Skluskiho algoritmus iterativně aplikuje různé operace, jako je asociativita, distribuce a De Morgan, aby zjednodušil výraz a dosáhl tvaru DNF.

Quine-Mccluskyho Algoritmus - je to rozšíření algoritmu Quine, které umožňuje převést složitější logické výrazy do jejich tvaru DNF. Quine-Mccluskyho algoritmus je založen na konceptu rozdělení složitějších výrazů na menší podvrhy a jejich následné přeměně na formu DNF. Tento algoritmus poskytuje obecnější a výkonnější metodu pro konstrukci DNF než jednoduchý algoritmus Quine.

V praxi výběr algoritmu pro konstrukci DNF závisí na specifičnosti úkolu a také na výrazech, se kterými je třeba pracovat. Některé algoritmy, jako je quineův algoritmus, mohou být jednoduché a snadno použitelné v jednoduchých případech. Zatímco složitější výrazy mohou vyžadovat použití pokročilejších algoritmů, jako je Quine-Mccluskyho algoritmus nebo Skluskyho algoritmus.

Bez ohledu na zvolený algoritmus je sestavení disjunktivní normální formy důležitým úkolem pro analýzu a konverzi logických výrazů. Znalost různých algoritmů a jejich aplikace může pomoci v různých oblastech, které vyžadují práci s logickými výrazy.

Algoritmus 1: metoda pravdivostní tabulky

Chcete-li vytvořit DNF metodou pravdivostní tabulky, musíte postupovat podle následujících kroků:

  1. Vytvořte tabulku pravdivosti se sloupci pro každou proměnnou ve výrazu a jedním sloupcem pro pravdivost samotného výrazu.
  2. Vyplňte hodnoty proměnných a vypočítejte pravdivost výrazu pro každou kombinaci hodnot proměnných. Výsledek je umístěn do posledního sloupce tabulky.
  3. Rozlišujte pouze kombinace, ve kterých je výraz pravdivý.
  4. Podle výsledných kombinací vytvořte DNF.
pqrp ∨ q ∨ r
0000
0011
0101
0111
1001
1011
1101
1111

V tomto příkladu berou proměnné p, q a r hodnoty 0 nebo 1. Původní výraz p ∨ q ∨ r je pravdivý pro všechny kombinace hodnot proměnných kromě kombinace, kdy jsou všechny proměnné rovny 0.

Podle výsledné tabulky pravdivosti lze vytvořit DNF následovně:

(p ∨ q ∨ r) = (¬p ∧ ¬q ∧ r) ∨ (¬p ∧ q ∧ ¬r) ∨ (¬p ∧ q ∧ r) ∨ (p ∧ ¬q ∧ ¬r) ∨ (p ∧ ¬q ∧ r) ∨ (p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r)

Metoda pravdivostní tabulky tedy umožňuje vytvořit DNF pro daný logický výraz pomocí analýzy všech možných kombinací hodnot proměnných a stanovení pravdivosti výrazu pro každou kombinaci.

Algoritmus 2: Metoda Quine-McClusky

Algoritmus Quine-McCluskey se provádí následovně:

  1. Sestavíme tabulku pravdivosti pro původní logický výraz.
  2. Seskupujeme literáty do tříd ekvivalence, počínaje třídami dimenze 1 a postupně přecházíme do tříd vyšší dimenze.
  3. Pro každou třídu ekvivalence stavíme odpovídající DNF.
  4. Kombinujeme získané DNF pro všechny třídy ekvivalence a získáváme souhrnnou DNF pro celý logický výraz.

Uveďme příklad použití metody Quine-McCluskey:

ABDoVýrazHodnota
000(A∧(B∨V))1
001(A∧(B∨V))1
010(A∧(B∨V))0
011(A∧(B∨V))0
100(A∧(B∨V))1
101(A∧(B∨V))1
110(A∧(B∨V))0
111(A∧(B∨V))0

V tomto příkladu existuje 1 třída ekvivalence Dimenze 2, která se skládá z literátů a A (B∨V) s hodnotami 0, 1, 1, 1. Stavíme DNF pro tuto třídu ekvivalence:

Pomocí ostatních tříd ekvivalence získaných seskupením literátů lze vytvořit souhrnnou DNF pro celý výraz.