Markierungsalgorithmus
Der Markierungsalgorithmus (auch Unterstreichungsalgorithmus) ist ein Algorithmus zur Überprüfung von Horn-Formeln auf Erfüllbarkeit. Im Unterschied zu allgemeinen aussagenlogischen Formeln, für die vermutet wird, dass kein Polynomialzeit-Algorithmus existiert (siehe Erfüllbarkeitsproblem der Aussagenlogik), ist mit diesem Markierungsalgorithmus auf der Menge der Horn-Formeln, die eine Teilmenge der aussagenlogischen Formeln darstellen, ein Polynomialzeit-Algorithmus bekannt (eine Implementierung in linearer Zeit ist möglich).
Horn-Formeln
[Bearbeiten | Quelltext bearbeiten]Horn-Formeln sind eine Konjunktion von Horn-Klauseln. Horn-Klauseln sind dabei spezielle Klauseln, die höchstens ein positives Literal besitzen. Horn-Klauseln lassen sich nach den Regeln der Aussagenlogik auch als Implikation darstellen. Die folgende Tabelle gibt einen Überblick über die zwei möglichen Typen einer Horn-Klausel und ein Beispiel in Form der Disjunktion und der Implikation.
Typ | Disjunktion | Implikation |
---|---|---|
1 | ||
2 |
Die Variable kann für Klauseln vom Typ 2 auch 0 sein. In diesem Fall nennt man die Klausel auch einen Fakt. Horn-Formeln, die nur Klauseln vom Typ 1 enthalten, sind trivialerweise erfüllbar. Durch die Belegung der Variablen mit 0 wird die gesamte Aussage wahr. Horn-Formeln, die nur Klauseln vom Typ 2 besitzen, sind erfüllbar, indem man alle Variablen mit 1 belegt.
Algorithmus
[Bearbeiten | Quelltext bearbeiten]Sei eine beliebige Horn-Formel. Folgender Algorithmus gibt aus, ob erfüllbar ist oder nicht. (Markieren bedeutet dabei, jedes Vorkommen einer Variable in zu markieren.)
- Schritt 1:
- Falls keine Fakten existieren:
- Ausgabe "erfüllbar".
- Sonst:
- Markiere alle Fakten.
- Falls keine Fakten existieren:
- Schritt 2:
- Falls eine Klausel aus von Typ 1 existiert, so dass alle markiert sind:
- Ausgabe "unerfüllbar".
- Falls keine Klausel aus von Typ 2 existiert, so dass alle markiert sind:
- Ausgabe "erfüllbar".
- Falls eine Klausel aus von Typ 2 existiert, so dass alle markiert sind aber y nicht:
- Markiere y.
- Gehe zu Schritt 2.
- Sonst:
- Ausgabe "erfüllbar".
- Falls eine Klausel aus von Typ 1 existiert, so dass alle markiert sind:
- Schritt 1:
- Endet der Algorithmus mit der Ausgabe erfüllbar, so erhält man eine Belegung, die erfüllt, indem man alle markierten Variablen mit wahr belegt und die restlichen Variablen mit falsch.
Motivation des Algorithmus: Der Algorithmus markiert alle Variablen, die zwangsläufigerweise mit wahr belegt werden müssen (nämlich zuerst die Variablen in den Fakten, und danach in den Klauseln, die eine Implikation darstellen und bei denen die Variablen auf der linken Seite der Implikation schon alle mit wahr belegt sind). Wenn sich dabei kein Widerspruch ergibt, ist die Formel erfüllbar.