Datenstrukturen Mariano Zelke Sommersemester 2012 Datenstrukturen Herausforderungen für Google: I I Systematisches Durchsuchen von Milliarden von Websites Pflegen eines invertierten Index mit allen Schlüsselwörtern I I Beantworten von Suchanfragen I I Finden/Aktualisieren/Löschen von Schlüsselwörtern im Index Webseiten, sortiert nach Page-Rank, Herkunft und Zeit der Anfrage Dynamisches Vorschlagsystem für Suchbegriffe ...unmöglich ohne geschickte Datenstrukturen. Mariano Zelke Datenstrukturen 2/21 Abstrakte Datentypen und Datenstrukturen Ein abstrakter Datentyp besteht aus einer Sammlung von Operationen auf einer Menge von Objekten. Beispiele: 1. ≈ Klasse in C++/Java/ . . . 2. Menge von Zahlen, Operationen: Einfügen, Löschen, Mitgliedschaft testen 3. Filesystem im Computer, Objekte: Dateien und Verzeichnisse Operationen: Dateien/Verzeichnisse erstellen, löschen, umbenennen Eine Datenstruktur ist eine Repräsentation eines abstrakten Datentyps in einem Computer. Datenstrukturen für: 1. Klasse: Repräsentationen der Klasse im Computer 2. Menge: Lineare Liste, sortierte Liste, Bitvektor (bit array), . . . 3. Filesystem: fat16, fat32, ext2, ext3, ext4, hpfs, reiserfs,. . . Mariano Zelke Datenstrukturen 3/21 Warum abstrakte Datentypen? In Anwendungen treten dieselben Operationen für verschiedenste Datenmengen auf. Aber: Gesucht ist eine möglichst effiziente Implementierung! Beispiel: Füge Objekte in eine Menge ein und entferne Objekte daraus geordnet nach ihrem Alter: 1. Wenn immer das jüngste Objekt zu entfernen ist: Verwende Datentyp Stack“, ( Keller“, Stapel“). ” ” ” 2. Wenn immer das älteste Objekt zu entfernen ist: Verwende Datentyp Warteschlange“. ” 3. Wenn Objekte zugeordnete Prioritäten haben und immer das Objekt mit höchster Priorität zu entfernen ist Verwende Datentyp Prioritätswarteschlange“. ” Mariano Zelke Datenstrukturen 4/21 Effiziente Implementierung Membership Eingabe: Menge M positiver ganzer Zahlen mit |M| = n, Zahl z Frage: z ∈ M? Beispiel: Sei M = {12, 3, 22, 8, 1, 7, 15, 4, 6, 19, 11, 16} 1. Repräsentation von M durch ein Array 12 3 22 8 1 7 15 4 6 19 11 16 lookup(z) benötigt im schlechtesten Fall n Schritte. 2. Repräsentation von M durch ein sortiertes Array 1 3 4 6 7 8 11 12 15 16 19 22 lookup(z) mit binärer Suche in ≈ log2 n Schritten. 3. Repräsentation von M durch einen Bitvektor 1 0 1 1 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 lookup(z) in einem Schritt. Mariano Zelke Datenstrukturen 5/21 Inhalt der Vorlesung Entwirf eine möglichst effiziente Datenstruktur für einen gegebenen abstrakten Datentyp. I Welche abstrakten Datentypen? I I I I I Was heißt Effizienz? Minimiere I I I Stack: Einfügen und Entfernen des jüngsten Schlüssels. Warteschlangen: Einfügen und Entfernen des ältesten Schlüssels. Prioritätswarteschlangen: Einfügen und Entfernen des wichtigsten Schlüssels. Wörterbücher: Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche danach. den Speicherplatzverbrauch und die Laufzeiten der einzelnen Operationen. Wie verhalten sich verschiedene Implementierungen bei wachsender Eingabelänge? I Mariano Zelke Führe eine asymptotische Analyse von Laufzeit und Speicherplatzverbrauch durch. Datenstrukturen 6/21 Zusätzlich üben Sie: Analysefähigkeit I was ist das Ziel/die zentrale Idee? I was wird vorausgesetzt? I wie wird vorgegangen? I was ist wesentlich/unwesentlich? I wo genau liegen Unklarheiten? Kommunikationsfähigkeit I exakt und verständlich formulieren I gezielt nachfragen und konstruktiv Ideen entwickeln Selbständiges Arbeiten I sich selber Wissen aneignen (habe ich das wirklich verstanden?) I Literatur- und Materialsuche I Arbeitseinteilung und Selbsteinschätzung Systematisches Arbeiten I was ist die Aufgabe? I wie gehe ich sie an? I wie stelle ich strukturiert und verständlich dar? Worauf wird aufgebaut? I Grundlagen der Programmierung 1: I I Analysis und Lineare Algebra: I I I I Kenntnis der elementaren Datenstrukturen. Logarithmus, Grenzwerte und Matrizen. Diskrete Modellierung: I I Mariano Zelke Graphen, Mathematische Induktion und andere Beweismethoden. Datenstrukturen 8/21 Literatur I Website zur Vorlesung: http://www.tks.informatik.uni-frankfurt.de/teaching/ss12/ds I Skript Datenstrukturen“ von Prof. Schnitger, an dem sich diese ” Vorlesung orientiert. I Beamer-Folien nach der entsprechenden Vorlesung Kapitel 3-5, 10-12 und 18 in T.H. Cormen, C.E. Leiserson, R.L. Rivest und C. Stein: Introduction to Algorithms“, second edition, MIT Press, 2001. ” I M. T. Goodrich, R. Tamassia und D. M. Mount: Data Structures and ” Algorithms in C++“, John Wiley, 2003. I I Kapitel 1-3 in J. Kleinberg und E. Tardos: Algorithm Design“, ” Addison-Wesley, 2005. I Diese und weitere Bücher im Semesterapparat zur VL in der Bibliothek Mariano Zelke Datenstrukturen 9/21 Klausur I Klausur: Freitag, 27.7.12, 9:00 Uhr, H V und H VI im Jügelhaus, Nachklausur: 01.10.12, 9:00 Uhr, H V im Jügelhaus. I Die in den Übungen erreichten Punkte werden mit einem Maximalgewicht von 10% zu den Klausurpunkten hinzu gezählt: Wenn in der Klausur x% und in den Übungen y % erzielt wurden, dann wird z = x + y /10 als Gesamtpunktzahl angerechnet. I Die Note hängt nur von der Gesamtpunktzahl z ab. I Die Klausur ist bestanden, wenn z ≥ 50. Mariano Zelke Datenstrukturen 10/21 Übungen I Heute werden zwei Übungsblätter (0. und 1.) ausgegeben I 0. Übungsblatt: Präsenzübung, keine Abgabe, Besprechung der Aufgaben vom 16.4. bis 27.4., freie Wahl der Übungsgruppe Regulärer Übungsbetrieb für Blatt 1,2,. . . ab 30.4.: I I I I Übungen finden im 2-Wochen-Rhythmus statt, Anmeldung zu Übungsgruppen über LSF bis spätestens 13.4. 11:59 Uhr Jeder Übungszettel wird in der Vorlesung ausgegeben und ist nach 2-wöchiger Bearbeitungszeit vor der Vorlesung zurückzugeben. Bonuspunkte für Klausur werden nur angerechnet, wenn in Übung vorgerechnet wurde I Tipp: Bearbeiten Sie die Übungen gemeinsam. Aber: Formulieren Sie die Lösungen immer selbst! Denn verstehen müssen Sie selbst... I Wir bieten Ihnen gerne unsere Unterstützung an! I Bitte nehmen Sie unbedingt am Übungsbetrieb teil und bearbeiten Sie die Aufgaben, denn... Mariano Zelke Datenstrukturen 11/21 Übungen ... davon hängt maßgeblich der Klausurerfolg ab: Mariano Zelke Datenstrukturen 12/21 Webseite der Veranstaltung http://www.tks.informatik.uni-frankfurt.de/teaching/ss12/ds I wichtige aktuelle Informationen – bitte schauen Sie regelmäßig nach! I Übungsblätter, Informationen zu Bonuspunkten I Logbuch: nach jeder Vorlesung Stichpunkte zum Inhalt I weiteres Material zur Vorlesung I organisatorische Informationen zu den Übungsgruppen, Notengebung, Klausur, . . . Mariano Zelke Datenstrukturen 13/21 Mathematische Grundlagen Mariano Zelke Datenstrukturen 14/21 Die Summe der ersten n Zahlen (kleiner Gauß) n X i = 1 + 2 + ... + n = i=1 n · (n + 1) 2 Beweis: vollständige Induktion P1 nach n 1·(1+1) Induktionsanfang: n = 1 : X i=1 i = 1 = 2 Induktionsschritt: n → n P+ 1: Induktionsannahme: ni=1 i = n·(n+1) 2 Pn+1 Pn n·(n+1) + (n + 1) wegen Ind.-Annahme i=1 i = i=1 i + (n + 1) = 2 = n·(n+1)+2(n+1) 2 = (n+2)·(n+1) 2 = (n+1)·(n+2) 2 t u Als Merkhilfe: ein direktes Argument: n P Auf n×n - Feld zähle die Kästchen auf und unterhalb der Hauptdiagonalen i: i=1 n+ 1 2 3 4 Mariano Zelke ··· n2 −n 2 = n2 +n 2 = n·(n+1) 2 n Datenstrukturen 15/21 Die geometrische Summe n X ai = a0 + a1 + · · · + an = i=0 an+1 − 1 falls a 6= 1. a−1 Beweis: vollständige Induktion n P0 nach i = 1 = a0+1 −1 X Induktionsanfang: n = 0 : a i=0 a−1 Induktionsschritt: n → n + 1 P n+1 Induktionsannahme: ni=0 ai = a a−1−1 Pn+1 i Pn i n+1 = an+1 −1 + an+1 wegen Ind.-Annahme i=0 a = i=0 a + a a−1 = Mariano Zelke an+1 −1+an+2 −an+1 a−1 = an+2 −1 a−1 Datenstrukturen t u 16/21 Rechnen mit Logarithmen Seien a > 1 und x > 0 reelle Zahlen. loga (x) ist der Logarithmus von x zur Basis a und stimmt mit y genau dann überein, wenn ay = x gilt. (a) loga (x · y ) = loga x + loga y . (b) loga (x y ) = y · loga (x). (c) aloga x = x. (d) loga x = (loga b) · (logb x). Was ist 4log2 n ? I log2 n = (log2 4) · (log4 n) mit (d). I 4log2 n = 4(log2 4)·(log4 n) = (4log4 n )log2 4 = nlog2 4 = n2 . Was ist b loga x ? I loga x = (loga b) · (logb x) mit (d). I b loga x = b (loga b)·(logb x) = (b logb x )loga b = x loga b . Mariano Zelke Datenstrukturen 17/21 Binomialkoeffizienten Der Binomialkoeffizient n über k“ ist definiert als ” ( n·(n−1)···(n−k+1) n! n = k!·(n−k)! falls 1 ≤ k ≤ n − 1, 1·2···k := k 1 falls k = 0 oder k = n. 1. Sei S eine Menge von n Elementen. Dann hat S genau kn Teilmengen der Größe k. n P n k n−k 2. Binomischer Lehrsatz: Es gilt (a + b)n = . k a b Also: n P k=0 k=0 n k = 2n : Eine n-elementige Menge hat 2n Teilmengen. 3. Sei Perm(S) die Menge aller Permutationen von S. Dann ist |Perm(S)| = n! Mariano Zelke Datenstrukturen 18/21 Laufzeitmessung Für welchen Rechner (welche Hardware) sollen wir die Laufzeit berechnen? I Analysiere die Laufzeit auf einem abstrakten Rechner: I I I I Der Speicher besteht aus Registern, die eine ganze Zahl speichern können. Eine CPU führt einfache boolesche und arithmetische Operationen aus. Daten werden zwischen CPU und Speicher durch (indirekte) Ladeund Speicherbefehle ausgetauscht. Damit ist die Laufzeitberechnung für unseren abstrakten Rechner gültig, aber wir erhalten für einen speziellen Rechner nur eine bis auf einen konstanten Faktor exakte Schätzung. Also: (Analysierte bzw. geschätzte Laufzeit) = ch ·(tatsächliche Laufzeit) für einen konstanten Wert ch Mariano Zelke Datenstrukturen 19/21 Laufzeitmessung Für welche Programmiersprache und welchen Compiler (welche Software) sollen wir die Laufzeit berechnen? I Wir sollten“ mit einer Assemblersprache arbeiten: Wir sind vom ” Compiler unabhängig und haben es mit einer geringen Anzahl verschiedener Anweisungen zu tun. I Aber die Programmierung ist viel zu umständlich und wir wählen deshalb C++ bzw. Pseudocode. I Wenn wir die Anzahl ausgeführter C++ Befehle zählen, erhalten wir für die tatsächliche Anzahl ausgeführter Assembler Anweisungen nur eine Schätzung, die bis auf einen konstanten Faktor exakt ist. Also: (Analysierte bzw. geschätzte Laufzeit) = cs ·(tatsächliche Laufzeit) für einen konstanten Wert cs Mariano Zelke Datenstrukturen 20/21 Laufzeitmessung Ziel für unsere Laufzeitanalyse kann nur sein, die Laufzeit so abzuschätzen, dass gilt (Analysierte bzw. geschätzte Laufzeit) = ch · cs · (tatsächliche Laufzeit), wobei ch und cs Konstanten sind, die von der tatsächlichen Hard- und Software abhängen. Mariano Zelke Datenstrukturen 21/21