Themen und weitere Hinweise für das Seminar / Proseminar: Aktuelle Themen aus der Programmierung [PR-BS] Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2011 Inhaltsverzeichnis 1 Organisatorisches 2 1.1 Vorbesprechung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Webseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Modulabschlussprüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Allgemeines 2 3 Themen 6 3.1 Themengruppe 1: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2 Themengruppe 2: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 Themengruppe 3: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1 1 Organisatorisches 1.1 Vorbesprechung Für die Teilnahme am Seminar, ist es u.a. notwendig bei der Vorbesprechung anwesend zu sein. Die Vorbesprechung findet am Dienstag, den 15.02.2011 um 14 c.t. in Seminarraum 9 (Informatikgebäude, Robert-Mayer-Str. 11-15, EG) statt. Sollten Sie aus nachvollziehbaren Gründen nicht an der Vorbesprechung teilnehmen können, so teilen Sie dies uns bitte vorher mit! 1.2 Webseite Es existiert eine Webseite zur Veranstaltung, die stets aktuelle Informationen zum Seminar, wie Terminplan, Raumänderungen, Themenliste usw. enthält. Die Seite unter der URL http://www.ki.informatik.uni-frankfurt.de/lehre/SS2011/PR-BS zu finden. 1.3 Modulabschlussprüfung Die Modulabschlussprüfung ist bestanden, falls sowohl die Ausarbeitung als auch der Vortrag mit mindestens ausreichend“ (4.0) bewertet wurden und regelmäßig teilgenommen ” wurde1 . Die Note der Prüfung berechnet sich aus dem Durchschnitt der Note für die Ausarbeitung und der Note für den Vortrag. Die Noten für Vortrag und Ausarbeitung werden erst am Ende der Vorlesungszeit bzw. nach dem letzten Vortrag vergeben. 2 Allgemeines Die vorgesehenen Themen für das Seminar sind in Abschnitt 3 dieses Dokuments zu finden. Dort sind auch kurze Beschreibungen der einzelnen Themen sowie Literaturhinweise und Links auf Online-Ressourcen im WWW zu finden. Für das erfolgreiche Absolvieren des Seminars ist folgendes Vorgehen empfohlen bzw. ist folgendes zu beachten: 1 D.h. man sollte möglichst bei allen Vorträgen anwesend sein, als Daumenregel aller höchstens zweimal fehlen. 2 1. Finden der angegebenen Quellen (möglichst sofort damit beginnen): • Wo gibt es die angegebene Literatur? • Bücher sind eventuell verliehen und müssen vorbestellt werden. • Funktionieren die Links ins WWW? 2. Prüfen der angegebenen Quellen: • Welche Informationen sind dort zu finden? • Welche der gefunden Informationen sind nützlich? • Welche Informationen fehlen oder reichen die vorhandenen Quellen? 3. Suchen eigener Quellen • Literaturrecherche via Bibliotheksdatenbanken (OPAC, Institutsbibliothek) • Literaturrecherche via Internet (Suchmaschinen wie z.B. Google) 4. Erstellen eines Konzepts • Welche Aspekte sollen in die Ausarbeitung? • Gliederung der Ausarbeitung • Stichpunkte zu den einzelnen Unterpunkten • Seitenzahlen abschätzen für die einzelnen Gliederungspunkte. 5. Besprechung des Konzepts mit einem Betreuer (empfohlen) Vor der Besprechung sollte ein Termin ausgemacht werden. Dies geht am einfachsten via Email. Unklare Punkte sollten rechtzeitig per Email vor der Besprechung angekündigt werden, um dem Betreuer eine Einarbeitung zu ermöglichen. Die Besprechung des Konzepts ist auch dann zu empfehlen, wenn es eigentlich keine ” Fragen“ gibt, denn bei einer solchen Besprechung kann frühzeitig die Arbeit in die richtige Richtung gelenkt werden oder es können Missverständnisse aus dem Weg geräumt werden. 6. Anfertigung der Ausarbeitung Die Ausarbeitung soll eine in eigenen Worten verfasste Darstellung des Themas sein. Insbesondere sollte sie nicht aus einer bloßen Übersetzung eines englischen Orginaltexts bestehen. Der Umfang der Ausarbeitung sollte ca. 10 Seiten betragen. Die Form der Ausarbeitung sollte zumindest beachten: • normale Schriftgröße zwischen 10pt und 12pt. • ausreichend Rand für Korrekturanmerkungen lassen • Die Seiten sollten nummeriert sein. 3 • Eine Ausarbeitung besteht im Allgemeinen aus einer Einleitung, Haupteil und einem Schluss. • Am Ende der Ausarbeitung sollte sich ein Literaturverzeichnis befinden, welches die im Text zitierten Quellen beinhaltet. 7. Abgabe der Ausarbeitung Eine Vorversion der Ausarbeitung sollte 2 Wochen vor dem Vortrag abgegeben werden. 2 Wochen nach dem Vortrag muss die endgültige Ausarbeitung bei der Professur angekommen sein. Sie sollte sowohl in gedruckter Form als auch in elektronischer Version (PostScript oder PDF) abgegeben werden. Anschließend wird sie begutachtet und es werden eventuell Vorschläge zur Nachbesserung gegeben. Die Nachbesserung sollte normalerweise bis zum Vortrag, in Ausnahmefällen bis zwei Wochen nach dem Vortrag, vorgenommen werden. Die Ausarbeitung soll u.U. auf der WWW-Seite der Professur für andere Teilnehmer des Seminars verfügbar gemacht werden. Falls Sie dies nicht wünschen, so teilen Sie uns das bitte mit Ihrer Abgabe mit. 8. Präsentation / Vortrag Ziel des Vortrages ist zum Einen die Vermittlung des Stoffes an die Teilnehmer, zum Anderen dient der Vortrag zum Üben einer Präsentation. Hierbei sollte beachtet werden: Publikum Berücksichtigen Sie, an wen sich Ihr Vortrag richtet. Dies sind im wesentlichen die übrigen Seminarteilnehmer aber auch der Dozent und die Mitarbeiter. Zeitbeschränkung Für einen Pro-/Seminarvortrag sind 40 Minuten vorgesehen. Diese Begrenzung ist großzügig bemessen, bei wissenschaftlichen Konferenzen haben Sie noch wesentlich weniger Zeit, oft nur 10 - 30 Minuten. Die Zeitbeschränkung lässt es oft nicht zu, das gesamte Thema in allen Einzelheiten zu präsentieren, Sie sollten evtl. Teilthemen weglassen, oder unwichtigere Aspekte derart platzieren, so dass Sie sie nur dann vortragen, wenn noch entsprechend Zeit zur Verfügung steht. Bei der Auswahl des Stoffes sollten die folgenden Fragestellungen berücksichtigt werden: • Was ist besonders wichtig und muss präsentiert werden? • Was ist eher uninteressant und kann bei der Präsentation weggelassen werden? • Was könnte präsentiert werden, falls noch genügend Zeit am Ende Präsentation vorhanden ist? Zusätzlich zur eigentlichen Vortragszeit sind 5 Minuten für Zwischenfragen und Diskussion eingeplant. Folien / Bildschirmpräsentation Die Präsentation erfolgt überlicherweise mithilfe einer Bildschirmpräsentation mit Laptop und Beamer erfolgen. Hierbei 4 sollte die Information pro Folie wohldosiert sein: Statt langer Texte sollten die wichtigsten Fakten stichpunktartig auf den Folien festgehalten werden. Die Folien sollten lesbar sein (enstprechend große Schriftgröße wählen). Die Anzahl der Folien kann je nach Inhalt der Folien variieren, als Maßstab sind ca. 15 Folien einzuplanen. Animationen innerhalb der Präsentation sollten Sie weitestgehend vermeiden, und wenn, dann nur sinnvoll einsetzen. Für die Bildschirmdarstellung von Präsentationen, die keinen besonders intensiven Gebrauch von Animationen machen, sei PDF angeraten. Beim Einsatz von LATEX bietet sich hierfür besonders das Paket LaTeX Beamer (http://latexbeamer.sourceforge.net/) an. Es wird empfohlen die Vortragsfolien 1-2 Tage vor dem Vortrag bereits an den Betreuer zu schicken, damit getestet werden kann, ob die Präsentation auf den Systemen der Professur lauffähig ist. Zur Vorbereitung auf den Vortrag wird empfohlen, den Vortrag probeweise vor einem Kommilitonen o.ä. zu halten, insbesondere um zu sehen, ob • der Vortrag zu lang / kurz ist. • der Vortrag verständlich ist. • der Vortrag spannend oder eher ermüdend ist. 9. Teilnahme Von den Teilnehmern wird erwartet, dass Sie bei allen Vorträgen der Veranstaltung anwesend sind, und aktiv am Pro-/Seminar teilnehmen, indem Sie sich an der Diskussion beteiligen. 5 3 Themen Im Rahmen des Seminars werden ausgewählte Kapitel des folgenden Buchs behandelt: Pearls of Functional Algorithm Design von Richard Bird, Cambridge University Press, 2010, ISBN: 978-0-521-51338-8 Zwei Exemplare des Buchs sind in der Institutsbibliothek unter der Signatur F.2-137 verfügbar. Ein weiteres Exemplar des Buchs liegt an der Professur. Das Buch behandelt Implementierungen von interessanten und teilweise auch bekannten Algorithmen. Sämtliche Implementierung werden in der funktionalen Programmiersprache Haskell präsentiert. Manche Themen bestehen aus zwei Kapiteln und manche Themen können von 2 Teilnehmern zusammen bearbeitet werden. Die Themen sind in drei Themengruppen eingeteilt. Je nach Teilnehmerzahl sollte zuerst die Themen der Gruppe 1, anschließend die Themen der Gruppe 2, und zum Schluss die Themen der Gruppe 3 vergeben werden. Der Grund hierfür ist, dass die Themen der Gruppe 1 besonders interessant (aus Sicht der Professur) erscheinen, und die Themen der Gruppe 2 interessanter als die Themen der Gruppe 3 erscheinen. Das bedeutet jedoch nicht, dass das Themen eine höheren Gruppe schlechter sind als Themen einer niedrigeren Gruppe. 3.1 Themengruppe 1: 01 Einzelthema: Der Boyer-Moore Algorithmus Kapitel 15: All the common prefixes (S. 112–116), Für zwei Strings xs und ys sei llcp die Länge des längsten Präfixes, den xs und ys gemeinsam haben. In diesem Kapitel werden jedoch alle llcp-Längen eines Strings xs mit all seinen Suffixen berechnet. Es wird ein Linearzeit-Algorithmus vorgestellt, der im darauf folgenden Kapitel (Kapitel 16) verwendet wird. Kapitel 16: The Boyer-Moore algorithm (S. 117–126) Der Boyer-Moore Algorithmus löst das Problem alle Vorkommen (die Positionen) eines Substrings (das sogenannte Pattern) in einem Eingabestring zu finden. In diesem Kapitel wird eine funktionale Implementierung des Boyer-Moore Algorithmus vorgestellt. 6 02 Einzelthema: Der Knuth-Morris-Pratt Algorithmus Kapitel 17: The Knuth-Morris-Pratt algorithm (S. 127–135) Der Knuth-Morris-Pratt Algorithmus löst das gleiche Problem wie der Boyer-Moore Algorithmus (siehe Kapitel 16, das sogenannte String-Matching) jedoch auf eine andere Art und Weise. Das Kapitel präsentiert eine funktionale Implementierung des Knuth-Morris-Pratt Algorithmus. 03 Einzelthema: Rush-Hour-Problem Kapitel 18: Planning solves the rush hour problem (S. 136–146) Das Rush-Hour Problem besteht aus einem 6 × 6 Gitter auf dem Fahrzeuge verteilt sind. Fahrzeuge nehmen entweder 2 oder 3 (horizontal nebeneinander liegende, oder vertikal übereinander liegende) Felder ein. Entsprechend ihrer Lage können sich die Fahrzeuge vertikal oder horizontal bewegen. Es gibt eine spezielle Zelle (ganz rechts, dritte von Oben), die den Ausgang darstellt. Ebenso gibt ein spezielles (horizontales) Fahrzeug. Das Ziel ist es, Züge anzugeben, sodass das spezielle Fahrzeug zum Ausgang bewegt wird. Das Kapitel stellt eine Lösung für dieses Problem dar. 04 Einzelthema: Ein einfacher Sudoku-Löser Kapitel 19: A simple Sudoku solver (S. 147–155) Sudoku besteht aus einem 9 × 9 Gitter, welches bereits mit einigen Zahlen aus dem Bereich 1, . . . , 9 gefüllt ist. Sudoku wird gelöst, indem man weitere Zahlen aus dem Bereich 1, . . . , 9 in die freien Plätze einträgt, so dass gilt: In jeder Zeile kommen genau die Zahlen 1, . . . , 9 vor, in jeder Spalte kommen genau die Zahlen 1, . . . , 9 vor und in jedem der 3 × 3 Quadrate kommen ebenfalls genau die Zahlen 1, . . . , 9 vor. Dieses Kapitel stellt die Implementierung eines Sudoku-Lösers vor. 05 Einzelthema: Entfernen von Duplikaten Kapitel 10: Removing duplicates (S. 64–72) Das Kapitel behandelt verschiedene Algorithmen zum Entfernen von doppelten Elementen aus einer Liste. 7 3.2 Themengruppe 2: 06 Einzelthema: Der Schorr-Waite Algorithmus Kapitel 26: The Schorr-Waite algorithm (S. 221–230) Der Schorr-Waite Algorithmus stellt eine Methode zur Markierung aller erreichbaren Knoten eines gerichteten Graphen (beginnend von einem Startknoten aus) dar. Der Graph muss dabei einen Ausgrad von 2 haben. 07 Einzelthema: Finden von Celebrity-Cliquen Kapitel 9: Finding celebrities (S. 56–63) Gegeben eine Menge P von Personen bei einer Party. Ein Teilmenge C von P ist eine Celebrity Clique“, wenn C nicht leer ist und jede Person aus P kennt jedes ” Mitglied aus C, aber jede Person aus C kennt ausschließlich die Personen aus C (d.h für jede Person aus C gilt: sie kennt keine Person aus P \ C). In diesem Kapitel werden Lösungen vorgestellt, um aus einer gegebenen Menge P und der binären Relation kennt“ eine Celebrity Clique“ herauszufinden. ” ” 08 Einzelthema: Die Burrows-Wheeler-Transformation Kapitel 13: The Burrows-Wheeler transform (S. 91–101) Die Burrows-Wheeler-Transformation (BWT) ist eine Methode, um eine Liste so zu permutieren, so dass gleiche Elemente nebeneinander stehen. Die BWT kann im Rahmen von Datenkompressionsalgorithmen verwendet werden und wird z.B. von bzip2 verwendet. In diesem Kapitel werden Implementierungen in Haskell der BWT erörtert. 9 Einzelthema: Rangberechnung aller Suffixe Kapitel 12: Ranking suffixes (S. 79–90) Gegeben eine Liste xs von Elementen. Ein Element x aus xs hat Rang r, falls es genau r Elemente in xs gibt, die echt kleiner als x sind. Z.B. erhält man für die Liste [3, 5, 1, 2] als Liste der Ränge: [2, 3, 0, 1]. In diesem Kapitel wird das Problem betrachtet, für eine Liste xs alle Ranglisten der Suffixe von xs möglichst effizient zu berechnen. Für xs = [3, 5, 2, 1] erhält man als Liste von Suffixen [[3, 5, 2, 1], [5, 2, 1], [2, 1], [1]] und die dazugehörigen Ranglisten: [[2, 3, 1, 0], [2, 1, 0], [1, 0], [0]]. 8 10 Einzelthema: Berechnung der Konvexen Hülle Kapitel 23: Inside the convex hull (S. 188–197) Das Kapitel stellt eine Implementierung vor, um die konvexe Hülle einer Menge von d-dimensionalen Punkten zu berechnen. 11 Einzelthema: Geordnetes Einfügen Kapitel 27: Orderly insertion (S. 231–241) Das Kapitel behandelt das Problem des sortierten Einfügens in ein Feld: N Elemente werden nacheinander in ein Feld der Größe N eingefügt. Dabei muss das Feld stets sortiert sein (leere Einträge können ignoriert werden). Ziel des Algorithmus ist es dabei, möglichst wenige Vertauschungen innerhalb des Feldes vorzunehmen. 3.3 Themengruppe 3: 12 Doppelthema: Arithmetische Kodierungen Das Thema kann zusammen von zwei Teilnehmern bearbeitet werden. Kapitel 24: Rational arithmetic coding (S. 198–207) Die arithmetische Kodierung ist eine Methode zur Datenkompression. Hierbei wird die kompriemierende Eingabe insgesamt als binärer Bruch im Einheitsintervall [0, 1] dargestellt. In diesem Kapitel werden ein Kodierer und ein Dekodierer auf Basis von Brüchen mit beliebiger Genauigkeit präsentiert. Kapitel 25: Integer arithmetic coding (S. 208–220) Dieses Kapitel behandelt genau wie das vorherige die arithmetische Kodierung, wobei anstelle von rationalen Zahlen, ganze Zahlen verwendet werden. 13 Einzelthema: Zahlenspielereien: Das Making-a-century- und das Countdown-Problem Kapitel 6: Making a century (S. 33–40) In diesem Kapitel wird das Problem Making a century“ betrachtet: Verwende ” genau die Ziffern 1, . . . , 9 und die Operationen + und × und bilde daraus einen arithmetischen Ausdruck dessen Ergebnis genau 100 ist. Eine Lösung ist z.B. 12 + 34 + 5 × 6 + 7 + 8 + 9. Das Making a century“ Problem besteht darin al” le Möglichkeiten herauszufinden. 9 Kapitel 20: The countdown problem (S. 156–167) Das Countdown-Problem lässt sich wie folgt formulieren: Gegeben 6 positive Zahlen und eine positive Zielzahl. Das Ziel ist es einige der 6 Zahlen zu einem arithmetischen Ausdruck zu verknüpfen (alle 4 Grundrechenarten sind erlaubt), so dass der Wert des Ausdrucks möglichst nah an der Zielzahl liegt. In diesem Kapitel werden Suchalgorithmen zur Lösung des Problems untersucht. 14 Doppelthema: Schleifenlose Algorithmen Das Thema kann zusammen von zwei Teilnehmern bearbeitet werden. Kapitel 28: Loopless functional algorithms (S. 242–250) Kapitel 28-30 behandeln loopless“ Algorithmen: Diese generieren allgemein nach ei” nem Muster eine Ausgabefolge, z.B. die Liste aller Permutationen einer Eingabeliste. Hierbei wird ein Ausgabeelement in einem Schritt aus dem vorherigen Ausgabeelement generiert. Ein solcher Algorithmus heisst loopless“, wenn der erste Schritt ” Linearzeit in der Größe der Eingabe benötigt, aber alle folgenden Schritte jeweils in konstanter Zeit durchgeführt werden können. In Kapitel 28 wird allgemeinen eingeführt, was benötigt wird für die Implementierung solcher Algorithmen: Listen, Bäume und Queues. Kapitel 29: The Johnson-Trotter algorithm (S. 251–257) Der Johnson-Trotter Algorithmus genierert alle Permutationen einer Liste, indem aus einer Permutation jeweils die nächste generiert wird. Das Kapitel stellt einen loopless Algorithmus hierfür vor. ” ” Kapitel 30: Spider spinning for dummies (S. 258–274) Betrachtet wird das Problem alle Bitfolgen a1 , . . . , an der Länge n zu generieren, die eine Menge von gegebenen Bedingungen der Form ai ≤ aj erfüllen. Hierfür wird ein loopless“ Algorithmus vorgestellt. ” 15 Einzelthema: Invertieren von Funktionen Kapitel 3: Improving on saddleback search (S. 12–20) In diesem Kapitel wird das folgende Problem behandelt: Gegeben eine Funktion f , die als Eingabe ein Paar von natürlichen Zahlen erhält und als Resultat eine natürliche Zahl liefert. Sei z eine natürliche Zahl. Gesucht ist eine Funktion invert, so dass invert(f, z) die Menge aller Paare (x, y) liefert, für die gilt f (x, y) = z. Dabei darf angenommen werden, dass f streng monoton steigend für beide Argumente ist. 16 Einzelthema: Drei Wege zum Berechnen von Determinanten Kapitel 22: Three ways of computing determinants (S. 180–187) Das Kapitel stellt drei verschiedene Implementierungen zur Berechnung der Determinante einer n × n-Matrix vor. 10