Department of Computer Science | Institute of Theoretical Computer Science | CADMO

Theory of Combinatorial Algorithms

Prof. Emo Welzl and Prof. Bernd Gärtner

Informatik (D-MATH,D-PHYS) HS09
Theory of Combinatorial Algorithms Institute for Theoretical Computer Science Department of Computer Science ETH Zurich

Informatik für Mathematiker und Physiker (251-0847-00) HS09

Ankündigung

Skript

Die Vollversion der Vorlesungsunterlagen kann jetzt herunter geladen werden. Die Unterlagen enthalten Referenzen und sind deshalb elektronisch am besten zu benutzen. Aus diesem Grund und mit Bedacht auf unseren Papierverbrauch bieten wir keine ausgedruckte Version an.

Material

Die Lösungen zu den Programmieraufgaben sind in schriftlicher Form in den Lösungsabschnitten zu den Vorlesungsunterlagen enthalten. Damit Sie die Programme auch ausprobieren können, sammeln wir die .cpp Dateien in diesem Ordner.

Datum Themen Folien / Handout Übungsaufgaben Lösung Programme

#1 (22.09.2009) Algorithmus, Programm, Registermaschine Kapitel 2 [PDF], (Sieben Wunder der Informatik), Zusammenfassung Registermaschine [PDF] Serie 1 [PDF] Lösung 1 [PDF]

#2 (29.09.2009) Unendlichkeit,
Berechenbarkeit
Kapitel 3 [PDF], Kapitel 4 [PDF] (Sieben Wunder der Informatik) Serie 2 [PDF] Lösung 2 [PDF] [hello_world.cpp]

#3 (6.10.2009) C++: Identifiers, Ausdrücke,
Variablen, Literale,
Operatoren, erstes Programm
Folien zu den Abschnitten 1.1 bis 2.1 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt],
Ein Artikel aus der Anfangszeit der höheren Programmiersprachen
Serie 3 [PDF] Lösungen zu Abschnitt 2.1 [PDF] [power8.cpp], [power8_exact.cpp]

#4 (13.10.2009) Integers, Booleans, Auswertungsreihenfolge Folien zu den Abschnitten 2.2 bis 2.3 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 4 [PDF] Lösungen zu Abschnitt 2.2 [PDF],
Lösungen zu Abschnitt 2.3 [PDF]
[fahrenheit.cpp] [limits.cpp]

#5 (20.10.2009) Kontrollanweisungen Folien zum Abschnitt 2.4 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 5 [PDF] Lösungen zu Abschnitt 2.4 [PDF] [collatz.cpp] [prime.cpp] [scope.cpp] [sum_n.cpp]

#6 (27.10.2009) Fliesskommazahlen Folien zum Abschnitt 2.5 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 6 [PDF] Lösungen zu Abschnitt 2.5 [PDF] [euler.cpp] [diff.cpp] [harmonic.cpp]

#7 (3.11.2009) Felder und Zeiger (I) Folien zum Abschnitt 2.6 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 7 [PDF] [read_array.cpp] [eratosthenes.cpp] [eratosthenes2.cpp]

#8 (10.11.2009) Felder und Zeiger (II) Folien zum Abschnitt 2.6 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 8 [PDF] Lösung 8 [PDF], Lösungen zu Abschnitt 2.6 [PDF] [string_matching.cpp] [string_matching2.cpp] [shortest_path.cpp]
Input data

#9 (17.11.2009) Funktionen Folien zum Abschnitt 3.1 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 9 [PDF] Lösungen zu Abschnitt 3.1 [PDF] [callpow.cpp] [swap_template.cpp]
Input data

#10 (24.11.2009) Rekursion (I) Folien zum Abschnitt 3.2 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 10 [PDF] [fak-1.cpp] [fibonacci.cpp] [fibonacci2.cpp] [ackermann.cpp] [merge_sort.cpp] [minimum_sort.cpp]

#11 (1.12.2009) Rekursion (II)
Structs
Referenztypen
Operator-Überladung
Folien zum Abschnitt 3.2, 4.1 und 4.2 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 11 [PDF] Lösungen zu Abschnitt 3.2 [PDF], Lösungen zu Abschnitt 4.1 [PDF] [dragon.cpp] [lindenmayer.cpp] [snowflake.cpp] [rational.cpp] [userational.cpp] [userational2.cpp]

#12 (8.12.2009) Referenzen (const),
Klassen (I),
Zufallszahlen
Folien zum Abschnitt 4.2 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Serie 12 [PDF] Lösungen zu Abschnitt 4.2 [PDF] [clock.cpp] [random.h] [random.cpp] [random_pi.cpp] [loaded_dice.h] [loaded_dice.cpp] [choosing_numbers.cpp]

#13 (15.12.2009) Klassen (II) Folien zum Abschnitt 4.3 im Skript [pdf zum Drucken] [pdf zum Ansehen] [ppt] Lösungen zu Abschnitt 4.3 [PDF]

Merkblatt zur Vorlesung [PDF] [PS]

Wichtige Unix Kommandos [PDF] [PS]

Termine

Vorlesung: Dienstag 13:15-15:00, HG F1
Bernd Gärtner, CAB G32.2, Tel: 044 632 70 26, .
Juraj Hromkovic, CAB F16, Tel: 044 632 44 08 .
Übung: Dienstag 15:15-17:00
Yves Brise, CAB G36.2, Tel: 044 44 632 77 96, .
Gruppe A,Dienstag 15:15-17:00,CAB G56,Jo Helmuth.
Gruppe B,Dienstag 15:15-17:00,CHN D42,Lukas Herrmann.
Gruppe C,Dienstag 15:15-17:00,CHN D48,Patrick Traxler.
Gruppe D,Dienstag 15:15-17:00,CHN E42,Omar Awile.
Gruppe E,Dienstag 15:15-17:00,CHN G22,Gerardo Tauriello and Kaan Yücer.
Gruppe F,Dienstag 15:15-17:00,CHN G46,Andrea Arteaga (italiano).
Gruppe G,Dienstag 15:15-17:00,CLA E4,Thomas Scholtes.
Gruppe H,Dienstag 15:15-17:00,HG D5.3,Andreas Streich.
Gruppe I,Dienstag 15:15-17:00,HG E1.2,Alessandro Zala.
Gruppe J,Dienstag 15:15-17:00,HG F26.3,Etienne Reichenbach.
Gruppe K,Dienstag 15:15-17:00,HG F26.5,Stefan Schmid.
Gruppe L,Dienstag 15:15-17:00,IFW A34,Bruno Montalto (english).
Gruppe M,Dienstag 15:15-17:00,LFW E11,Rajesh Ramaswamy (english).
Gruppe N,Dienstag 15:15-17:00,LFW E13,Anna Zych (english).
Gruppe O,Dienstag 15:15-17:00,ML J37.1,Florian Negele.

Inhalt der Vorlesung

Der Hauptteil der Vorlesung ist eine algorithmisch orientierte Einführung ins Programmieren anhand der Sprache C++. Dieser Teil gliedert sich in die drei Bereiche "Grundlagen", "Funktionen" und "Klassen". Besonderes Augenmerk liegt auf dem Rechnen mit arithmetischen Typen. Des weiteren geben wir einen Einblick in die Geschichte der Informatik und einige ihrer wichtigen theoretischen Grundlagen.

Arbeitsumgebung

Wir arbeiten mit einem Unix System wie es in der Form von Linux in den ETH Computerräumen installiert ist. Es stehen etliche öffentliche Rechner in verschiedenen Räumen zur Verfügung. Eine komplette Liste gibt es hier. Bei Zugangsproblemen, die Sie nicht mir ihrem Übungsleiter zusammen lösen können, kontaktieren Sie bitte die Informatikdienste der ETH (Telefon intern 27777).

Die meisten der PCs sind dualboot Windows/Linux. Das heisst Sie müssen zuerst Linux starten, falls Sie mit einem Windows Login Fenster begrüsst werden. Informationen dazu gibt es hier. Wenn vorhanden, können natürlich auch eigene Rechner benutzt werden. Wer mit dem Gedanken spielt, sich ein eigenes Notebook anzuschaffen, der sollte einen Blick auf die Neptun Angebote werfen.

Für die privaten Rechner verwenden wir in diesem Semester zum ersten Mal eine Linux Ubuntu Installation, die auf allen gängigen Betriebssystemen über eine VirtualBox läuft und von uns zur Verfügung gestellt wird.

Egal mit welchem System Sie arbeiten, Sie müssen zuerst die Arbeitsumgebung der Vorlesung einrichten. Auf einem privaten Rechner mit einem Nicht-Linux Betriebssystem (Windows, OS X) folgen Sie bitte der VirtualBox Anleitung. Sollten Sie an einem Rechner arbeiten, auf dem bereits Linux installiert ist (privat oder öffentlich), dann halten Sie sich an die LinuxTarball Anleitung.

Leider haben wir feststellen müssen, dass die VirtualBox auf älteren Apple Rechnern (PowerPC) nicht läuft. Die gute Nachricht ist jedoch, dass man in OS X relativ einfach eine ganz ähnliche Umgebung einrichten kann. Dazu konsultieren Sie bitte zuerst die Anleitung vom letzten Jahr.

Hinweise zur Übung

Auf jeder Übungsserie gibt es mehrere Aufgaben, die schriftlich zu bearbeiten und zum angegebenen Termin abzugeben sind. Programmieraufgaben senden sie bis zu diesem Termin per E-Mail an den Übungsleiter. Gruppenabgaben wie auch das Einreichen identischer Lösungen sind nicht zulässig.

Lindenmayer Challenge

Sehen Sie sich die Slideshow an, oder gehen sie zu der Liste der eingereichten Programme.

Testatbedingungen

Bitte lesen Sie sich die folgenden Absätze genau durch. Es handelt sich dabei um wichtige Informationen bezüglich der Leistungskontrollen.

Was ist das Testat, und wie bekomme ich es?

Das Testat bescheinigt Ihnen eine erfolgreiche Teilnahme am Übungsbetrieb. Jede der wöchentlich ausgegebenen Übungsserien enthält 3-4 reguläre Übungsaufgaben, für deren korrekte Lösung insgesamt 16 Punkte vergeben werden. Zusätzlich enthalten die meisten Serien "Challenge"-Aufgaben, aus denen jeweils 8 Punkte erzielt werden können. Insgesamt wird es 12 Übungsserien geben.

Um das Testat zu erhalten, müssen Sie 96 Punkte aus allen ausgegebenen Übungsserien erreichen; das sind 50 Prozent der regulären Punkte aus 12 Übungsserien. Es spielt dabei keine Rolle, ob Sie die Punkte aus regulären Aufgaben oder aus "Challenge"-Aufgaben erzielen. Insbesondere können Sie sowohl die regulären als auch die Challenge Aufgaben einer Serie lösen und somit mehr als 16 Punkte erzielen.

Der Sinn dieser Anforderung besteht darin, Sie in Ihrem eigenen Interesse zu regelmässiger Beschäftigung mit dem Vorlesungsstoff zu motivieren. Die Erfahrung zeigt, dass viele Studierend beim Fehlen solcher Anforderungen die Vorlesung schleifen lassen und bei der späteren Vorbereitung auf die Prüfung dann hoffnungslos überfordert sind.

Studierende, die sich durch den Vorlesungsstoff eher unterfordert fühlen und das regelmässige Bearbeiten "langweiliger" Aufgaben als Zumutung empfinden, sind eingeladen, jeweils die "Challenge"-Aufgaben zu bearbeiten. Dies sind meist schwierigere Aufgaben, für die auch entsprechend mehr Punkte vergeben werden.

Warum brauche ich das Testat?

In der Regel nach dem ersten Studienjahr findet für die Bachelor-Studierenden die schriftliche Basisprüfung (bestehend aus vier Einzelprüfungen) über alle obligatorischen Fächer des Basisjahres statt. Der Erhalt des Testats ist eine unabdingbare Zulassungsvoraussetzung für die Basisprüfung.

Was passiert, wenn ich das Testat nicht erhalte?

Selbst wenn Sie die Testate in allen anderen obligatorischen Fächern erhalten haben, werden Sie bei Fehlen eines Testats nicht zur Basisprüfung zugelassen und sind damit gezwungen, das Testat im darauf folgenden Studienjahr nachzuholen und somit alle Einzelprüfungen (auch die über die anderen obligatorischen Fächer, in denen Sie die Testate erhalten haben) um mindestens ein halbes Jahr zu verschieben.

Kann ich das Testat auch nachträglich noch erhalten?

Nein. Wenn Sie während des Semesters nicht auf 96 Punkte kommen, wird Ihnen das Testat nicht erteilt, und es gibt keine Möglichkeit, es nachträglich noch zu bekommen. Sonderregelungen gelten nur bei nachgewiesener Krankheit, Absenzen wegen Militärdienst, oder bei später in den Studiengang eintretenden Studierenden.

Ich studiere nicht im Bachelor-Programm D-MATH / D-PHYS. Was gilt für mich?

Das hängt von Ihrem Studiengang ab und kann nicht pauschal beantwortet werden. Wenn Sie zu irgendeinem Zeitpunkt eine Prüfung über diese Vorlesung ablegen wollen, erkundigen Sie sich bitte bei den Verantwortlichen für Ihren Studiengang über die Zulassungsvoraussetzungen und Bedingungen. Falls Sie nicht an einen Prüfungsblock gebunden sind, können Sie die Prüfung bereits im Winter (zusammen mit den Repetierenden des letzten Studienjahres) ablegen.

Was ist, wenn ich das Testat in einem früheren Semester schon erhalten habe?

Einmal erhalten, bleibt das Testat für immer gültig. Sie sind gerne dazu eingeladen, die Übungen trotzdem abzugeben, müssen dies aber nicht tun.

Prüfung

Die Prüfung besteht aus einer zweistündigen Klausur. Es sind keine Hilfsmittel erlaubt. Bedingung für die Zulassung zur Prüfung ist das Übungstestat.

Alte Prüfungen

Als Vorbereitung auf die Prüfung stellen wir Ihnen hier eine Liste alter Prüfungen und Musterlösungen zu dieser Vorlesung zur Verfügung. Angaben in den Lösungen ohne Gewähr. Die Lösungen sind zum jetzigen Zeitpunkt noch nicht zugänglich und werden gegen Ende des Semesters freigeschaltet.
  1. Klausur Herbst 2009 und die Lösung dazu.
  2. Klausur Winter 2009 und die Lösung dazu.
  3. Klausur Herbst 2008 und die Lösung dazu.
  4. Klausur Frühling 2008 und die Lösung dazu.
  5. Klausur Herbst 2007 und die Lösung dazu.
  6. Klausur Herbst 2006 und die Lösung dazu.
  7. Klausur Frühling 2006 und die Lösung dazu.
  8. Klausur Herbst 2005 und die Lösung dazu.

und Links


Last modified: , by Yves Brise. Valid HTML 4.0! Valid CSS!