Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WS12/13 -- Basisinformationstechnologie I | 11: Algorithmen und Datenstrukturen

Jan Wieners
January 15, 2013

WS12/13 -- Basisinformationstechnologie I | 11: Algorithmen und Datenstrukturen

Jan Wieners

January 15, 2013
Tweet

More Decks by Jan Wieners

Other Decks in Education

Transcript

  1. Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // [email protected]

    Basisinformationstechnologie I Wintersemester 2012/13 16. Januar 2013 – Algorithmen und Datenstrukturen
  2. Datenstrukturen  Stack / Kellerspeicher  Queue  Liste 

    Baum  Traversierungsarten Such- und Sortieralgorithmen  Lineare Suche  Binäre Suche  Bubble Sort Themenüberblick „Algorithmen und Datenstrukturen“
  3. Zentrales Konzept: Objekt Objekt  Verfügt über einen bestimmten Zustand

     Reagiert mit einem definierten Verhalten auf Anforderungen / seine Umgebung  Besitzt eine Identität, die es von anderen Objekten unterscheidet  Kann mit anderen Objekten verbunden sein Objektorientierte Programmierung
  4. Klassen  Eine Klasse definiert für eine Menge von gleichartigen

    Objekten deren Struktur (Attribute), Verhalten (Operationen) und Beziehungen.  Stellt den Bauplan dar, nach dem die Objekte gestaltet sind und nach dessen Vorgaben sie sich verhalten  Machen‘s möglich, mehrere Daten (und ihre Zugriffsfunktionen) zusammenzufassen, um einen eigenen Datentyp zu modellieren: Objektorientierte Programmierung
  5. Zentrales Konzept: Kapselung  Information Hiding  Objekte und Funktionen,

    die mit der Klasse arbeiten, erhalten nur Informationen über die für sie relevanten Teile der Klasse  Der Zugriff auf die Membervariablen der Klasse wird verborgen und möglich gemacht über entsprechende Methoden der Klasse (Memberfunktionen) Objektorientierte Programmierung
  6. Algorithmus: Eindeutige Beschreibung eines endlichen Verfahrens zur Lösung einer bestimmten

    Klasse von Problemen Komplexität eines Algorithmus: Bedarf an Ressourcen (i.e. Rechenzeit und Speicherplatz) Güte eines Algorithmus:  Qualität der Ergebnisse  Laufzeit / Rechenbedarf des Algorithmus Algorithmen, Datenstrukturen
  7. Datentyp:  Bauplan für eine Variable (benannte Speicherstelle im Arbeitsspeicher

    des Rechners)  Legt fest, welche Operationen mit einer Variable möglich sind  Bestimmt die interne Darstellung (Repräsentation) der Variablen im Rechner  Z.B. bool, int, float, double, unsigned int, etc. Algorithmen, Datenstrukturen
  8. Datenstruktur = Daten + Funktionen Datenstrukturen:  Stacks (Stapel) 

    Queues  Listen  Einfach verkettete Listen  Doppelt verkettete Listen  Bäume  Binärbäume Algorithmen, Datenstrukturen
  9. Datenstruktur „Stack“  Auch: „Kellerspeicher“  Abstrakter Datentyp, bei dem

    Elemente eingefügt und wieder entfernt werden können LIFO-Prinzip: Last In, First Out – bei der Datenstruktur „Stack“ kann immer nur auf das Element zugegriffen werden, das als letztes eingefügt, d.h. auf den Stapel gelegt wurde
  10. Typische Stackoperationen / Schnittstellen  push(x, s) legt ein Element

    x auf den Stack s  top(s) liefert das zuletzt auf den Stack s gelegte Element (ohne das entsprechende Element zu entfernen)  pop(s) entfernt das zuletzt auf den Stack s gelegte Element und gibt es zurück  isEmpty(s) gibt an, ob der Stack s leer ist Datenstruktur Stack
  11. Leerer Stack mit dem Namen audiocdstapel  Prüfen, ob Stack

    leer über Funktion isEmpty(audiocdstapel)  gibt TRUE zurück Datenstruktur Stack: Die Praxis
  12. Schritt I: Element auf den Stapel legen  push 

    push(„boards of canada – music has the right to children“, audiocdstapel) Datenstruktur Stack: Die Praxis Stack „audiocdstapel“ vor push(…) Stack „audiocdstapel“ nach push(…)
  13. Schritt II: Zahlreiche push-Vorgänge später:  push(„Boards of Canada –

    Music has the right to children“, audiocdstapel)  push(„Clark – Iradelphic“, audiocdstapel)  …  Push(„Alt-J – An Awesome Wave“, audiocdstapel) Datenstruktur Stack: Die Praxis
  14. Schritt III: Prüfen, welche CD zuletzt auf den Stapel gelegt

    wurde  top  top(audiocdstapel)  gibt „Alt-J – An Awesome Wave“ zurück. Datenstruktur Stack: Die Praxis
  15. Schritt IV: Letztes Stapelelement ausgeben und von Stapel nehmen 

    pop  pop(audiocdstapel)  gibt „ Alt-J – An Awesome Wave“ zurück. Stapel nach pop(audiocdstapel): Datenstruktur Stack: Die Praxis
  16. Anwendungsbeispiel Pseudocode: Gehe den Stapel durch und suche nach einer

    CD while( !isEmpty(audiocdstapel) ) { currentaudiocd=pop(audiocdstapel); if(currentaudiocd == mycd) { print „CD gefunden“; return currentaudiocd; } } Datenstruktur Stack: Die Praxis
  17. Queue, auch „Warteschlange“  geordnete Liste, in der alle Einfügungen

    an einem Ende und alle Löschungen am entgegengesetzten Ende stattfinden Operationen:  enQueue  Objekt hinzufügen  deQueue  Objekt zurückgeben, anschließend entfernen Queue
  18. FIFO  First In, First Out  Beispiele: Druckerwarteschlange, Warteschlange

    im Supermarkt   „Wer zuerst da ist, mahlt zuerst“ Queue
  19. Stacks / Queues: Elemente dürfen nur am Anfang oder am

    Ende eingefügt bzw. entnommen werden Nachteil Stack / Queue: Sollen beliebige Elemente an beliebiger Stelle eingefügt oder gelöscht werden, wird‘s bei sequentieller Eintragung recht aufwändig Lösung Liste: Folge von Elementen, in der an beliebiger Stelle neue Elemente eingefügt oder vorhandene Elemente entfernt werden können Contra Stack / Queue
  20. Liste  Folge von Elementen; jedes Element = Teil einer

    Kette Jeder Eintrag in der Liste verfügt nicht nur über seinen Inhalt, sondern darüber hinaus über einen Zeiger auf das nächste Listenelement: Einfach verkettete Liste
  21. Um die Liste zu durchlaufen:  Beginn beim ersten Element

    („Anker“ für den Beginn der Liste)  „next“ zeigt auf das nächste Listenelement  Letztes Glied der Kette: next-Zeiger = NULL  Um wieder auf das erste Element zugreifen zu können: anfang-Zeiger auf das erste Element der Liste  Hilfszeiger auf innere Elemente: cursor Einfach verkettete Liste
  22. Element Einfügen:  Ursprüngliche Liste:  Liste nach Einfügen von

    Element „mat“ Einfach verkettete Liste bat cat sat vat NULL start bat cat sat vat NULL start mat
  23. Element Löschen:  Ursprüngliche Liste:  Liste nach Entfernen des

    Elements „cat“ Einfach verkettete Liste bat cat sat vat NULL start bat cat sat vat NULL start
  24. Vorteil:  Elemente lassen sich sehr schnell am Anfang der

    einfach verketteten Liste einfügen Nachteil:  Über jedes einzelne Element muss iteriert werden Einfach verkettete Liste bat cat sat vat NULL start
  25. Charakteristika: Jedes Element verfügt über  Einen Inhalt  Einen

    Zeiger auf das nachfolgende Element  Einen Zeiger auf das vorhergehende Element Vorteile  Möglichkeit, vom Ende der Liste zum Beginn zu iterieren  Schnelles Löschen und Einfügen von Elementen Nachteil  Speicherplatzbedarf durch zweiten Zeiger erhöht Doppelt verkettete Liste bat cat sat vat NULL start
  26. Datenstrukturen √  Stack / Kellerspeicher √  Queue √

     Liste √  Baum  Traversierungsarten  Such- und Sortieralgorithmen Themenüberblick „Algorithmen und Datenstrukturen“
  27. Baum = Menge von Knoten und Kanten, die besondere Eigenschaften

    aufweisen:  Wurzel: Jeder Baum besitzt genau einen Knoten, der als Wurzel bezeichnet wird  Kante: Jeder Knoten ist außer der Wurzel durch genau eine Kante mit seinem Vaterknoten (auch: „Elternknoten“ oder „Vorgänger“) verbunden  Wird dann auch als Kind (Sohn, Nachfolger) dieses Knotens genannt  Blatt: Ein Knoten ohne Kinder  Innere Knoten: Alle anderen Knoten Kleine Baumschule
  28. Traversieren  Jeden Knoten des Baumes besuchen Reihenfolge, in der

    die Knoten besucht werden:  Preorder, auch: „Hauptreihenfolge“ / Tiefensuche  Inorder, auch: „symmetrische Reihenfolge“  Postorder, auch: „Nebenreihenfolge“  Levelorder, auch: „Breitensuche“ Traversierung
  29. Rekursive Regel:  besuche die Wurzel  Besuche den linken

    Unterbaum  Besuche den rechten Unterbaum  WLR Preorder Traversierung Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Depth-First-Search.gif&filetimestamp=20090326120256 (MRE)
  30. Preorder Traversierung – Schritt 4 P M S A A

    L E T R E E Ausgabe: P M S A
  31. Preorder Traversierung – Schritt 5 P M S A A

    L E T R E E Ausgabe: P M S A A
  32. Preorder Traversierung – Schritt 6 P M S A A

    L E T R E E Ausgabe: P M S A A L
  33. Preorder Traversierung – Schritt 7 P M S A A

    L E T R E E Ausgabe: P M S A A L E
  34. Preorder Traversierung – Schritt 8 P M S A A

    L E T R E E Ausgabe: P M S A A L E R
  35. Preorder Traversierung – Schritt 9 P M S A A

    L E T R E E Ausgabe: P M S A A L E R T
  36. Preorder Traversierung – Schritt 10 P M S A A

    L E T R E E Ausgabe: P M S A A L E R T E
  37. Preorder Traversierung – Schritt 11 P M S A A

    L E T R E E Ausgabe: P M S A A L E R T E E
  38. Knotenbeziehungen  Achsen:  Elternknoten (parent) – Jedes Element verfügt

    über einen Elternknoten. Ausnahme: ???  Vorfahre (ancestor) – Elternknoten von Knoten Beispiel: Der Knoten „2“ ist Vorfahre des Knotens „3“.  Kind (child) – Untergeordnete Knoten Beispiel: „3“ ist Kindknoten von „2“.  Geschwister (siblings): Knoten mit gleichen Elternknoten sind Geschwisterknoten. Beispiel: Der Knoten „3“ ist Geschwisterknoten des Knotens „4“. Bäume und die Praxis: XPath: Navigation 1 2 5 6 3 4
  39. Datenstrukturen √  Stack / Kellerspeicher √  Queue √

     Liste √  Baum √  Traversierungsarten √  Preorder √  Inorder √  Postorder √  Levelorder √ Such- und Sortieralgorithmen Themenüberblick „Algorithmen und Datenstrukturen“
  40. Problemstellung: Wie finden wir eine gesuchte Audio CD? Umgebungsvariablen: 

    CD-Sammlung ist unsortiert ODER  Sortierte CD-Sammlung Problemstellung Suche
  41. Sequenzielle / Lineare Suche in unsortierter Sammlung: Anzahl Suchvorgänge bei

    n Elementen:  minimal: 1(best case),  maximal: n (worst case)  Durchschnittlich müssen die Hälfte der Einträge durchgesehen werden, um das gewünschte Element zu finden (average case)  Anzahl der Suchschritte steigt proportional mit der Anzahl der Einträge Lineare Suche Quelle und Bildnachweis: http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo1.php
  42. Sortierstrategien / -Verfahren:  Insertionsort: Sortieren durch Einfügen  Analog

    dem Vorgehen eines Kartenspielers: Neue Karten werden einzeln einsortiert, bevor die nächste Karte aufgenommen wird  Bubblesort: Vergleichsbasierter Sortieralgorithmus  Heapsort  Quicksort (von C.A.R. Hoare) Sortieralgorithmen
  43. Bubblesort: Sortiert z.B. ein Array von Datensätzen durch wiederholtes Vertauschen

    von Nachbarfeldern, die in falscher Reihenfolge stehen Wird so lange wiederholt, bis das Array vollständig sortiert ist. Dabei wird das Array in mehreren Durchgängen von links nach rechts durchwandert. Bei jedem Durchgang werden alle Nachbarfelder verglichen und ggf. vertauscht. Nach dem 1. Durchgang hat man folgende Situation:  Das größte Element ist ganz rechts.  Alle anderen Elemente sind zwar zum Teil an besseren Positionen (also näher an der endgültigen Position), im Allgemeinen aber noch unsortiert. Wandern des größten Elementes nach rechts  Aufsteigen von Luftblasen: Größte Luftblase steigt nach oben Bubblesort
  44. Zu sortieren ist die Zahlenfolge 55 07 78 12 42

    (vgl. http://de.wikipedia.org/wiki/Bubblesort) 1. Durchlauf: 55 07 78 12 42 07 55 78 12 42 07 55 78 12 42 07 55 12 78 42 ? ? ? Bubblesort
  45. Zu sortieren ist die Zahlenfolge 55 07 78 12 42

    (vgl. http://de.wikipedia.org/wiki/Bubblesort) 2. Durchlauf: 07 55 12 42 78 07 55 12 42 78 07 12 55 42 78 07 12 42 55 78 07 12 42 55 78 3. Durchlauf: 07 12 42 55 78 07 12 42 55 78 07 12 42 55 78 07 12 42 55 78  Fertig sortiert. Bubblesort
  46. Binäre Suche in sortierter Sammlung:  Gegebenheiten: Suchschlüssel und sortierte

    Liste von Einträgen  Start der Suche bei mittlerem Eintrag; Vergleich des Suchschlüssels mit dem Eintrag  Ist der gesuchte Eintrag gefunden, so ist die Suche beendet  Ansonsten: Suche in der linken oder der rechten Hälfte der Einträge - je nachdem, ob der gelesene Schlüssel größer oder kleiner war als der Suchschlüssel  Verfahren so lange, bis der Eintrag gefunden ist oder bis keine Halbierung des Suchraums mehr möglich ist (d.h. man ist an der Stelle angekommen, an der der Eintrag eigentlich stehen müsste). Binäre Suche Quelle und Bildnachweis: http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo1.php
  47. Leistung: Wie viele Suchschritte müssen wir vollziehen, um den gewünschten

    Eintrag zu finden?  Beim ersten Suchvorgang halbieren wir die Menge der Einträge  Beim zweiten Suchvorgang halbieren wir die (halbierte) Menge der Einträge erneut  Komplexität: Wir benötigen log2(n) Suchvorgänge, um in einem Array mit n Einträgen das gewünschte Element zu finden Binäre Suche
  48. /