Folien - Institut für Grundlagen der Informationsverarbeitung

Werbung
Theoretische Informatik 1
Search - Beweis der Korrektheit
David Kappel
Institut für Grundlagen der Informationsverarbeitung
TU Graz
SS 2013
Algemeine Anmerkungen zur Übung
• 9 Aufgabenblätter, 3 Abgabetermine
• Blätter werden in 3er-Serien ausgegeben
• Ausarbeitung max. in 3er Gruppen
• mit * markierte Aufgaben sind besonders knifflig
• Auch ohne *-Aufgaben kann die volle Punktezahl (100
Punkte) erreicht werden
• Eine Abgabe pro Gruppe und Blatt
• Angabe = Deckblatt der Abgabe
• JFlap Programme in digitaler Form per E-Mail abgeben
• Erste Blätter online: Abgabe am 26.April
Aufgabenblatt 1 - Fleißiger Biber
Deterministische 1-Band Turing Maschine ADD (4 Punkte)
Folgende deterministische 1-Band Turingmaschine (DTM) sei
gegeben:
Notation: a;b,c
a . . . altes Bandsymbol
b . . . neues Bandsymbol
c . . . Kopfbewegung
Maschinen dieser Art werden
als ‘fleißige Biber ’ bezeichnet.
Sie zeichnen sich dadurch aus,
dass sie ohne Eingabe eine
möglichst lange Sequenz von
1en ausgeben und dann halten.
Aufgabenblatt 1 - Fleißiger Biber
1. Zeigen Sie, dass diese Maschine genau 6 1er ausgibt und
dann im Haltezustand hält. Geben Sie die Anzahl der
Berechnungsschritte an, die für die Berechnung benötigt
werden. (5 Punkte)
2. Sei m die Anzahl der Zustände (exklusive Haltezustand)
einer Turingmaschine mit Σ = {} und Γ = {, 0, 1}. G(m)
soll die maximale Anzahl an 1en bezeichnen, die eine
DTM mit m Zuständen ausgeben kann bevor sie im
Haltezustand hält. Zeigen Sie G(m) ∈ Ω(2m ). (5 Punkte)
Aufgabenblatt 1 - Fleißiger Biber
3. Entwerfen Sie eine DTM mit 4 Zuständen (exklusive
Haltezustand), Bandalphabet Γ = {, 0, 1} und
Eingabealphabet Σ = {}, die eine möglichst lange,
durchgehende Sequenz von 1en ausgibt und dann im
Haltezustand hält. Implementieren Sie diese TM in JFlap.
Gezählt werden nur Maschinen die eine durchgehende
Sequenz schreiben. Wenn die Maschine hält dürfen nur
1en auf dem Band stehen, keine 0en und keine Lücken
durch . Sei n die Länge der Ausgabe. Die Anzahl der
Punkte für dieses Beispiel berechnet sich zu min(bn/5c, 5).
(5* Punkte)
Aufgabenblatt 2 - Perfektes Matching
a1
b1
a2
b2
a3
b3
a4
b4
Gegeben sei ein bipartiter Graph G =
(E, V ) mit zwei disjunkten Knotenmengen gleicher Größe A ∈ V und
B ∈ V , sowie Kanten (a, b) ∈ E mit
a ∈ A und b ∈ B. Als Matching M ⊆ E
zwischen zwei Knotenmengen A und
B bezeichnet man eine Zuordnung
zwischen A und B, sodass keine zwei
Kanten aus M einen gemeinsamen
Knoten haben. M heißt perfektes
Matching, wenn gilt: 2 · |M| = |V | also
jeder Knoten aus A einem Knoten aus
B zugeordnet wurde (siehe Abbildung
links).
Aufgabenblatt 2 - Perfektes Matching
Wir erweitern den Graphen nun um 2
Knoten q und s, sowie Kanten zwischen q und allen Knoten aus A, und
zwischen allen Knoten aus B und s
(siehe Abbildung rechts).
q
a1
b1
a2
b2
a3
b3
a4
b4
s
Als Fluss zwischen dem Quellknoten q und einer Senke s
bezeichnet man eine Funktion f : E → R+ , die jeder Kante
e ∈ E im Graphen einen Wert f (e) zuweist. Wir schränken die
Kapazität, d.h. den maximalen Fluss durch jede Kante mit 1
ein, 0 ≤ f (e) ≤ 1. Außerdem muss der Fluss im Graphen
immer erhalten bleiben. Daher muss die Summe von ein und
ausgehenden Flüsse für jeden Knoten 0 sein. Ausgenommen
von dieser Regel sind natürlich die Quelle und Senke. Für
diese gilt offensichtlich f (q) = f (s).
Aufgabenblatt 2 - Perfektes Matching
1. Beweisen Sie, dass ein perfektes Matching in diesem
Graphen mit |A| = |B| = k genau dann existiert wenn
f (q) = f (s) = k . (5 Punkte)
2. Ein gerichteter azyklischer Graph (DAG) ist ein gerichteter
Graph ohne geschlossene Pfade. Eine Quelle in einem
DAG ist ein Knoten ohne eingehende Kanten, eine Senke
ist ein Knoten ohne ausgehende Kanten. Beweisen Sie,
dass jeder (endliche) DAG zumindest eine Quelle und eine
Senke hat. (5 Punkte)
Aufgabenblatt 3 - Formale Sprachen
Die Sprache COUNT3 sei gegeben als
COUNT3 = {an bn cn | n ∈ N}. Wörter dieser Sprache sind
demnach abc, aabbcc, aaabbbccc, ...
1. Entwerfen Sie eine 1-Band-DTM die COUNT3 entscheidet.
(5 Punkte)
2. Beweisen Sie formal, dass diese Maschine korrekt
funktioniert, d.h. dass sie genau dann den Haltezustand
erreicht, wenn die Eingabe ein Element aus COUNT3 ist. (5
Punkte)
3. Analysieren Sie die Laufzeit der Turingmaschine und
zeigen Sie COUNT3 ∈ P. (5 Punkte)
Formaler Beweis der Korrektheit von Search
Beweis der Korrektheit von Algorithmen mit Schleife
→ Schleifeninvariante
S = {1}
markiere Knoten 1
solange S 6= {} :
wähle ein i ∈ S und entferne i aus S
∀ Kanten (i, j) ∈ E, wenn j nicht markiert:
füge j zu S hinzu und markiere j
Wenn Knoten n markiert ist, antworte mit ‘ja’,
sonst mit ‘nein’
Schleifeninvariante
Eigenschaft einer Schleife die in jeder Iteration, an einem
bestimmten Punkt in der Schleife, erfüllt ist
Beispiel: Multiplikation (z = a · b) durch Addition
x =a
y =b
z=0
while x > 0 do
z =z +y
x =x −1
end
Schleifeninvariante: (x · y ) + z = a · b
Search - Beweis der Korrektheit
Wähle in jedem Schleifendurchgang ein i ein s ∈ Si :
X = {t ∈ V \ Mi |s −
→ t}
Si+1 = Si \ {s} ∪ X
Mi+1 = Mi ∪ X
Schleifeninvariante P(i) (Beachte: Si ⊆ Mi ):
In jeder Iteration 2 Möglichkeiten: n wurde bereits markiert,
oder es ist noch ein Knoten ‘vorrätig’, der nach n führt.
∗
+
1−
→ n ⇐⇒
n ∈ Mi ∨ ∃h ∈ Si : h −−−→ n
V \Mi
Beweise P(0), wobei S0 = {1}, M0 = {1}:
∗
+
1−
→ n ⇐⇒
n = 1 ∨ 1 −−−−→ n
+
V \{1}
∗
P(0) ist erfüllt lt. Def. von −
→ und −
→ als transitive bzw.
reflexiv-transitive Hülle von −
→.
Search - Beweis der Korrektheit
Zeige P(i) ⇒ P(i + 1):
+
∗
P(i) ≡ 1 −
→ n ⇐⇒ n ∈ Mi ∨ ∃h ∈ Si : h −−−→ n
V \Mi
+
+
⇐⇒ n ∈ Mi ∨ ∃h ∈ Si \ {s} : h −−−→ n ∨ s −−−→ n
V \Mi
V \Mi
∗
⇐⇒ . . . ∨ . . . ∨ ∃t ∈ V \ Mi : s −
→ t −−−→ n
V \Mi
∗
⇐⇒ . . . ∨ . . . ∨ ∃t ∈ X : t −−−−→ n
V \Mi+1
+
⇐⇒ . . . ∨ . . . ∨ n ∈ X ∨ ∃t ∈ X : t −−−−→ n
V \Mi+1
+
⇐⇒ n ∈ Mi ∪ X ∨ ∃h ∈ Si \ {s} ∪ X : h −−−−→ n ≡ P(i + 1)
| {z }
|
{z
}
V \Mi+1
=Mi+1
=Si+1
Search - Beweis der Korrektheit
Schleifenabbruch bei Si = {}:
P(i) ∧ Si = {} =⇒
∗
=⇒ 1 −
→ n ⇐⇒ n ∈ Mi ∨ ∃h ∈ {} : . . .
∗
=⇒ 1 −
→ n ⇐⇒ n ∈ Mi
Die gegebene JA-NEIN-Antwort ist daher korrekt.
Der Algorithmus terminiert, da jeder der (endlich vielen) Knoten
höchstens einmal markiert und zu S hinzugefügt werden kann
und bei jedem Durchgang mindestens ein Knoten aus S
entfernt wird.
Herunterladen