Dignitas Infinita - MENSCHENWÜRDE; Erklärung des Dikasteriums für die Glauben...
Algorithmen und Datenstrukturen - Kapitel 1
1. Medientechnik und Design
Algorithmen und Datenstrukturen
Medientechnik und Design
Algorithmen und Datenstrukturen
Mag. Volker Christian
FH Oberösterreich – Campus Hagenberg
Fakultät für Informatik, Kommunikation und Medien
Softwarepark 11, 4232 Hagenberg/Austria
Sommersemester 2013
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
Sommersemester 2013
1 Pages
2. Algorithmen und Datenstrukturen
Kapitel 1: Einführung
Algorithmen und Datenstrukturen
Kapitel 1
Einführung
Allgemeines
Überblick über Algorithmen und Datenstrukturen
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-1 | 1/461
3. Algorithmen und Datenstrukturen
Kapitel 1: Einführung
Allgemeines
Inhalt
1
Form der Lehrveranstaltung
2
Literatur
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-2 | 2/461
4. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Allgemeines
1
Form der Lehrveranstaltung
2
Literatur
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-3 | 3/461
5. Algorithmen und Datenstrukturen – Kapitel 1
Form der Lehrveranstaltung
Lehrveranstaltungen
Vorlesung
Volker Christian
volker.christian@fh-hagenberg.at
Die Homepage der Vorlesung finden Sie unter
http://elearning.fh-hagenberg.at/course/view.php?id=2236
Die Vorlesung findet wöchentlich jeweils am Montag von 940 bis 1115 statt.
Übungen
Volker Christian
volker.christian@fh-hagenberg.at
Die Homepage der Übungen finden Sie unter
http://elearning.fh-hagenberg.at/course/view.php?id=2237
Es finden neun Übungseinheiten statt.
Die Termine werden gesondert bekannt gegeben.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-4 | 4/461
6. Algorithmen und Datenstrukturen – Kapitel 1
Form der Lehrveranstaltung
Beurteilung
Vorlesung
Es findet eine abschließende Klausur statt.
Übungen
In jeder Übungseinheit werden Übungsaufgaben ausgegeben.
Diese Übungsaufgaben werden von Tutoren korrigiert und bewertet.
Bei jeder Übung können maximal 24 Punkte erreicht werden.
Von den neu Übungen werden die besten Acht gewertet.
Jede dieser acht Übungen muss für sich selbst positiv (≥ 12 Punkte)
sein.
Für einen positiven Abschluss müssen insgesamt mehr als 96 Punkte
erreicht werden.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-5 | 5/461
7. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Allgemeines
1
Form der Lehrveranstaltung
2
Literatur
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-6 | 6/461
8. Algorithmen und Datenstrukturen – Kapitel 1
Literatur
Basisliteratur
Algorithmen in Java
(http://www.pearsonhighered.com/educator/product/Algorithms-in-Java-Parts-14/97802013
Author: Robert Sedgewick
Verlag: Pearson Studium
Seiten: 768
Preis: e 54.08
ISBN: 9780201361209
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-7 | 7/461
9. Algorithmen und Datenstrukturen
Kapitel 1: Einführung
Überblick über Algorithmen und Datenstrukturen
Inhalt
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-8 | 8/461
10. Algorithmen und Datenstrukturen – Kapitel 1
Überblick über Algorithmen und Datenstrukturen
Das große Bild
Beim Studium von Datenstrukturen . . .
beschäftigt man sich mit verschiedenen, strukturierten Möglichkeiten
zum Verwalten (d.h. Speichern) von Datensätzen.
beschäftigt man sich mit der Art, wie man auf Datensätze wieder
zugreifen kann.
beschäftigt man sich mit der Effizienz verschiedener
Datenverwaltungstrategien.
lernt man, selbst problemgerechte Datenstrukturen zu entwickeln.
Beim Studium von Algorithmen . . .
beschäftigt man sich mit grundsätzlichen, schematischen
Lösungsverfahren für elementare Problemstellungen.
beschäftigt man sich mit der Effizienz von Lösungsverfahren.
lernt man, selbst in strukturierter Weise Lösungsverfahren für
spezifische Problemstellungen zu entwickeln.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-9 | 9/461
11. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-10 | 10/461
12. Algorithmen und Datenstrukturen – Kapitel 1
Datensätze
Datensätze
Ein Datensatz ist eine Gruppe von inhaltlich zusammenhängenden
Datenfeldern.
Datensätze sind dem jeweiligen Problem angepasst.
Datensätze sind wiederum aus Datensätzen und elementaren Daten
aufgebaut.
Telefonbucheintrag
Name
Vertex
Koordinaten
Zeichen eines Textes
Zeichencode
Vorname
Farbe
Schriftart
Telefonnummern
Normale
Straße
Nachbarvertizes
Schnitt (Fett,
Kursiv, . . . )
Ort
Texturkoordinaten
...
...
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
Farben
Unterstrich
...
22. Oktober 2013
1-11 | 11/461
13. Algorithmen und Datenstrukturen – Kapitel 1
Datensätze
Datensätze beinhalten selbst wieder Datenstrukturen
Telefonbucheintrag (Auszug)
Vorname: z.B. Liste oder Array von Zeichen. (Man kann nicht davon
ausgehen, dass es in jeder Programmiersprache eine Klasse
String gibt.)
Nummern: z.B. Liste von Telefonnummern. Möglicherweise existieren
mehrere Telefonnummern für die betreffende Person.
Vertex (Auszug)
Koordinaten: z.B. Array für die Koordinaten x , y und z.
Nachbarn: z.B. Liste von Vertizes.
Farbe: z.B. Array für die Komponenten Rot, Grün und Blau.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-12 | 12/461
14. Algorithmen und Datenstrukturen – Kapitel 1
Datensätze
Implementierung von Datensätzen in Java
Elementare Datensätze besitzen elementare Datentypen, d.h. Werte
von elementaren Datentypen sind elementare Datensätze – bestehen
aus einzelnen Bits und Bytes.
boolean, byte, char, short, int, long, float, double
Komplexe Datensätze sind Objekte von Klassen.
class TelBookEntry, class Vertex, class Symbol, . . .
Die öffentlichen Methoden der Klassen bilden die Schnittstelle des
Datensatzes.
Die Schnittstelle abstrahiert den Datensatz von dessen eigentlicher
Implementierung.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-13 | 13/461
16. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-15 | 15/461
17. Algorithmen und Datenstrukturen – Kapitel 1
Datenstrukturen
Datenstrukturen verwalten Datensätze
Datenstrukturen werden verwendet, um Daten bzw. Datensätze
geeignet zu verwalten.
Eine spezielle Datenstruktur ist definiert durch . . .
die Art der Anordnung und Verknüpfung der Datensätze.
mögliche Zugriffsarten auf die Datensätze.
(a) Liste
(b) Baum
(c) Hashmap
Abbildung 1 : Beispiele von Datenstrukturen
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-16 | 16/461
18. Algorithmen und Datenstrukturen – Kapitel 1
Datenstrukturen
Elementare Datenstrukturen
Es existieren viele elementare Datenstrukturen. Jede Datenstruktur hat
ihre Vor- und Nachteile.
Felder (Arrays)
Stapelspeicher (Stack)
Warteschlangen (Queue)
Listen (List)
Bäume (Tree)
Hashtabellen (Hashtable/Hashmap)
Halden (Heaps)
Graphen (Graphs)
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-17 | 17/461
19. Algorithmen und Datenstrukturen – Kapitel 1
Datenstrukturen
Charakteristika von Datenstrukturen
Datenstrukturen werden nach folgenden Eigenschaften charakterisiert:
Schnittstelle: Zugriffsarten (Operationen) auf die Datenstruktur.
Operationen zum Einfügen von Datensätzen
Operationen zum Löschen von Datensätzen
Operationen, um auf Datensätze zuzugreifen
...
Komplexität: Dynamische und statische Komplexität
Dynamische Komplexität ist ein Maß für das
Laufzeitverhalten der Schnittstelle und dessen
Abhängigkeit von der Zahl gespeicherter Datensätze.
Statische Komplexität ist ein Maß für die Komplexität
des Quelltextes der Implementierung.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-18 | 18/461
20. Algorithmen und Datenstrukturen – Kapitel 1
Datenstrukturen
Implementierung von Datenstrukturen in Java
Datenstrukturen werden als Klassen implementiert.
class List, class Tree, class Array, . . .
Die öffentlichen Methoden dieser Klassen bilden die Schnittstelle der
Datenstruktur.
Die Schnittstelle abstrahiert die Datenstruktur von ihrer eigentlichen
Implementierung.
Sind Hilfsmethoden und Hilfsklassen notwendig, so werden diese als
nicht öffentlich vereinbart.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-19 | 19/461
21. Algorithmen und Datenstrukturen – Kapitel 1
Datenstrukturen
Beispiel: Array als Datenstruktur
Eine Datenstruktur ist ein Array, wenn man über einen Index auf
Datensätze zugreifen kann.
1
2
3
public class Array {
protected int size = 0;
protected Object[] array = null;
Array
#size:int
4
5
public Array(int size) {
this.size = size; array = new Object[size];
}
6
7
+Array(size:int)
+add(index:int, o:Object):void
+get(index:int):Object
+size():int
8
9
public void add(int index, Object o) {
array[index] = o;
}
10
11
<<array>>
12
13
public Object get(int index) {
return array[index];
}
14
15
0..size
Object
16
17
public int size() {
return size;
}
18
19
20
}
Listing 2 : Array.java
Volker Christian
array
Abbildung 2 : UML-Class-Diagramm
der Klasse Array
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-20 | 20/461
22. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-21 | 21/461
23. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Strukturierte Problemlösungsverfahren
Wortstamm: Verballhornung des Namens Muhammed ibn Musa
al-Chwarizmi ( ca. 783, ca. 850), dessen arabisches
Lehrbuch „Über das Rechnen mit indischen Ziffern“ (um
825) in der mittelalterlichen lateinischen Übersetzung mit
den Worten Dixit Algorismi (Algorismi hat gesagt) beginnt.
Bedeutung: Eine Vorschrift zur Lösung einer Problemstellung.
Elementare Algorithmen sind Problemlösungsstrategien für verschiedene, in
Abwandlungen immer wiederkehrende Problemstellungen.
Sortieren
Suchen
Zeichenkettenverarbeitung
Geometrie und Grafik
Numerik
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-22 | 22/461
24. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Charakteristika von Algorithmen
Ein Algorithmus ist eine Vorschrift zur Lösung eines elementaren,
unabhängigen Problems und muss . . .
aus einzelnen Schritten zusammengesetzt sein.
In jedem Schritt wird eine „Berechnung“ durchgeführt.
Bei jedem Schritt ist angegeben, welcher Schritt als nächster
auszuführen ist.
eindeutig ausführbar sein.
Es darf kein Interpretationsspielraum, was zu geschehen hat, bestehen.
endlich sein.
Statische Endlichkeit: Ein Algorithmus muss sich mit endlich vielen
Zeichen formulieren lassen.
Dynamische Endlichkeit: Ein Algorithmus muss das Problem in endlich
vielen Schritten lösen.
Daten verarbeiten.
Manipulation – z.B. Sortieren – von bestehenden Daten.
Berechnung eines Ergebnisses – z.B. Berechnung der Wurzel aus 9.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-23 | 23/461
25. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Eingangsgrößen und Ausgangsgrößen
Ein Algorithmus muss Zugriff auf die zu verarbeitenden Datensätze
oder die für eine Berechnung heranzuziehenden Werte haben.
Ein Algorithmus muss die verarbeiteten Datensätze oder die
Ergebnisse einer Rechnung wieder zur Verfügung stellen.
Eingangsgrößen: Die Datenbasis wird einem Algorithmus meist in Form
von Datensätzen in einer Datenstruktur zur Verfügung
gestellt.
Ausgangsgrößen: Die Ergebnisse werden von einem Algorithmus meist in
Form eine Datenstruktur, eines Datensatzes oder eines
Wertes zur Verfügung gestellt.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-24 | 24/461
26. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Fehlerfreiheit
Ein Algorithmus muss in allen erdenklichen Situationen wohldefiniert
und geeignet reagieren.
⇒ Prüfen der Eingangsgrößen auf Plausibilität.
⇒ Ist die Ermittlung des Ergebnisses nicht möglich, muss dies vom
Algorithmus geeignet signalisiert werden.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-25 | 25/461
27. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Definition des Algorithmusbegriffs
Versuch einer Definition:
Ein Algorithmus ist ein endliches, schrittweises Verfahren zur Berechnung
gesuchter aus gegebenen Größen, in dem jeder Schritt aus einer Anzahl
eindeutig ausführbarer Operationen und einer Angabe über den nächsten
Schritt besteht.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-26 | 26/461
28. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Beschreibung von Algorithmen
Spezifikation = Sicht von außen
Beschreibung der Problemstellung.
Definition des „Was“.
Beschreibung der Schnittstelle und deren Verhalten.
Der Algorithmus an sich wird als „Black Box“ betrachtet.
Darstellung = Sicht von innen
Beschreibung der Lösungsidee.
Beschreibung des „Wie“.
Beschreibung des eigentlichen Lögungsverfahrens.
Muss die spezifizierte Schnittstelle und deren Verhalten zur Verfügung
stellen.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-27 | 27/461
29. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Darstellung von Algorithmen
Die Darstellung eines Algorithmus ist eine Meta-Beschreibung – die
Beschreibung einer Beschreibung.
Darstellungsarten:
Prosa: Umgangssprachlich in Form eines kurzen „Aufsatzes“.
Stilisiert: Umgangssprachlich, aber schon etwas formalisiert –
schrittweise, eindeutig, endlich.
Grafisch: Ablaufdiagramm (Flussdiagramm) oder Struktogramm.
Abstrakt: Algorithmenbeschreibungssprache wie Adele oder Jana
(Pseudocode).
Konkret: Implementierung in einer Programmiersprache wie Java, C#,
C, C++, Pascal, . . .
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-28 | 28/461
30. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Implementierung von Algorithmen als Objekt-Methoden
Ist ein Algorithmus Teil einer Datenstruktur, so wird der Algorithmus als
Objektmethode implementiert.
Beispiel: Sort-Algorithmus der Klasse List
1
2
public class List {
...
3
4
public void sort() {
...
}
5
6
7
8
9
...
}
Die Eingangsgrößen kann der Algorithmus direkt von der
Datenstruktur beziehen.
Die Ausgangsgrößen kann der Algorithmus direkt in der Datenstruktur
ablegen oder als Rückgabewert liefern.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-29 | 29/461
31. Algorithmen und Datenstrukturen – Kapitel 1
Algorithmen
Implementierung von Algorithmen als Klassen-Methoden
Wird ein Algorithmus nicht als Teil einer Datenstruktur formuliert, so wird
er als Klassenmethode einer Klasse implementiert.
Beispiel: Externer Sort-Algorithmus
1
2
public class Sort {
...
3
4
public static void sort(List list) {
...
}
5
6
7
8
9
...
}
Die Eingangsgrößen werden dem Algorithmus über die
Aktualparameter übergeben.
Die Ausgangsgrößen liefert der Algorithmus über den Rückgabewert
oder wenn möglich über Referenz-Aktualparameter (für komplexe
oder mehrere Ergebniswerte).
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-30 | 30/461
32. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-31 | 31/461
33. Algorithmen und Datenstrukturen – Kapitel 1
Lösungsleitfaden
Schrittweise Herangehensweise
1
Beschäftigung mit der Thematik.
Wenn die Thematik nicht bekannt ist, muss man sich in diese
einarbeiten!
2
3
Mit welchen Datensätzen hat man zu tun? Wie können die
Datensätze dargestellt werden?
Auswahl einer geeigneten Datenstruktur.
Kann eine elementare, bekannte Datenstruktur verwendet werden?
Muss eine problemgerechte Datenstruktur entwickelt werden?
4
Spezifizieren der Schnittstelle des Algorithmus und was er zu tun hat.
5
Entwicklung und Implementierung des Algorithmus unter
Bedachtnahme auf die ausgewählte Datenstruktur und die
spezifizierte Schnittstelle.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-32 | 32/461
34. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-33 | 33/461
35. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Ermittlung des Index eines Folgegliedes
Problemstellung:
Gegeben: Eine endliche Folge von paarweise disjunkten, ganzen Zahlen.
z = (6, 3, 4, 8, 5, 7, 2, 9, . . . , zn )
Gesucht: Der Index einer gegebenen Zahl der Folge.
Fragestellungen bei der Analyse für die Implementierung:
1
Beschäftigen mit der Problemstellung: Was ist eine Folge und was ist
der Index eines Folgegliedes?
2
Wie können die ganzen Zahlen in Java dargestellt werden?
3
Welche Datenstruktur passt auf das Problem?
4
Wie soll der Algorithmus das Problem mit Bedacht auf die
ausgewählte Datenstruktur lösen?
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-34 | 34/461
36. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Beschäftigung mit der Problemstellung
Was ist eine Folge und was ist der Index eines Folgegliedes?
Aus Wikipedia:
Als Folge wird eine Auflistung endlich oder unendlich vieler, durch
Ordinalzahlen fortlaufend nummerierter Objekte bezeichnet.
Das Objekt mit der Nummer i, man sagt hier auch: mit dem Index i,
wird i-tes Glied der Folge genannt.
Schreibweise:
Endliche Folge: x = (x1 , x2 , x3 , . . . , xn )
Unendliche Folge: x = (x1 , x2 , x3 , . . .)
Formale Definition: Eine Folge x ist als Abbildung aus einer
Indexmenge I in die Zielmenge X definiert:
x : I → X,
wobei I = {1, 2, 3, . . . , n}
und X = {xi }
x : i → xi
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-35 | 35/461
37. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Eine ganze Zahl als Datensatz
In Java können ganze Zahlen durch die elementaren Datentypen
byte, short, int oder long dargestellt werden.
Nach der Regel, dass Datensätze als Objekte von Klassen dargestellt
werden müssen, können die in Java existierenden Wrapperklassen der
elementaren Datentypen verwendet werden.
Datentyp
byte
short
int
long
Wrapperklasse
Byte
Short
Integer
Long
Welche dieser Wrapperklasse verwendet werden soll, hängt von dem
Wertebereich der darzustellenden ganzen Zahlen ab.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-36 | 36/461
38. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Eine ganze Zahl als Datensatz
Ein Objekt der Wrapperklasse Long repräsentiert einen long-Wert
1
package java.lang;
2
3
4
public class Long {
public Long(long l);
// Constructor
5
6
public
// <
// =
// >
7
8
9
int compareTo(Long anotherLong);
0, if longValue() < anotherLong.longValue()
0, if longValue() == anotherLong.longValue()
0, if longValue() > anotherLong.longValue()
10
11
public long longValue();
// The represented value
12
13
public String toString();
// The value as a String
14
15
16
public static Long valueOf(long l);
// Create an Object from a value
}
Listing 3 : Auszug aus der Klasse Long
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-37 | 37/461
39. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Welche Datenstruktur passt auf das Problem?
Welche Funktionalitäten muss die Datenstruktur zur Verfügung stellen?
Die Reihenfolge der Folgeglieder muss in der Datenstruktur erhalten
bleiben.
Es soll möglich sein, auf einzelne Objekte der Folge direkt über ihren
Index zugreifen zu können.
Eine mögliche und in diesem Fall gute Wahl ist die Verwendung eines
Arrays.
In Arrays bleibt die Reihenfolge der Elemente erhalten.
In Arrays kann über den Array-Index auf die einzelnen Elemente
zugegriffen werden.
Achtung:
Das erste Element einer Folge trägt typischerweise den Index 1.
Das erste Element eines Arrays trägt den Index 0.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-38 | 38/461
40. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Die Datenstruktur Array
Array als Klasse
1
2
3
public class Array {
protected int size = 0;
protected Object[] array = null;
4
5
public Array(int size) {
this.size = size; array = new Object[size];
}
6
7
8
9
public void add(int index, Object o) {
array[index] = o;
}
10
11
12
13
public Object get(int index) {
return array[index];
}
14
15
16
17
public int size() {
return size;
}
18
19
20
}
Listing 4 : Array.java
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-39 | 39/461
41. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Spezifikation des Algorithmus: Version 1
1
Name: Der Algorithmus heißt indexSearch und wird als
Klassenmethode der Klasse IndexSearch implementiert.
2
Eingangsgrößen: Dem Algorithmus wird ein mit Long-Objekten
gefülltes Objekt der Klasse Array und ein long-Wert als Schlüssel, in
Form eines Objektes der Klasse Long, übergeben.
3
Ausgangsgrößen: Der Algorithmus ermittelt den (mathematischen)
Index des Schlüssels und gibt diesen als Ergebnis zurück.
Schnittstelle:
4
int indexSearch(Array array, Long key);
5
Fehlerfälle:
Ist der Schlüssel nicht im Array gespeichert, so soll dies durch den
Rückgabewert -1 angezeigt werden.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-40 | 40/461
42. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Darstellung des Algorithmus
Datenrepräsentation
Jedes Glied der Folge wird in ein Element des Array gespeichert.
Die Reihenfolge der Folgeglieder und deren Repräsentation als
Elemente im Array soll identisch sein.
⇒ Die Indizes index der Elemente des Arrays korrespondieren mit den
Indizes i der Folgeglieder, wobei ein Offset von 1 besteht:
index = i − 1.
Arbeitsweise
Schleife über alle Elemente des Arrays.
Jedes Element des Arrays mit der gegebenen Zahl vergleichen.
Sind beide gleich, ist der Index i der gegebenen Zahl gleich dem Index
des Elements im Array plus eins: index + 1.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-41 | 41/461
43. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Ermittlung des Index eines Folgegliedes
Prosa
Man nehme die gegebene Folge und wähle die erste Position der Folge als
aktuelle Position.
Ist die aktuelle Position außerhalb der gegebenen Folge, ist die
vorgegebene Zahl nicht Element der Folge und die Suche kann somit nicht
erfolgreich beendet werden. Ist die Zahl an der aktuellen Position gleich
der gesuchten Zahl, so ist die aktuelle Position in der gegebenen Folge die
Ordinalzahl, d.h. der Index der vorgegebenen Zahl und die Suche können
somit erfolgreich beendet werden. Ist die Zahl an der aktuellen Position
nicht die gesuchte Zahl, so gehe zur nächsten Position in der Folge und
wiederhole den in diesem Absatz beschriebenen Vorgang!
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-42 | 42/461
44. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Ermittlung des Index eines Folgegliedes
Stilisierte Prosa
1
Wähle die erste Position der Folge als aktuelle Position.
2
Liegt die aktuelle Position außerhalb der Folge (aktuelle Position
> |F |), gehe zu Schritt 6!
3
Ist die Zahl an der aktuellen Position der Folge gleich der
vorgegebenen Zahl, dann gehe zu Schritt 5!
4
„Erhöhe“ die aktuelle Position um 1 und gehe zu Schritt 2!
5
Die gesuchte Ordinalzahl, also der Index der vorgegebenen Zahl, ist
die aktuelle Position.
6
Ende des Algorithmus.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-43 | 43/461
45. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Ermittlung des Index eines Folgegliedes
Flussdiagramm
indexsearch(F , vZahl)
i =1
? i > |F |
Y
N
? Fi == vZahl
Y
N
i =i +1
index = i
End
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-44 | 44/461
46. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Der fertig implementierte Algorithmus
Der Algorithmus indexSearch
1
2
3
4
public class IndexSearch {
public static int indexSearch(Array array, Long key) {
for (int i = 0; i < array.size(); i++) { // Iterate over every index
Long currentLong = (Long) array.get(i);
5
6
if (key.compareTo(currentLong) == 0) { // Found?
return i + 1; // Found: Return the
// adjusted index
}
7
8
9
10
}
return -1; // Not found: Return -1
11
12
13
}
}
Listing 5 : IndexSearch.java
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-45 | 45/461
47. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Testen des Algorithmus
Ein Test-Treiber für indexSearch
1
2
3
public class IndexSearchTreiber {
public static void main(String[] args) {
Array array = new Array(10);
4
5
for (int i = 0; i < 10; i++) {
array.add(i, new Long(100 + i));
}
6
7
8
9
Long key = new Long(102);
int index = IndexSearch.indexSearch(array, key);
10
11
12
System.out.println("Index␣of␣" + key + ":␣" + index);
13
14
}
}
Listing 6 : IndexSearchTreiber.java
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-46 | 46/461
48. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Spezifikation des Algorithmus: Version 2
1
Name: Der Algorithmus heißt indexSearch und wird als
Objektmethode der Klasse ArrayWithIndexSearch implementiert.
2
Eingangsgrößen: Der Algorithmus kann direkt auf die Elemente der
Klasse ArrayWithIndexSearch zugreifen. Zusätzlich wird ihm ein
long-Wert als Schlüssel, in Form eines Objektes der Klasse Long,
übergeben.
3
Ausgangsgrößen: Der Algorithmus ermittelt den (mathematischen)
Index des Schlüssels und gibt diesen als Ergebnis zurück.
Schnittstelle:
4
int indexSearch(Long key);
5
Fehlerfälle:
Ist der Schlüssel nicht im Array gespeichert, so soll dies durch den
Rückgabewert -1 angezeigt werden.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-47 | 47/461
49. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
indexSearch als Objektmethode
Algorithmen können, auch als Objektmethoden implementiert werden.
Der Algorithmus indexSearch also Objektmethode
1
2
3
4
public class ArrayWithIndexSearch extends Array { // Inherit Array as base
public ArrayWithIndexSearch(int size) {
super(size);
}
5
6
public int indexSearch(Long key) {
for (int i = 0; i < this.size(); i++) { // Iterate over every index
Long currentLong = (Long) this.get(i);
7
8
9
10
if (key.compareTo(currentLong) == 0) { // Found?
return i + 1; // Found: Return the
// adjusted index
}
11
12
13
14
}
return -1; // Not found: Return -1
15
16
17
}
}
Listing 7 : ArrayWithIndexSearch.java
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-48 | 48/461
50. Algorithmen und Datenstrukturen – Kapitel 1
Einführendes Beispiel
Wieder ein Test-Treiber
Ein Test-Treiber für indexSearch als Objektmethode
1
2
3
public class ArrayWithIndexSearchTreiber {
public static void main(String[] args) {
ArrayWithIndexSearch array = new ArrayWithIndexSearch(10);
4
5
for (int i = 0; i < 10; i++) {
array.add(i, new Long(100 + i));
}
6
7
8
9
Long key = new Long(102);
int index = array.indexSearch(key);
10
11
12
System.out.println("Index␣of␣" + key + ":␣" + index);
13
14
}
}
Listing 8 : ArrayWithIndexSearchTreiber.java
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-49 | 49/461
51. Algorithmen und Datenstrukturen – Kapitel 1
Einführung
Überblick über Algorithmen und Datenstrukturen
1
Datensätze
2
Datenstrukturen
3
Algorithmen
4
Leitfaden für die Lösung von Problemstellungen
5
Einführendes Beispiel
6
Zusammenfassung
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-50 | 50/461
52. Algorithmen und Datenstrukturen – Kapitel 1
Zusammenfassung
Algorithmen und Datenstrukturen
Algorithmen verarbeiten meist eine Menge von Datensätzen.
Diese Datensätze müssen in geeigneter Weise in Datenstrukturen
verwaltet werden.
Algorithmen greifen über die Schnittstellen der Datenstrukturen auf
die Daten zu.
Die Schnittstellen der Datenstrukturen sind selbst wieder Algorithmen.
Fazit:
Algorithmen und Datenstrukturen bilden eine Einheit. Datenstrukturen
verwalten Datensätze und Algorithmen verarbeiten diese. Dabei bedienen
sich die Algorithmen der Schnittstellen der Datenstrukturen, um auf die
Datensätze zugreifen zu können und der Schnittstellen der Datensätze, um
diese zu verarbeiten.
Volker Christian
FH-OÖ – Hagenberg – MTD – ADS
22. Oktober 2013
1-51 | 51/461