07.02.2013 Aufrufe

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.2 Reguläre Sprachen <strong>und</strong> endliche Automaten<br />

Da der durch das Verfahren erzeugte DEA i. allg. nicht der “kleinstmögliche” Automat<br />

ist, wird im Anschluß an die Potenzmengenkonstruktion ein weiteres Verfahren,<br />

genannt Minimalisierung, durchgeführt, das zu dem erzeugten DEA einen weiteren<br />

DEA konstruiert, der dieselbe Sprache akzeptiert <strong>und</strong> über eine minimale Zustandsmenge<br />

verfügt. In dem durch die Potenzmengenkonstruktion erzeugten DEA kann<br />

es noch Zustände mit gleichem “Akzeptanzverhalten” geben. Zwei Zustände p <strong>und</strong> q<br />

besitzen das gleiche Akzeptanzverhalten, wenn der Automat aus p <strong>und</strong> q unter allen<br />

Eingabewörtern entweder immer oder nie in einen Endzustand geht. Die Minimalisierung<br />

beruht auf dem Zusammenfassen dieser Zustände zu einem gemeinsamen<br />

Zustand.<br />

Der folgende Algorithmus beschreibt das Verfahren der Minimalisierung.<br />

Algorithmus Minimalisierung.<br />

Eingabe: DEA M = (Q, Σ,δ,q0,F).<br />

Ausgabe: DEA Mmin = (Qmin, Σ,δmin,q0,min,Fmin) mit Qmin minimal.<br />

Methode: Die Zustandsmenge von M wird in eine Partition aufgeteilt, die schrittweise<br />

verfeinert wird. Für Zustände in verschiedenen Klassen einer Partition<br />

ist schon bekannt, daß sie verschiedenes Akzeptanzverhalten zeigen, d.h. daß es<br />

mindestens ein Wort w gibt, unter welchem aus einem der Zustände ein Endzustand<br />

erreicht wird <strong>und</strong> unter dem anderen nicht. Deshalb beginnt man mit der<br />

Partition Π = {F,Q − F }. In jedem Iterationsschritt des Verfahrens wird eine<br />

Klasse K aus der Partition entfernt <strong>und</strong> durch eine Menge von Verfeinerungen<br />

Ki ersetzt. Dabei gilt, daß <strong>für</strong> alle Zustände q in einer Verfeinerung Ki der<br />

Nachfolgezustand δ(q,a) unter einem Zeichen a in einer gemeinsamen Klasse<br />

K ′ i liegt. Wird eine solche Verfeinerung gef<strong>und</strong>en, wird die Variable changed auf<br />

true gesetzt. Der Algorithmus hält, wenn in einem Schritt die Partition nicht<br />

mehr verfeinert wurde. Da in jedem Iterationsschritt nur Klassen der aktuellen<br />

Partition evtl. in Vereinigungen neuer Klassen zerlegt werden, Q <strong>und</strong> damit<br />

auch P(Q) aber endlich sind, terminiert das Verfahren. Die Klassen der dann<br />

gef<strong>und</strong>enen Partition sind die Zustände von Mmin. Es gibt einen Übergang zwischen<br />

zwei neuen Zuständen P <strong>und</strong> R unter einem Zeichen a ∈ Σ, wenn es einen<br />

Übergang δ(p,a) = r mit p ∈ P <strong>und</strong> r ∈ R in M gab.<br />

1 Π = {F,Q − F };<br />

2 do changed := false ;<br />

3 Π ′ := Π;<br />

4 foreach K ∈ Π do<br />

5 Π ′ := (Π ′ − {K}) ∪ {{Ki}1≤i≤n} , <strong>und</strong> die Ki sind maximal mit<br />

6 K = �<br />

1≤i≤n Ki , <strong>und</strong> ∀a ∈ Σ : ∃K ′ i ∈ Π : ∀q ∈ Ki : δ(q,a) ∈ K ′ i<br />

7 if n > 1 then changed := true fi (∗ K wurde<br />

aufgespalten ∗)<br />

25

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!