Aktuelle Themen aus der Programmierung [PR

Werbung
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
Herunterladen