[ Inhalt ] [ Index ]

Next: Färbung von Graphen Up: Komplexitätstheorie Previous: Die Groß-O-Notation

Das Erfüllbarkeitsproblem

 

Dieses Problem läßt sich sehr einfach beschreiben:

Gegeben ist ein Boolescher Ausdruck mit n Variablen. Gesucht ist eine Belegung dieser Variablen, so daß der Ausdruck den Wert true erhält.

Beispiel:

A = tex2html_wrap_inline4824

(A bezeichnet man als Summenproduktausdruck.)

tex2html_wrap_inline4826 erfüllt die Bedingung.

Eine naheliegende Lösungsmöglichkeit ist, einfach alle tex2html_wrap_inline4828 Möglichkeiten durchzuprobieren. Ist das Problem nicht erfüllbar, so merkt man das allerdings erst nach tex2html_wrap_inline4828 Schritten.

In den 60er Jahren haben Davis   und Putnam   einen Algorithmus gefunden, der in vielen Fällen schneller zum Ziel führt, falls der Ausdruck erfüllbar ist:

procedure Aufteilen(A)

  1. wenn A eine leere Klausel enthält return
  2. wenn A keine Klausel mehr enthält exit mit aktueller Zuordnung
  3. Wähle nächste, nicht belegte Variable tex2html_wrap_inline3530 aus A.
  4. Aufteilen( tex2html_wrap_inline4840 )
  5. Aufteilen( tex2html_wrap_inline4842 )

Im Ausdruck tex2html_wrap_inline4840 werden die Klauseln entfernt, die tex2html_wrap_inline4846 enthalten. Aus allen Klauseln wird tex2html_wrap_inline3530 entfernt.

Im Ausdruck tex2html_wrap_inline4842 werden ganz analog die Klauseln entfernt, die tex2html_wrap_inline3530 enthalten. Aus allen Klauseln wird tex2html_wrap_inline4846 entfernt.

Entstehen dabei leere Klauseln, so führt die aktuelle Teilbelegung nicht zum Ziel.

Beispiel:

tex2html_wrap_inline4856

tex2html_wrap_inline4858

tex2html_wrap_inline4860

tex2html_wrap_inline4862

tex2html_wrap_inline4864

tex2html_wrap_inline4866

tex2html_wrap_inline4868

tex2html_wrap_inline4870 *

tex2html_wrap_inline4872

tex2html_wrap_inline4874 **

tex2html_wrap_inline4876

tex2html_wrap_inline4878

tex2html_wrap_inline4880

tex2html_wrap_inline4882

tex2html_wrap_inline4884

...

* liefert also bereits ein Ergebnis, während ** eine unzulässige Belegung darstellt.

In vielen Fällen findet der Algorithmus eine Lösung in wesentlich kürzerer Zeit als die erschöpfende Suche. Aber es kann nicht garantiert werden, daß das Problem in weniger als exponentieller Zeit gelöst wird.

Eine einfacher aussehende Version des Problems scheint aber genauso schwierig zu sein: gesucht ist ein polynomialer Algorithmus, der für jeden Summenproduktausdruck, der erfüllbar ist, eine 1, sonst eine 0 ausgibt.

Hier möchte man also nur wissen, ob eine erfüllende Zuordnung existiert.

Es wird sich zeigen, daß dieses Erfüllbarkeits-Entscheidungsproblem   von zentraler Bedeutung ist, da sich viele Probleme darauf zurückführen lassen.




Next: Färbung von Graphen Up: Komplexitätstheorie Previous: Die Groß-O-Notation

Prof. Dr. Reinhard Völler