WH: Prozess beim Lösen von Aufgaben (Problemen) Analyse der (informalen) Aufgabe, Identifikation von I Aufgabenbereich (Kontext) I Eingabedaten (Typen, mögliche Werte) I gewünschte Lösung (Typ, Eigenschaften, Zusammenhang mit Eingabe) Modellierung (Abstraktion, formale Darstellung) von I Aufgabenbereich (Kontext) I Anforderungen an Eingaben I Anforderungen an Lösungen Modellierung von Daten und deren Eigenschaften und Beziehungen zueinander Entwurf einer Lösungsstrategie für die modellierte Aufgabe (mit vorhandenen oder neuen Methoden) Modellierung von Abläufen und deren Eigenschaften Realisierung der Lösungsstrategie im Modellbereich Ausführung der Lösungsstrategie im Modellbereich Übertragung der Lösung vom Modellbereich in die Realität 299 Maschinelle Lösung von Aufgaben Modellierung Übertragung aller relevanten Informationen von der Realität in einen Modellbereich (geeignet gewählt) durch Analyse und Formalisierung der Eigenschaften von Aufgabenbereich (Kontext): (strukturierte) Daten, Eigenschaften, Zusammenhänge Eingabedaten: Typ, mögliche Werte, Einschränkungen Ausgabedaten (Lösung): Typ und Anforderungen: Einschränkungen Zusammenhänge mit den Eingabedaten Formalisierung in abstrakten Datentypen (ADT) Lösung der Aufgabe im Modellbereich mit vorhandenen Methoden, z.B. SAT-Solver, SW-Bibliotheken speziellen (eigens entwickelte) Algorithmen (Realisierung in konkreten Datentypen, Implementierung) Übertragung der Lösung aus Modellbereich in Realität 300 Modellierungsbeispiel: Winterbekleidung Kontext (informal): I Wenn es kalt ist, trägt Paul immer eine Mütze, einen Schal oder Handschuhe. I Ohne Handschuhe oder Schal trägt er keine Mütze. I Mütze und Handschuhe trägt er nie zusammen. I Handschuhe und Schal trägt er immer zugleich. Aufgabe: Beantwortung der folgenden Fragen (mit ja/nein) Welche der folgenden Aussagen sind semantische Folgerungen daraus: I Bei Kälte trägt er immer seinen Schal. I Bei Kälte trägt er immer Handschuhe oder Mütze. I Er trägt nie Handschuhe. 301 Modellierungsbeispiel: Winterbekleidung Idee (Lösungsstrategie): Lösung mit SAT-Solver Lösungsprozess: 1. Formale Darstellung des Kontext als (aussagenlogische) Formelmenge Φ = {m ∨ s ∨ h, ¬(h ∨ s) → ¬m, ¬(m ∧ h), h ↔ s} 2. Formale Darstellung der Aufgabestellungen (Fragen) ψ1 = s, ψ2 = h ∨ m, ψ3 = ¬h 3. Übersetzung der Folgerungsprobleme Φ |= ψi in Erfüllbarkeitsprobleme (Φ |= ψi gdw. Φ ∪ {¬ψi } unerfüllbar) 4. Darstellung von Φ ∪ {¬ψi } als CNF, z.B. für ψ1 = s: ϕ = (m ∨ h ∨ s) ∧ (¬m ∨ h ∨ s) ∧ (¬m ∨ ¬h) ∧ (¬h ∨ s) ∧ (¬s ∨ h) ∧ (¬s) 5. Darstellung im DIMACS-Format 6. Lösung der Erfüllbarkeitsprobleme mit einem SAT-Solver 7. Übersetzung der Ergebnisse in Antworten auf die Fragen: unerfüllbar 7→ ja, erfüllbar 7→ nein 302 Algorithmen (Wiederholung aus LV zu Programmierung) Algorithmus: in Schritte geordnete Arbeitsvorschrift I in einer formalen Beschreibungssprache I endlich beschriebene I schrittweise ausgeführte Arbeitsvorschrift zur Lösung einer (Berechnungs-)Aufgabe, d.h. zur Transformation einer Eingabe in eine Ausgabe zur Ausführung eines Algorithmus ist nötig: Akteur / Maschine, welche die Beschreibungssprache interpretieren kann 303 Beispiel: Summe der ersten n natürlichen Zahlen informale Aufgabenstellung: Addiere alle natürlichen Zahlen von 1 bis n. Spezifikation (formale Aufgabenbeschreibung, Anforderungen): N P Nachbedingung: Ausgabe s ∈ N mit s = ni=1 i Vorbedingung: Eingabe n ∈ verschiedene Algorithmen, welche diese Spezifikation erfüllen: Algorithmus : Summe1 Eingabe : n ∈ Ausgabe : s ∈ N N s←0 für jedes i ← 1, . . . , n : s ←s +i Algorithmus : Summe2 Eingabe : n ∈ Ausgabe : s ∈ s← N N n(n+1) 2 304 Beispiel: größter gemeinsamer Teiler Aufgabe: Zu zwei natürlichen Zahlen soll ihr größter gemeinsamer Teiler (ggT) berechnet werden. Kontextwissen (Definitionen): N:t ·k =x Menge aller gemeinsamen Teiler von x ∈ N und y ∈ N: T (x, y ) = {t ∈ N | (t|x) ∧ (t|y )} I größter gemeinsamer Teiler von x ∈ N und y ∈ N I t ist Teiler von x: t | x gdw. ∃k ∈ I ggT(x, y ) = t gdw. ((t ∈ T (x, y )) ∧ (∀s ∈ T (x, y )(s|t))) Spezifikation (Anforderungen): N, y ∈ N Nachbedingungen (an Ausgaben): z ∈ N mit z = ggT(x, y ) Vorbedingungen (an Eingaben): x ∈ 305 Beispiel: Algorithmus für ggT (bekannte) Eigenschaften des ggT: N: N22 : N : ∀x ∈ ∀(x, y ) ∈ ∀(x, y ) ∈ ((x > y ) → ggT(x, x) = x ggT(x, y ) = ggT(y , x) (ggT(x − y , y ) = ggT(y , x))) führen zur Idee des ( einfachen ) Euklidischen Algorithmus: Algorithmus : Größter gemeinsamer Teiler N Eingabe : x ∈ , y ∈ Ausgabe : ggT(x, x) N solange x 6= y : wenn x > y dann x ←x −y sonst y ←y −x Rückgabe x 306 Struktur von Algorithmen Konstruktion komplexer Berechnungsvorschriften aus Grundbausteinen: elementare Algorithmen (Schritte), z.B. I Zuweisung, I Aufruf eines Unterprogrammes, I Ein- oder Ausgabe (Interaktion) Verknüpfungen von Algorithmen durch sequentielle Ausführung (nacheinander) parallelle Ausführung (gleichzeitig, benötigt mehrere Ausführende, z.B. Prozessoren) bedingte Ausführung, Alternative (Verzweigung) wiederholte Ausführung (Schleifen) rekursive Ausführung Blöcke , Unterprogramme (Notation in Struktogramm, Pseudocode, . . . ) 307 Algorithmen-Entwicklung 1. Analyse der informalen Aufgabenstellung 2. (formale) Spezifikation: Was (welche Berechnungsaufgabe) soll gelöst werden? exakte (formale) Beschreibung der Aufgabe: I Anforderungen an Eingaben des Algorithmus I Anforderungen an Ausgaben des Algorithmus I Zusammenhang zwischen Ein- und Ausgabe 3. Entwurf des Algorithmus: Wie soll es gelöst werden? I formale Darstellung der Arbeitsschritte I zu jedem Schritt: I I I Was wird getan? (Aktionen, Anweisungen) Womit wird es getan? (Daten) Wie geht es weiter? (nächster Schritt) 4. Verifikation: Nachweis der Korrektheit des Algorithmenentwurfes bzgl. der Spezifikation 5. Realisierung (Implementierung) 308 Algorithmen – Analyse der Aufgabe Was soll gelöst werden? I ist zu Beginn des Software-Entwicklungsprozesses oft noch nicht klar, I zunächst grober Ansatz, I wird schrittweise verfeinert, formale Darstellung fördert I I I I I Problemverständnis, Abstraktion (Auswahl relevanter Eigenschaften), Dokumentation während des Entwicklungsprozesses, Ideen für Lösungsansätze 309 Algorithmen – Spezifikation Ausgangspunkt: Ergebnis: umgangssprachlich formulierte und oft ungenaue Aufgabenbeschreibung exakte und vollständige Definition des Problemes Spezifikation einer Berechnungaufgabe: korrekte formale Beschreibung des Zusammenhanges zwischen Eingaben und Ausgaben Spezifikation einer Berechnungsaufgabe enthält Vorbedingung: Forderung an die Eingaben Nachbedingung: Forderung an die Ausgaben 310 Beispiel: Minimum-Suche informale Aufgabenstellung: Entwurf eines Verfahrens, welches in jeder Folge natürlicher Zahlen das Minimum findet formale Spezifikation: Vorbedingung: Eingabe (x1 , x2 , . . . , xn ) ∈ Nachbedingung: Ausgabe m ∈ I I N mit N∗ ∀i ∈ {1, . . . , n} : m ≤ xi und ∃i ∈ {1, . . . , n} : m = xi aus Spezifikation lässt sich folgender Algorithmus ablesen“: ” Algorithmus : Minimum Eingabe : x = (x1 , . . . , xn ) ∈ Ausgabe : m ∈ N N∗ m ← x1 für jedes i ← 2, . . . , n : wenn xi < m dann m ← xi 311