Obecnie Dysjunkcyjna postać normalna to temat, który zyskał duże znaczenie w społeczeństwie. Od samego początku do chwili obecnej Dysjunkcyjna postać normalna miał znaczący wpływ na życie ludzi. Niezależnie od tego, czy na poziomie osobistym, społecznym, politycznym czy gospodarczym, Dysjunkcyjna postać normalna wywołał debaty, kontrowersje i zmiany w różnych obszarach. W całej historii Dysjunkcyjna postać normalna był przedmiotem badań, refleksji i analiz ekspertów i naukowców. W tym artykule zbadamy znaczenie Dysjunkcyjna postać normalna i jego wpływ na dzisiejsze społeczeństwo, a także jego możliwe implikacje na przyszłość.
Dysjunkcyjna postać normalna (ang. disjunctive normal form, DNF) formuły logicznej – formuła zapisana w postaci dysjunkcji (alternatywy) klauzul dualnych.
Na przykład dysjunkcyjną postacią normalną wyrażenia jest
Każde wyrażenie logiczne ma dysjunkcyjną postać normalną.
Formuła φ jest w dysjunktywnej postaci normalnej jeśli jest ona alternatywą klauzul, z których każda jest koniunkcją literałów, tzn. ma następującą postać
gdzie każde jest literałem.
Problem znajdowania wartościowania spełniającego formuły w postaci DNF jest problemem łatwym, tzn. istnieje algorytm wielomianowy rozwiązujący ów problem. Jeśli bowiem jest choć jedna klauzula dualna, która nie zawiera ani fałszu ani jednocześnie pewnej zmiennej i jej negacji, możemy wszystkim wystąpieniom pozytywnym przyporządkować prawdę, negatywnym zaś fałsz, przez co ta klauzula dualna będzie spełniona, a zatem i cały DNF.
Jeśli natomiast każda klauzula dualna zawiera albo fałsz (a więc jest fałszywa), albo jednocześnie zmienną i jej zaprzeczenie (z których przynajmniej jedno musi być fałszywe), to oznacza to, że nie jest ona spełnialna.
Przykład algorytmu wielomianowego znajdującego wartościowanie formuły podanej w postaci DNF podany jest poniżej.
Podobny problem, znajdowania wartościowania formuły w koniunkcyjnej postaci normalnej jest NP-zupełny.
Przyjmijmy następujące założenia co do wejścia i wyjścia algorytmu:
foreach begin ok := true; foreach foreach if then ok := false; if ok then begin T := ; foreach if aj jest niezanegowaną zmienną xl then T := ; return T; end end return nil;
Algorytm dla każdej klauzuli sprawdza czy jest ona niesprzeczna. Gdy znajdzie niesprzeczną klauzulę zwraca zbiór zmiennych, które w niej występują jako literały bez negacji. Można łatwo sprawdzić, że algorytm ten ma złożoność czasową nie gorszą niż O(n²), gdzie n to liczba literałów w formule φ.
Algorytm ten nie może posłużyć do rozwiązania NP-zupełnego problemu spełnialnosci formuł w postaci CNF ponieważ w ogólnym przypadku rozmiar formuły przy przekształcaniu jej z postaci CNF do DNF może wzrosnąć wykładniczo.