Von Labyrinthen zu 4 Gerald Futschek Charakterisierung Algorithmus Ein Algorithmus ist ein schrittweises Verfahren ist exakt beschrieben liefert nach endlich vielen Schritten das Ergebnis (terminiert) liefert stets ein richtiges Ergebnis (ist korrekt) löst ein allgemeines Problem 1
Probleme, die nicht mit lösbar sind Fahre eine Strasse entlang zur City, nimm den letzten freien Parkplatz vor der City Schreibe die Lottozahlen vom nächsten Sonntag auf Beweise, dass ein beliebiger gegebener Algorithmus richtig oder falsch ist Erstelle einen Algorithmus zu einer beliebigen gegebenen Aufgabenstellung Phasen der Problemlösung mit Programmen Problemanalyse: Was soll getan werden? Spezifikation Lösungsdesign: Wie kommt man zur Lösung? Algorithmus Implementierung: Realisierung in einer Programmiersprache Programm Testen: hat der Algorithmus / das Programm Fehler? Testprotokoll 2
Beispiel: Suchen in einem großen Datenbestand 1 Problemanalyse Datenbestand besteht aus vielen gleichgestaltigen Einzeldaten Fragestellung lautet: Kommt ein gegebener Wert x im Datenbestand vor oder nicht? Ergebnis ist wahr oder falsch Es gibt keine Sortierung der Daten Lösungsdesign Vergleiche der Reihe nach alle Werte des Datenbestandes mit Wert x (sequentielle/lineare Suche) ist mindestens einer gleich x, ist Ergebnis wahr ist keiner mit x gleich, ist Ergebnis falsch Beispiel: Suchen in einem großen Datenbestand 2 Fragen zur Implementierung: In welcher Reihenfolge sollen die Daten verglichen werden? Gibt es bessere / schlechtere Reihenfolgen? Gibt es überhaupt immer eine Reihenfolge? Gibt es immer ein Ergebnis? Was ist die Precondition? 3
Beispiel: Suchen in einem großen Datenbestand 3 Lineare Suche ( x, gefunden): y erster Wert gefunden falsch solange (noch ein weiterer Wert existiert) falls (y = x) gefunden wahr y nächster Wert mit welchen Eingangswerten (Testdaten) soll man den Algorithmus testen? kein, ein, mehrere Werte im Datenbestand gesuchter Wert x am Anfang, in der Mitte, am Ende gesuchter Wert x nicht enthalten Beispiel: Suchen in einem großen Datenbestand 4 (Verbesserte Version) Lineare Suche ( x, gefunden): y erster Wert falls (y = x) gefunden wahr sonst gefunden falsch solange (noch ein weiterer Wert existiert) y nächster Wert falls (y = x) gefunden wahr Beobachtung: gefunden enthält stets das Ergebnis für den bereits untersuchten Datenbestand Der bereits untersuchte Datenbestand wächst in jedem Schritt um einen Wert an (allgemeine Strategie!) Was ist der Aufwand des Verfahrens? Kann man das Verfahren beschleunigen? 4
Optimierte Lineare Suche Lineare Suche 2 ( x, gefunden): y erster Wert solange (y x) und (noch ein weiterer Wert existiert) y nächster Wert falls (y = x) gefunden wahr sonst gefunden falsch In welchen Fällen ist die optimierte Version besser geworden? In welchen Fällen ist die optimierte Version gleich gut? In welchen Fällen ist die optimierte Version schlechter geworden? Suche in einem sortierten Datenbestand Aufgabenanalyse kann man in einem sortierten Datenbestand schneller suchen als in einem unsortierten? welche Datenbestände lassen sich sortieren? Lösungsdesign Lösungsstrategie Teile und Herrsche in jedem Schritt wird der noch zu untersuchende Datenbestand halbiert 5
Binäre Suche Beispiel: Werte -18, -8, -4, -4, -4, -1, 14, 15, 15, 24, 70, 89, 111 Indizes 1 2 3 4 5 6 7 8 9 10 11 12 13 Binäre Suche ( x, gefunden): links erster Index rechts letzter Index gefunden falsch solange (links < rechts) m (links + rechts) / 2 falls (Wert(m) = x) gefunden wahr falls (Wert(m) < x) links m + 1 falls (Wert(m) > x) rechts m 1 In welchen Fällen ist die binäre Suche nicht besser als die lineare Suche? Was ist die Precondition der binären Suche? 6