Klausur zu Informatik II

Ähnliche Dokumente
Programmiertechnik II

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Vorname:... Matrikel-Nr.:... Unterschrift:...

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

Informatik II Greedy-Algorithmen

Informatik I Einfache Datenstrukturen

EndTermTest PROGALGO WS1516 A

Algorithmen & Datenstrukturen 1. Klausur

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Suchen und Sortieren (Die klassischen Algorithmen)

"Einführung in die Programmierung" Krefeld, den 24. September 2013

Programmierung I Einführung in Python, Beyond the Basics

13. Binäre Suchbäume

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

Sortierverfahren für Felder (Listen)

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

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Fakultät Wirtschaftswissenschaft

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

DAP2-Klausur

Datenstrukturen & Algorithmen

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

16. All Pairs Shortest Path (ASPS)

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Tutorium Algorithmen & Datenstrukturen

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Einführung in die Informatik 1

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Programmieren I. Kapitel 7. Sortieren und Suchen

Kap. 4.2: Binäre Suchbäume

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Prüfung Software Engineering II (IB)

Algorithmen mit Python

Suchen in Listen und Hashtabellen

Codes und Informationsgehalt

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Algorithmen und Datenstrukturen Suchbaum

TheGI 1: Grundlagen und algebraische Strukturen Prof. Dr.-Ing. Uwe Nestmann Februar Schriftliche Leistungskontrolle (EK)

MATHEMATISCHE ANALYSE VON ALGORITHMEN

Bearbeitungszeit: 120 Minuten. Kommentare kosten Zeit; kommentieren Sie ihr Programm nur da, wo der Code alleine nicht verständlich wäre.

Datenstrukturen und Algorithmen

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Approximationsalgorithmen

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Suchen und Sortieren Sortieren. Heaps

Informatik II Einfache Datenstrukturen

Prozesse und Scheduling

Kapiteltests zum Leitprogramm Binäre Suchbäume

Klausur zur Vorlesung Grundlagen der Betriebssysteme WS 2011 / 2012

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen

Laufzeit und Komplexität

Vorkurs Informatik WiSe 15/16

Kostenmaße. F3 03/04 p.188/395

Programmierkurs Java

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Vorname: Nachname: Matrikelnummer: -Addresse: Studiengang (bitte genau einen ankreuzen): Master of SSE Erasmus Sonstige:

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in die Programmierung, WS 14/15 Übungsleiter: Sebastian Ebers Aufgabenblatt 2

Überblick. Lineares Suchen

Sortierte Folgen 250

Hardware/Software-Codesign

Über Arrays und verkettete Listen Listen in Delphi

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Vertraulich. Nachname: Vorname: Matrikel-Nummer: Studiengang: Datum: 30. Januar 2015

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Entwurf von Algorithmen - Kontrollstrukturen

Algorithmen und Datenstrukturen

Ergebnisse der Untersuchung zur Eignung einer Programmiersprache für die schnelle Softwareentwicklung kann der Informatikunterricht davon profitieren?

5. Tutorium zu Programmieren

Semestralklausur zu Modellierung verteilter Systeme

SOI Die Schweizer Informatikolympiade

Kapitel 5: Dynamisches Programmieren Gliederung

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. SS 06

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

KV Software Engineering Übungsaufgaben SS 2005

Beispiel 19. December 4, 2009

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Übung zur Algebra WiSe 2008/2009, Blatt 1

Schulinternes Curriculum im Fach Informatik

Aufgabe 3: Übersetzen Sie die folgenden natürlich-sprachlichen Aussagen in die Sprache der

Name: Klausur Programmierkonzepte SS 2011

Transkript:

Prof. G. Zachmann Dipl.-Inf. D. Mainzer TU Clausthal Institut für Informatik Klausur zu Informatik II Sommersemester 2010 V/X/MMX, 14 00 15 00 Name:......................... Matrikelnummer:......................... Vorname:......................... Studiengang:......................... Semesterzahl:......................... E-Mail:............................................................................. Bitte in Druckschrift ausfüllen. Hinweise: (GENAU DURCHLESEN!) Neben Papier und Schreibutensilien sind keine weiteren Hilfsmittel erlaubt. Verwenden Sie keine roten Stifte und keine Bleistifte. Vergessen Sie nicht, Ihren Namen und die Matrikelnummer auf jedes Blatt zu schreiben. Blätter ohne diese Angaben werden nicht gewertet. Schreiben Sie Ihre Lösungen auf die Aufgabenblätter möglichst in die dafür vorgesehenen Felder. Sie können auch die Rückseiten verwenden. Weiteres Schreibpapier kann von den Betreuern angefordert werden. Benutzen Sie kein mitgebrachtes Papier. Bei Multiple-Choice-Fragen gibt es für jedes richtig gesetzte Kreuz einen Punkt. Für jedes falsch gesetzte Kreuz wird ein halber Punkt abgezogen! Nicht beantwortete Fragen werden nicht gewertet. Die Gesamtpunktzahl beträgt mindestens 0. Bitte schreiben Sie in Ihrem eigenen Interesse deutlich. Für nicht lesbare Lösungen können wir keine Punkte vergeben. Klausurblätter dürfen nicht voneinander getrennt werden. Werden mehrere unterschiedliche Lösungen für eine Aufgabe abgegeben, so wird die Aufgabe nicht gewertet. Im Fall von Täuschungsversuchen wird die Klausur sofort mit 0 Punkten bewertet. Eine Vorwarnung erfolgt nicht. Aufgabe 1 2 3 4 5 6 7 8 9 max. Punkte 4 7 7 7 6 10 4 8 1 54 erreicht 1

4 Punkte Name:............................... ( 4 x 1 ) 1 Matrikel-Nr.:............................... Σ:... Datenstrukturen Geben Sie jeweils eine Datenstruktur an, die geeignet ist, um folgende Aufgaben schnell zu lösen. a) Sie sollen ein invertiertes Telefonbuch speichern, d.h., mit Ihrer Datenstruktur soll es effizient möglich sein, zu gegebener Telefonnummer den Namen zu finden. Achtung: Ihr Speicher ist knapp, aber die Telefonnummern bestehen aus vielen Ziffern und sind nicht dicht im Wertebereich! (D.h., ein simples Array ist keine Lösung.) Hash-Tabelle oder auch Patricia-Trie b) In Firmen wird meist derjenige Angestellte zuerst entlassen, der als letzter eingestellt wurde, wenn die Zeiten schlechter werden. (Ob das ein gutes Kriterium ist, sei hier dahingestellt.) In welcher Datenstruktur sollten die Angestelltenakten gespeichert werden, um die Reihenfolge der Entlassungen schnell bestimmen zu können? Stack c) Sie wollen eine Simulation einer stark frequentierten Kreuzung implementieren. Welche Datenstruktur verwenden Sie, um die ankommenden Autos zu speichern? Queue d) Welche Datenstruktur verwenden Sie, um ein Wörterbuch für einen Spell-Checker platzsparend zu speichern und Wörter effizient nachzuschlagen? Gesucht ist eine Datenstruktur, die nur so viel Platz benötigt, wie auch tatsächlich belegt wird, d.h., eine Hash-Tabelle kommt nicht in Betracht. (Ein Dictionary ist der abstrakte Datentyp; gefragt ist hier eine konkrete Datenstruktur.) Binärer Suchbaum, Trie, zur Not Hash-Tabelle 2

7 Punkte Name:............................... ( 4+2+1 ) 2 Matrikel-Nr.:............................... Σ:... Algorithmen-Design Gesucht ist ein effizienter Algorithmus zum Potenzieren natürlicher Zahlen. Gegeben seien natürliche Zahlen x und n. Gesucht wird ein Algorithmus, der mit Aufwand O ( log n ) die n-te Potenz von x, d.h., die Zahl x n berechnet. Dabei sind Addition, Subtraktion und Multiplikation zweier natürlicher Zahlen als Elementarschritte (Operationen mit konstanter Zeit) erlaubt. Gleiches gilt für das Abfragen, ob eine natürliche Zahl gerade oder ungerade ist. a) Geben Sie einen Algorithmus in Pseudocode oder Python an, der in der geforderten Laufzeit das gewünschte Ergebnis produziert. def quick_pow( x, n ): if n == 0: # Base case = 1 Punkt return 1 if n % 2 == 0: # n ist gerade # Fallunterscheidung = 1 Punkt x2 = quick_pow( x, n/2 ) # Fall 1 = 1 Punkt return x2*x2 else: # n ist ungerade # Fall 2 = 1 Punkt x2 = quick_pow( x, (n-1)/2 ) return x2*x2*x b) Geben Sie die Laufzeit des Algorithmus als Rekursionsgleichung an. T (n) = a + T ( n 2 ) (1 Punkt für n/2, 1 Punkt für a+ ) c) Wie heißt die Algorithmentechnik, die Ihrem Algorithmus zugrunde liegt? Divide-and-Conquer 3

7 Punkte Name:............................... ( 2 + 1 + 4 ) 3 Matrikel-Nr.:............................... Σ:... Algorithmentechnik Ein Freelancer-Programmierer bekommt aufgrund der guten Wirtschaftslage eine Menge von n Projekten (P 1,..., P n ) von n Kunden (K 1,..., K n ). Jedes Projekt dauert p i = d i + 1 3 d i Tage zur Fertigstellung. 1 3 d i ist der Zeitaufwand für die Einarbeitung und Kundengespräche, der Rest (d i ) ist für die eigentliche Programmierarbeit. Der Freelancer kann nur ein Projekt gleichzeitig bearbeiten. Um die Kundenzufriedenheit zu maximieren, soll die Gesamtwartezeit aller Kunden minimiert werden. Die Wartezeit eines Kunden ist die benötigte Zeit zur Fertigstellung der vorher bearbeiteten Projekte plus die Zeit zur Fertigstellung seines Projektes. a) Geben Sie einen Algorithmus an, der die Gesamtwartezeit minimiert. Sortiere P nach p aufsteigend. Arbeite von vorne nach hinten diese Liste ab. b) Welche Algorithmentechnik verwendet Ihr Algorithmus? Greedy-Algorithmus. (Dynamisches Programmieren geht auch, ist aber völlig Overkill.) c) Zeigen Sie, dass Ihr Algorithmus tatsächlich das Minimum berechnet. (Sie dürfen hier den Stoff der Vorlesung als bekannt annehmen, d.h., Sie dürfen z.b. sagen... ; ab hier weiter wie im Optimalitätsnachweis zu Algorithmus X.) Sei I =(i 1 i 2... i n ) eine Permutation T (I) =p i1 + (p i1 + p i2 ) + (p i1 + p i2 + p i3 ) +... =np i1 + (n 1)p i2 +... n = (n k + 1)p ik = 3 4 k=1 n (n k + 1)d ik k=1 Ab hier weiter wie im Beweis zum Greedy-Algorithmus für das Scheduling-Problem. 4

7 Punkte Name:............................... ( 7 ) 4 Matrikel-Nr.:............................... Σ:... Sortieralgorithmen Erläutern Sie die wesentlichen Unterschiede zwischen den Sortieralgorithmen Quicksort und Mergesort. Welches sind ihre Gemeinsamkeiten? (... außer, dass beides Sortieralgorithmen sind!) Gefragt sind hier Charakteristika, nicht die Unterschiede im Ablauf der Algorithmen. Quicksort: in situ; Mergesort: nicht in situ (in place) (1P) Worst-Case von Quicksort: O ( n 2) ; Worst-Case von Mergesort: O ( n log n ) (2P) Mergesort eignet sich als externes Sortierverfahren ( unbegrenzte Datengröße), Quicksort nicht. (1P) Gemeinsamkeit: Beide sind Divide-and-Conquer (1P) Gemeinsamkeit: beide sind O ( n log n ) im average case. (2P) 5

6 Punkte Name:............................... ( 4+1+1 ) 5 Matrikel-Nr.:............................... Σ:... Typsysteme a) Geben Sie an, was von folgenden Python-Code-Zeilen ausgegeben wird: a = 1 b = "zwei" d = [a, b] a = 3.0 print a print b print d Tip: denken Sie daran, dass Python dynamic binding verwendet. >>> print a # 1P 3.0 >>> print b # 1P zwei >>> print d # 2P [1, zwei ] b) Betrachten Sie folgende Funktion in Python: def swap( a, b ): t = a a = b b = t Dürfen a und b beliebigen Typ haben? Ja Nein c) Markieren Sie diejenige Programmzeile, die in einer stark typisierten (strongly typed) Sprache (wie z.b. Python) zu einer Fehlermeldung führt. a = 2 b = "drei" a = "zwei" b = 3.1 c = a + b letzte Zeile 6

10 Punkte Name:............................... ( 10 ) 6 Matrikel-Nr.:............................... Σ:... Doppelt verkettete Listen Gegeben seien folgende Klassen in Python zur Implementierung von doppelt verketteten Listen. class List: class ListElement: def init ( self ): self.item = self.next = self.prev = None def init ( self ): self.cursor = None # cursor always points to some "current" element, # except when the list is empty Implementieren Sie in dieser Klasse eine Methode insert_second( self, item ), die ein Datenelement item (z.b. einen Integer) immer als zweites Element in die Liste einhängt. Tip: evtl. geht es am einfachsten, wenn Sie zunächst den Python-Code für den einfachen Fall auf der Rückseite vorschreiben, dann die Behandlung der Spezialfälle einfügen, und dann das Ganze auf der Vorderseite ins Reine schreiben. (Durchstreichen des vorgeschriebenen Konzeptes nicht vergessen!) def insert_second( self, item ): # 1P if self.cursor == None: # empty list # 1P return old_cursor = self.cursor # optional # 1 Extra-P while self.cursor.prev!= None: # find head # 1P self.cursor = self.cursor.prev # now cursor = head if self.cursor.next == None: # 1P # no 2nd element in list... easy case self.cursor.next = self.listelement() # 1P self.cursor.next.prev = self.cursor # 1P else: # a little bit more to do... old_2nd = self.cursor.next new_2nd = self.listelement() old_2nd.prev = new_2nd new_2nd.prev = self.cursor # 1P new_2nd.next = old_2nd # 1P self.cursor.next = new_2nd # 1P self.cursor.next.item = item # 1P self.cursor = old_cursor # optional 7

4 Punkte Name:............................... ( 4 ) 7 Matrikel-Nr.:............................... Σ:... Komplexitätsanalyse Betrachten Sie folgende Funktion zum Sortieren: 1 def ssort( A ): 2 for i in range( 0, len(a) ): 3 min = i 4 for j in range( i+1, len(a) ): 5 if A[j] < A[min]: 6 min = j 7 A[i], A[min] = A[min], A[i] # swap Dabei ist A ein Array von Integers. Leiten Sie die Komplexität T (n) der Funktion her, wobei n die Anzahl der Elemente in A bezeichnet. Sie dürfen das Groß-O-Kalkül benutzen. Innere Schleife: O ( n i ) Äußere Schleife: T (n) n i=0 O( n i ) = O ( n i=0 (n i)) = O ( n j=0 j) [mit j = n i] = O ( n(n+1) ) ( ) 2 = O n 2 8

8 Punkte Name:............................... ( 8 x 1 ) 8 Matrikel-Nr.:............................... Σ:... Quickies Kreuzen Sie für jede Aussage an, ob sie wahr oder falsch ist. a) Der Aufwand der Suche nach einem Element in einer doppelt verketteten Liste beträgt im worst-case O ( log n ). b) Für Integer-Keys ohne beschränkten Wert gibt es ein Sortierverfahren, dessen Komplexität im Worst-Case in O ( n ) ist. c) Es gibt Sortierverfahren, deren Komplexität im Worst-Case in O ( log n ) ist. Richtig Richtig Richtig Falsch Falsch Falsch d) Ein binärer Baum mit h Levels hat O ( 2 h) viele Knoten. Richtig Falsch e) In einer Hash-Tabelle mit Open Addressing zur Kollisionsbehandlung kann man mehr Elemente speichern als die Tabelle Slots hat. f) Einen optimalen binären Suchbaum kann man in der Zeit O ( n 3) konstruieren. g) In einem beliebigen Baum kann man für zwei beliebige Knoten v und w in konstanter Zeit entscheiden, ob v Vorgänger von w ist. h) In einem B-Baum mit Knotenbelegungsparameter k haben alle Blätter dieselbe Höhe. Richtig Richtig Richtig Richtig Falsch Falsch Falsch Falsch 9

1 Punkt Name:............................... ( 1 ) 9 Matrikel-Nr.:............................... Σ:... Informatik II Welche der hier abgebildeten Personen ist der Dozent der Vorlesung Informatik II im Sommersemester 2010? 10