Lösungsvorschläge zur Nachklausur 1661 Datenstrukturen I

Ähnliche Dokumente
Kurs 1661 Datenstrukturen I Klausur am Seite 1. Hinweise zur Bearbeitung der Klausur zum Kurs 1661 Datenstrukturen I

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Datenstrukturen & Algorithmen

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Teil VII. Hashverfahren

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Sortieren II / HeapSort Heaps

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Übung Algorithmen und Datenstrukturen

NAME, VORNAME: Studiennummer: Matrikel:

Suchbäume mit inneren Knoten verschiedener Knotengrade.

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Informatik II, SS 2014

Mehrwegbäume Motivation

Algorithmen und Datenstrukturen 1

Klausur Algorithmen und Datenstrukturen

Lösungsvorschläge zur Hauptklausur 1661 Datenstrukturen I

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Algorithmen und Datenstrukturen

Informatik B Sommersemester Musterlösung zur Klausur vom

Informatik II, SS 2016

Beweis: Die obere Schranke ist klar, da ein Binärbaum der Höhe h höchstens

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Informatik II Prüfungsvorbereitungskurs

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Informatik II Prüfungsvorbereitungskurs

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

Informatik II, SS 2018

Algorithmen und Datenstrukturen Heapsort

Algorithmen und Datenstrukturen

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

Informatik II, SS 2014

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Algorithmen und Datenstrukturen Klausur WS 2006/07 Software-Engineering und Technische Informatik Bachelor

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Klausur Algorithmen und Datenstrukturen

ContainerDatenstrukturen. Große Übung 4

Logische Datenstrukturen

11. Elementare Datenstrukturen

Informatik II Vorlesung am D-BAUG der ETH Zürich

Beispiel zu Datenstrukturen

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen Suchbaum

2. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2006/ April 2007

Algorithmische Geometrie 3. Schnitte von Liniensegmenten

Informatik II, SS 2014

7. Sortieren Lernziele. 7. Sortieren

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

Übung Algorithmen und Datenstrukturen

1 AVL-Bäume. 1.1 Aufgabentyp. 1.2 Überblick. 1.3 Grundidee

Fibonacci-Heaps und deren Anwendung

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Was ist ein assoziativer Speicher?

Dynamische Mengen. Realisierungen durch Bäume

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Algorithmen und Datenstrukturen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

Suchstrukturen. Übersicht. 8 Suchstrukturen. Allgemeines. H. Täubig (TUM) GAD SS

4. Sortieren 4.1 Vorbemerkungen

Vorlesung Datenstrukturen

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 15. Jan Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 10

Datenstrukturen und Algorithmen. Vorlesung 8

Algorithmen und Datenstrukturen 12

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Aufgabe 1 O-Notation (2+3+5=10 Punkte)

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Algorithmen und Datenstrukturen I AVL-Bäume

13. Bäume: effektives Suchen und Sortieren

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmen & Datenstrukturen. 3. Suchen

Datenstrukturen und Algorithmen D-INFK

Übung: Algorithmen und Datenstrukturen SS 2007

Programmiertechnik II

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Informationssysteme SS 2013 Lösungsvorschläge zu Übungsblatt 2. Übungsblatt 2. Für die Übungen in der Woche vom 29. April bis 03.

Algorithmische Geometrie: Schnittpunkte von Strecken

Übung Datenstrukturen. Bäume

Algorithmen und Datenstrukturen 1

Vorlesung Datenstrukturen

Motivation Binäre Suchbäume

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Transkript:

Lösungsvorschläge zur Nachklausur 1661 Datenstrukturen I 18.9.2010 2010 FernUniversität in Hagen Alle Rechte vorbehalten

Seite 2 Lösungsvorschläge zur Klausur vom 18.9.2010 Kurs 1661 Datenstrukturen I Aufgabe 1 (a) algebra dvd_collection sorts card, movie, dvd, collection ops createmovie : string set(string) card movie createdvd : int set(movie) dvd createcollection : collection getname : movie string getdirectors : movie set(string) getruntime : movie int insertdvd : collection dvd collection containsmovie : collection string bool singlemovies : collection set(movie) longdvds : collection card set(dvd) moviesof : collection string set(movie) avgruntimeof : collection string real Zusätzlich definieren wir uns noch: dvdcontainsmovie : dvd string bool (b) sets card = {x int x 0 } movie = string set(string) card dvd = card set(movie) collection = { C set(dvd) x, x C: x x' x.ean x.ean } (c) functions createmovie(name, directors, runtime) = (name, directors, runtime) createdvd(ean, movies) = (EAN, movies) createcollection = Ø getname((name, directors, runtime)) = name getdirectors((name, directors, runtime)) = directors getruntime((name, directors, runtime)) = runtime insertdvd(coll, d) = coll falls x : member( coll, x) x. EAN = d. EAN insert( coll, d) sonst dvdcontainsmovie( (EAN, movies), name ) = {m movies m.name = name } > 0 containsmovie(coll, mov) = {d coll : dvdcontainsmovie(d, mov)} >0 singlemovies(coll) = { m d coll : size(d.movies) = 1 contains(d.movies, m) }

Kurs 1661 Datenstrukturen I Lösungsvorschläge zur Klausur vom 18.9.2010 Seite 3 longdvds(coll, duration) = { d coll Σ m d.movies m.runtime > duration } moviesof(coll, name) = { k d coll: contains(d.movies, k) contains(k.directors, name) } avgruntimeof(coll, name) = m moviesof ( coll, name) m. runtime moviesof ( coll, name) Aufgabe 2 Für jede richtige Antwort erhalten Sie 0,25 Punkte. Für jede falsche einen entsprechenden Abzug! (a) Der Datentyp Dictionary dient der Darstellung von Mengen und stellt die Operationen Insert (Einfügen), Delete (Löschen) und Member (Find, Suchen, Enthält) zur Verfügung. (b) Mögliche und akzeptierte Implementierungen für Dictionaries aus dem Kurstext und deren worst-case-laufzeiten sind: Implementierung insert delete member Ungeordnete Liste mit Duplikateliminierung O(1) O(n) O(n) O(n) O(n) O(n) Geordnete Liste O(n) O(n) O(n) Sequentiell geordnete Liste im Array O(n) O(n) O(log n) Bitvektor O(1) O(1) O(1) Hashtabelle O(n) O(n) O(n) Binärer Suchbaum O(n) O(n) O(n) AVL-Baum O(log n) O(log n) O(log n) Vielweg-Suchbaum O(n) O(n) O(n) B-Baum O(log n) O(log n) O(log n)

Seite 4 Lösungsvorschläge zur Klausur vom 18.9.2010 Kurs 1661 Datenstrukturen I Aufgabe 3 Im Folgenden finden Sie die Berechnung der erforderlichen Hashwerte h i (i): Name Wert h(x) h 1 (x) h 2 (x) h 3 (x) h 4 (x) Karl 30 0 Barbara 21 1 Boris 35 5 Anton 35 5 6 Karla 30 0 1 4 Katrin 32 2 Peter 41 1 2 5 0 7 Diana 14 4 5 8 Daraus ergibt sich folgende finale Hashtabelle: Behälternr. Name Behälternr. Name 0 Karl 5 Boris 1 Barbara 6 Anton 2 Katrin 7 Peter 3 8 Diana 4 Karla 9 Aufgabe 4 Der initiale Heap lautet: 12 19 31 35 56 42 75 42 68 87 77

Kurs 1661 Datenstrukturen I Lösungsvorschläge zur Klausur vom 18.9.2010 Seite 5 Nach Einfügen der 12 in die sortierte Folge und Einsinkenlassen der 77 ergibt sich folgendes Bild: 19 Folge: 12 35 31 42 56 42 75 77 68 87 Im nächsten Schritt erhält man: 31 Folge: 19, 12 35 42 42 56 87 75 77 68 Nach Übertragen der 31 in die sortierte Folge haben wir: 35 Folge: 31, 19, 12 42 42 68 56 87 75 77

Seite 6 Lösungsvorschläge zur Klausur vom 18.9.2010 Kurs 1661 Datenstrukturen I Dann erhalten wir: 42 Folge: 35, 31, 19, 12 42 75 68 56 87 77 Nun ergibt sich: 42 Folge: 42, 35, 31, 19, 12 56 75 68 77 87 Nach Verarbeitung der zweiten 42 erhalten wir: 56 Folge: 42, 42, 35, 31, 19, 12 68 75 87 77 Danach wird die 56 in die sortierte Folge aufgenommen: 68 Folge: 56, 42, 42, 35, 31, 19, 12 77 75 87 Nach Einsinkenlassen der 87 ergibt sich folgendes Bild: 75 Folge: 68, 56, 42, 42, 35, 31, 19, 12 77 87

Kurs 1661 Datenstrukturen I Lösungsvorschläge zur Klausur vom 18.9.2010 Seite 7 Nach dem nächsten Schritt sehen Heap und Folge wie folgt aus: 77 Folge: 75, 68, 56, 42, 42, 35, 31, 19, 12 87 Dann erhalten wir: 87 Folge : 77, 75, 68, 56, 42, 42, 35, 31, 19, 12 Damit endet der Algorithmus.

Seite 8 Lösungsvorschläge zur Klausur vom 18.9.2010 Kurs 1661 Datenstrukturen I Aufgabe 5 (a) Der Baum ist von der Ordnung 1, denn es gibt in ihm einen Blattknoten, der nicht gleichzeitig Wurzel ist und nur einen Schlüssel enthält. (b) Beim Löschen von 80 tritt ein Unterlauf ein (merge): 43 43 29 56 72 29 56 21 30 59 21 30 59 72 Zum Löschen von 43 (Wurzel) vertauschen wir zunächst das kleinste Element, das größer ist als 43 aus dem entsprechenden Sohn die mit dem zu löschenden Element. Dann löschen wir die 43 rekursiv aus dem entsprechenden Teilbaum. Dabei wird eine Rebalancierung erforderlich (balance): 29 56 29 59 21 30 59 72 21 30 56 72 Nun löschen wir die 21. Es entsteht ein Unterlauf, der sich bis in die Wurzel fortsetzt (Behandlung durch zweimaliges merge): 29 59 59 30 56 72 29 30 56 72 59 29 30 56 72

Kurs 1661 Datenstrukturen I Lösungsvorschläge zur Klausur vom 18.9.2010 Seite 9 (c) Die Schlüssel 21 und 59 werden direkt in die Wurzel eingefügt. Beim Einfügen von 30 wird eine Overflow-Behandlung erforderlich (Betroffene Knoten werden mit markiert): 21 30 59 21 59 29 und 56 können leicht eingefügt werden. Der nächste Overflow tritt beim Einfügen von 80 auf: 30 21 29 56 59 80 Weiter geht es mit dem Einfügen von, beim Einfügen von 43 tritt ein sich nach oben fortsetzender Überlauf auf (erst im mittleren Blatt, dann in der Wurzel): 30 59 30 59 21 29 43 56 80 21 29 43 56 80 30 30 59 21 29 56 80 30 59 21 29 43 56 80 Das Einfügen von 72 bereitet keine Probleme mehr. Wir erhalten: 30 59 21 29 43 56 72 80

Seite 10 Lösungsvorschläge zur Klausur vom 18.9.2010 Kurs 1661 Datenstrukturen I Aufgabe 6 (a) Es wird das Verfahren des parallelen Durchlaufs verwendet. Dabei werden beide Mengendarstellungen etwa in aufsteigender Schlüsselfolge durchlaufen. Man positioniert je einen Zeiger auf den jeweils kleinsten in jeder Menge enthaltenen Schlüssel. Die Zeiger referenzieren den jeweils aktuellen Schlüssel in beiden Mengen. Wiederhole, solange beide Mengen noch nicht-behandelte Schlüssel enthalten: Vergleiche beide referenzierten Schlüssel. Sind beide gleich, so gib den Schlüssel einmal aus und rücke beide Zeiger vor zum jeweils nächstgrößeren Schlüssel. Ist ansonsten einer der beiden aktuellen Schlüssel kleiner als der andere, so lasse den entsprechenden Zeiger auf den nächstgrößeren Schlüssel vorrücken (Alternativ, falls dies die Darstellung unterstützt: Rücke zum kleinsten Schlüssel in dieser Menge vor, der größer oder gleich dem aktuellen Schlüssel der anderen Menge wird). Das Verfahren hat eine worst-case Zeitkomplexität von O(n + m), wobei n und m die Kardinalitäten der beiden Eingabemengen sind. Begründung: Generell muss man bei sequentiellem Durchlaufen einer Menge jedes Element einmal betrachten. Daraus ergibt sich direkt die Laufzeit O(n + m). Falls die Datenstruktur Sprünge erlaubt, etwa weil sie hierarchisch organisiert ist (etwa beim B-Baum oder anderen Suchbäumen), kann man zumindest näherungsweise im average-case auch O(e) erzielen, wobei e die Kardinalität der Ergebnismenge ist. Dies gilt insbesondere, wenn e im Vergleich zu n und m klein ist. Begründung: Tote Bereiche zwischen zwei Schlüsseln kann man auf einer der oberen Hierarchieebenen schnell überspringen, ohne darunterliegende Schlüssel inspizieren zu müssen. Es ergeben sich jedoch trotz allem mindestens e = O(max(n, m)) = O(n + m) Halte bei übereinstimmenden Schlüsseln. (b) Man verwendet einen Stack (Stapel-/Kellerspeicher) oder eine vergleichbare Datenstruktur, etwa list 2 aus dem Kurstext. Die Platzkomplexität ist sowohl im best-case, worst-case, also auch average-case immer O(log b n) = O(log n), da maximal ein kompletter Pfad von der Wurzel zu einem Blatt enthalten ist. (c) Der Iterator verwendet als interne Datenstruktur einen Stack. Dieser verwaltet die als nächstes noch zu besuchenden Schlüssel für jede Ebene oberhalb der gerade betrachteten in Form von Paaren (Knotenreferenz, Schlüsselnummer). Bei der Initialisierung des Iterators durch init(t) laufen wir von der Wurzel des B-Baums t bis zum Blatt mit dem kleinsten Schlüssel (ganz links außen) und legen Paare (s, 1) für alle dabei erreichten oder passierten Knoten in Besuchsreihenfolge auf den Stack; s ist dabei eine Referenz auf den jeweiligen Knoten im B-Baum t, 1 die Schlüsselnummer des in diesem Knoten als nächstes zu besuchenden Schlüssels (nämlich des ersten). Jeder Knoten enthält h {1,,2b} Schlüssel mit den Indizes 1 bis 2b sowie h + 1 Teilbäume mit den Indizes 0 bis h.

Kurs 1661 Datenstrukturen I Lösungsvorschläge zur Klausur vom 18.9.2010 Seite 11 next() funktioniert wie folgt: Falls der Stack leer ist, wird NULL zurückgegeben. Ansonsten wird das oberste Paar p =(s, k) vom Stack geholt. Nun wird die Ausgabe zwischengespeichert: out := s.key[k]. Falls s noch größere Schlüssel als out enthält wird (s, k + 1) auf den Stack gelegt. Dann läuft man im Teilbaum s.sons[k] bis ins äußerste linke Blatt und legt für alle dabei besuchten Knoten s i Einträge (s i, 1) in Besuchsreihenfolge auf den Stack. Nun wird noch out ausgegeben. Falls s keine größeren Schlüssel als out enthält, gib einfach out aus. (d) Verfahren: Wir verwenden einen parallelen Durchlauf durch beide B-Bäume. Dazu verwenden wir für jeden B-Baum einen in Teilaufgabe (c) beschriebenen Iterator. Für jeden B-Baum wird ein Iterator initialisiert und das in der Lösung zu Teilaufgabe (a) beschriebene Verfahren (ohne Sprünge) angewandt. Platzaufwand für Hilfsstrukturen: Die Iteratoren verwenden Stacks mit einer Höhe, die der der B-Bäume entspricht, also etwa O(log b n) und O(log b m), zusammen O(log b n +log b m) = O(log n +logm). Zeitaufwand: Der Aufruf von init für die B-Bäume benötigt offensichtlich O(log b n) und O(log b m), zusammen O(log b n +log b m) Zeit. Für jedes Element wird genau einmal next() aufgerufen und ein Schlüsselvergleich durchgeführt. Die Gesamtlaufzeit für alle next()-aufrufe ist O(n) + O(m), denn für jeden Schlüssel wird genau zweimal der Stack aktualisiert (in jeweils O(1) Zeit). Der Gesamtzeitaufwand für intersection ist also O(n + m). Aufgabe 7 Deckblatt Hier erhalten Sie den Punkt, wenn Sie beide Klausurdeckblätter korrekt und vollständig ausgefüllt haben, also Namen, Matrikelnummer und Adresse korrekt eingetragen und genau diejenigen Aufgaben markiert haben, die Sie auch bearbeitet haben.