Algorithmen und Datenstrukturen

Werbung
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
Herunterladen