Dysjunkcyjna postać normalna

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ą.

Definicja formalna

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

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.

Wielomianowy algorytm znajdujący wartościowanie spełniające

Przyjmijmy następujące założenia co do wejścia i wyjścia algorytmu:

  • formuła φ podana na wejściu jest zbiorem klauzul,
  • każda klauzula jest zbiorem literałów,
  • algorytm zwraca zbiór zmiennych, którym należy nadać wartość true (pozostałym zmiennym należy nadać wartość false) aby formuła φ była spełniona jeśli formuła jest spełnialna, w przeciwnym przypadku zwraca specjalną wartość nil.
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.

Zobacz też