Algorithmen und Datenstrukturen Sibylle Schwarz Westsächsische Hochschule Zwickau Dr. Friedrichs-Ring 2a, RII 263 http://wwwstud.fh-zwickau.de/~sibsc/ [email protected] SS 2011 1 Algorithmen – Beispiel ggT Euklid: Elemente (einfacher) Euklidischer Algorithmus zur Bestimmung des ggT zweier natürlicher Zahlen Eingabe: Natürliche Zahlen a, b Algorithmus: I I falls a = b Ende der Ausführung, sonst I I falls a > b berechne a ← a − b sonst berechne b ← b − a Schritt wiederholen Ausgabe nach Ende der Ausführung des Algorithmus: a 2 Algorithmus I endlich beschriebene I schrittweise ausgeführte Arbeitsvorschrift zur Lösung eines Berechnungsproblemes, d.h. zur Transformation einer Eingabe in eine Ausgabe 3 Beispiele für Algorithmen I historisch (Mathematik): I I I I I im Alltag: I I I I I Euklidischer Algorithmus Sieb des Erathostenes schriftliche Addition, Multiplikation usw. Gauß-Algorithmus Suchen eines Wörterbucheintrages Bauanleitung Kochrezept Orchester-Partitur in der Informatik: I I I I Programm-Quelltext Programm-Ablaufplan, Struktogramm Suchverfahren Sortierverfahren 4 Algorithmen und Datenstrukturen Informatik Wissenschaft von der Darstellung und Verarbeitung symbolischer Information Darstellung der Information als (strukturierte) Daten Verarbeitung der Information durch Algorithmen 5 Abstraktionsstufen Mathematik: Implementierung: Funktion | Algorithmus | Funktion, Methode Abstrakter DT | (konkreter) DT algebraische Struktur | Datenstruktur | Typ, Klasse 6 Einordnung in die Informatik Teilgebiete der Informatik: theoretisch I I I technisch I I Formalismen zur Darstellung von Daten und Algorithmen Möglichkeiten und Grenzen der Berechenbarkeit durch Algorithmen Grundlagen für technische und praktische (und angewandte) Informatik maschinelle Darstellung von Information Mittel zur Ausführung von Algorithmen praktisch Modellierung (Datenstrukturen) Entwurf von Algorithmen Programmierung, Softwaretechnik angewandt I I Modellierung durch geeignete Datenstrukturen Anwendung von Algorithmen (z.B. Suchen, Sortieren, . . . ) 7 Inhalt der Lehrveranstaltung I Algorithmen I I I I I Spezifikation Laufzeitabschätzungen rekursive Algorithmen Beispiele, z.B. Sortieralgorithmen Datenstrukturen mit häufigen Operationen I I I I I lineare Datenstrukturen(Liste, Stack, Queue) hierarchische Datenstrukturen (Bäume) Mengen Zuordnungen (Wörterbücher) Relationen (Graphen) 8 Literatur I Cormen, Leiserson, Rivest, Stein: Algorithmen - Eine Einführung (Oldenbourg, 2007) I Güting, Dieker: Datenstrukturen und Algorithmen (Teubner, 2004) I Solymosi, Grude: Grundkurs Algorithmen und Datenstrukturen : eine Einführung in die praktische Informatik mit Java (Vieweg, 2000) I Preiss: Data Structures and Algorithms with Object-Oriented Design Patterns in Java (Online-Version unter http://www.brpreiss.com/books/opus5/) 9 Organisation http://wwwstud.fh-zwickau.de/~sibsc/lehre/ss11/ad/ Vorlesung Z1 Freitag 11:20-12:50 in HS2 Z2 Donnerstag 11:20-12:50 PBS 203 Hausaufgaben schriftliche Aufgaben (Prüfungsvorbereitung) Vorbereitung des Praktikums (Entwurf) (einige) Autotool-Aufgaben I I I Praktika 2 Gruppen: Z1 Donnerstag 11:20-12:50 R242 Z1 Freitag 13:30-15:00 R242 I Fragen zum Vorlesungsstoff I Besprechung der schriftlichen Übungsaufgaben I Programmieraufgaben (Implementierung) Prüfung: Klausur ca. 60 min (Hälfte von 120 min für Modul PTI822) 10 Algorithmen in der Informatik Algorithmus: in Schritte geordnete Arbeitsvorschrift I endliche Beschreibung I eines schrittweise ausgeführten Verfahrens I in einer formalen Beschreibungssprache. zur Ausführung eines Algorithmus ist nötig: Akteur / Maschine, welche den Beschreibungsformalismus interpretieren kann 11 Algorithmen – Eigenschaften notwendige Eigenschaften: endliche Beschreibung schrittweise Ausführung oft wird außerdem gefordert (sinnvoll für auf Computer ausgeführten Algorithmen): deterministischer Ablauf : nach der Ausführung jedes Schrittes ist bekannt, welcher Schritt mit welchen Daten als nächstes ausgeführt wird terminierend (Endlichkeit der Ausführung): Berechnungsvorschrift terminiert gdw. jede Ausführung bei jeder erlaubten Eingabe nach endlich vielen Schritten endet determiniertes Ergebnis : bei wiederholter Ausführung mit denselben Eingaben wird immer dieselbe Ausgabe erzeugt allgemeingültig : löst eine ganze Klasse von Aufgaben 12 Beispiele Algorithmus 1: 1. 2. 3. 4. Algorithmus 2: 1. 2. 3. 4. Z Eingabe: y ∈ Wähle beliebige Zahl x ∈ y ←x +4 Ausgabe: y − x Z Z Eingabe: x ∈ y ←1 Solange x 6= 0, berechne y ← yx und x ← x − 1 Ausgabe: y Algorithmus 3: N 1. Eingabe: n ∈ 2. Solange n > 1 berechne: Falls n gerade, dann n ← n/2, sonst n ← 3n + 1 3. Ausgabe: n Welche dieser Algorithmen sind deterministisch, determiniert, terminierend? 13 Algorithmen zur Lösung eines Berechnungsproblemes Berechnungsproblem: Transformation von Eingaben in Ausgaben Anforderungen an Algorithmen zur Lösung eines speziellen Berechnungsproblemes: Korrektheit Algorithmus löst alle Instanzen des gegebenen Problems (fehlerfrei): bestimmt für jede Eingabe korrekte Ausgabe. Berechenbarkeit Zu jeder Eingabe ist eine eindeutige Ausgabe definiert und wird vom Algorithmus erzeugt. Nicht alle formulierbaren Algorithmen sind berechenbar. (hängt vom Problem und der Beschreibungssprache ab). mehr dazu in LV Theoretische Informatik Effizienz möglicht geringer Ressourcen-Verbrauch (Speicherplatz, Laufzeit) 14 Algorithmen-Entwicklung 1. informale Aufgabenstellung 2. formale Spezifikation: Was (welches Berechnungsproblem) soll gelöst werden? exakte (formale) Beschreibung des Problemes: I Eingabe des Algorithmus I Ausgabe 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 5. Realisierung (Implementierung) 15 Algorithmen – Spezifikation Problemanalyse: Was soll gelöst werden? Ausgangspunkt: Ergebnis: umgangssprachlich formulierte und oft ungenaue Aufgabenbeschreibung exakte und vollständige Definition des Problemes Spezifikation eines Berechnungsproblemes: korrekte formale Beschreibung des Zusammenhanges zwischen Eingaben und Ausgaben Spezifikation eines Berechnungsproblemes enthält Vorbedingung: Forderung an die Eingaben Nachbedingung: Forderung an die Ausgaben Instanz eines Berechnungsproblemes: spezielle Eingabe 16 Beispiel: Spezifikation des Sortier-Problems informale Aufgabenstellung: Entwurf eines Verfahrens, welches jede Folge (x1 , . . . , xn ) natürlicher Zahlen sortiert formale Spezifikation des Sortier-Problemes: Vorbedingung: Eingabe (x1 , x2 , . . . , xn ) mit ∀i ∈ {1, . . . , n} : xi ∈ N Nachbedingung: Ausgabe (y1 , y2 , . . . , yn ) ist 1. y1 ≤ y2 ≤ · · · ≤ yn+1 (aufsteigend geordnet) und 2. eine Permutation (Umordnung) der Eingabe (x1 , x2 , . . . , xn ) Instanz des Sortier-Problemes: (34, 6, 72, 3, 4, 15) 17 Algorithmen – Verifikation Ist der entworfene Algorithmus korrekt? Erfüllt der entworfene Algorithmus die Spezifikation? Verifikation : Nachweis, dass der Entwurf die Spezifikation erfüllt sicherer (aber oft aufwendiger) als Testen Es gibt Verfahren / Systeme, die Verifikation automatisch ausführen oder unterstützen. mehr dazu in der LV im Master-Studium: Spezifikations- und Verifikationsmethoden 18 Effizienz von Algorithmen Aufwandsanalyse von Algorithmen I abhängig von der Größe der Instanz I unabhängig von konkreter Hardware I im günstigsten Fall (best case) ungünstigsten Fall (worst case) Mittel (average case) Abschätzungen von Resourcenbedarf bei Ausführung des Algorithmus Zeitaufwand in elementaren Rechenschritten auf einem idealisierten Rechnermodell (RAM) Speicherplatzbedarf 19 Daten: Repräsentation von Information (konkreter) Datentyp: I Menge von Werten (Daten) I Menge von Operationen auf diesen Werten Beispiele: I Daten: Telefonnummern, Operationen: Suchen der Telefonnummer einer Person I Daten: Studentendaten Operationen: Sortieren nach Name, Matrikelnummer, Noten Gruppen einteilen, zusammenlegen I Daten: Bestellungen Operationen: Einfügen, Löschen, Dringlichste finden, nach Betrag sortieren I Daten: Orte mit Verbindungen Operationen: kürzeste Verbindung suchen I Daten: arithmetische Ausdrücke Operationen: Teilausdrücke ersetzen, Wert berechnen 20 Konkrete Datentypen (Konkreter) Datentyp: I Menge von Werten I Menge von Operationen auf diesen Werten kennen wir schon aus LV Logik: algebraische Strukturen A = (A, J·KA ) Beispiele: I integer mit +,-,*,/ I string mit ++, reverse I boolean mit And, Or, Not I string×integer mit length I einfacher Datentyp = einsortige Struktur I zusammengesetzter Datentyp = mehrsortige Struktur 21 Abstrakte Datentypen Abstraktion von der Realisierung (Implementierung, Trägermenge) Abstrakter Datentyp (Σ, Φ) (Beschreibung einer Klasse konkreter Datentypen): Signatur Σ: Typ- und Funktionsdeklarationen Axiome Φ: formale Definition der Eigenschaften und Zusammenhänge zwischen Operationen (logische Formeln, Gleichungen zwischen Termen) (Java-Interfaces repräsentieren nur die Signatur) Konkreter Datentyp (algebraische Stuktur) A = (A, J·KA ) ist Instanz eines abstrakten Datentypes (Σ, Φ) gdw. I J·KA ordnet jedem Operationssysmbol aus Σ eine Funktion (passenden Typs) zu und I A erfüllt (ist Modell für) alle Axiome aus Φ 22 Entwurf von Datenstrukturen 1. (informale) Aufgabenstellung 2. Definition eine passenden abstrakten Datentyps: Syntax (interface) und Semantik 3. Festlegung eines passenden konkreten Datentyps (algebraische Struktur) 4. Implementierung Programm in Programmiersprache 23 Entwurf von Datenstrukturen – Beispiel Aufgabe: Verwaltung einer Menge ganzer Zahlen, so dass sich I für eine gegebene Zahl feststellen lässt, ob diese Zahl Element dieser Menge ist, I Zahlen in diese Menge einfügen lassen, I Zahlen aus dieser Menge entfernen lassen. abstrakter Datentyp: I Sorten: Mengentyp M , Elementtyp E, Wahrheitswerte B I Signatur: c : M × E → B, i : M × E → E, f : M × E → E I Axiome, z.B. ∀m ∈ M ∀e ∈ E : c(i(m, e), e) = t ∀m ∈ M ∀e ∈ E : c(d(m, e), e) = f ∀m ∈ M ∀e, e0 ∈ E : (e 6= e0 → c(d(m, e0 ), e) = c(m, e)) konkreter Datentyp (Modell für ADT): z.B. Liste von Integers Implementierung: z.B. in Java 24