Your SlideShare is downloading. ×
  • Like
Algorithmen und Datenstrukturen - Kapitel 1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Algorithmen und Datenstrukturen - Kapitel 1

  • 197 views
Published

 

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
197
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 15. Algorithmen und Datenstrukturen – Kapitel 1 Datensätze Beispiel: Telefonbucheintrag 1 2 3 4 5 6 public class TelephoneBookEntry { protected String name; protected String surName; protected String city; protected String street; protected String[] phoneNumbers; 7 8 public TelephoneBookEntry(String name, String surName, String city, String street, ← String[] phoneNumbers) { this.name = name; this.surName = surName; this.city = city; this.street = street; this.phoneNumbers = phoneNumbers.clone(); } 9 10 11 12 13 14 15 16 public String getName() { return name; } 17 18 35 public void setName(String name) { this.name = name; } } Listing 1 : TelephoneBookEntry.java Volker Christian FH-OÖ – Hagenberg – MTD – ADS 22. Oktober 2013 1-14 | 14/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