Algorithmen Projektarbeit: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
Zeile 39: Zeile 39:
=Themen für die Projektarbeit=
=Themen für die Projektarbeit=
Hier werden einige Themen vorgeschlagen. Nach Absprache sind natürlich auch ganz andere Themen möglich!
Hier werden einige Themen vorgeschlagen. Nach Absprache sind natürlich auch ganz andere Themen möglich!
# '''Ameisenalgorithmus zur Lösung des Travelling-Salesman-Problems:'''<br/>[https://de.wikipedia.org/wiki/Ameisenalgorithmus Ameisenalgorithmus(Wikipedia)]
# '''Greedy-Algorithmus am Beispiel ''Wechselgeld rausgeben'':<br/>Beispiel: 3,47 Euro soll mit möglichst wenig Münzen herausgegeben werden.<br/>Zu zeigen sind auch die Grenzen des Greedy-Algorithmus in diesem Beispiel, d.h. dass er nicht immer eine ideale Lösung findet.
# '''Aus einer Liste von 1.000.000 Codes möglichst schnell den häufigsten finden.'''<br/>Dafür braucht man Hashmaps, d.h. das Hashing-Verfahren muss erklärt werden.<br/>Python / Java
# '''Aus einer Liste von 1.000.000 Codes möglichst schnell den häufigsten finden.'''<br/>Dafür braucht man Hashmaps, d.h. das Hashing-Verfahren muss erklärt werden.<br/>Python / Java
# '''Planetenbahnen zeichnen:'''<br/>Aus den Gesetzen der Schwerkraft kann man Näherungen gewinnen, so dass man (näherungsweise) Schritt für Schritt eine Planetenbahn zeichnen kann. <br/>Scratch!
# '''Planetenbahnen zeichnen:'''<br/>Aus den Gesetzen der Schwerkraft kann man Näherungen gewinnen, so dass man (näherungsweise) Schritt für Schritt eine Planetenbahn zeichnen kann. <br/>Scratch!
Zeile 49: Zeile 51:
# '''Wie macht man die beste Ausbeute an Glücksspielautomaten?''' <br>Das Multi-Armed-Bandit Problem: <br>[https://en.wikipedia.org/wiki/Multi-armed_bandit Wikipedia (en): Multi-Armed-Bandit]
# '''Wie macht man die beste Ausbeute an Glücksspielautomaten?''' <br>Das Multi-Armed-Bandit Problem: <br>[https://en.wikipedia.org/wiki/Multi-armed_bandit Wikipedia (en): Multi-Armed-Bandit]
# '''Optimale Verkehrsplanung:''' <br>Maximale Flüsse<br>[http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo23.php Algorithmus der Woche]
# '''Optimale Verkehrsplanung:''' <br>Maximale Flüsse<br>[http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo23.php Algorithmus der Woche]
# '''Minimale Spannbäume berechnen mit dem Algorithmus von Prim'''<br/>[https://de.wikipedia.org/wiki/Algorithmus_von_Prim Algorithmus-von-Prim-(Wikipedia)]
# '''Minimale Spannbäume berechnen mit dem Algorithmus von Kruskal'''<br/>[https://de.wikipedia.org/wiki/Algorithmus_von_Kruskal Algorithmus-von-Kruskal-(Wikipedia)]
# '''Mit welcher Wahrscheinlichkeit würfelt man beim Spiel Kniffel einen ''Kniffel'' (d.h. 5 Gleiche?).'''<br/>Zu berücksichtigen ist, dass man bei Kniffel 3x nicht passende Zahlen zurücklegen kann. <br/>Die Qualität des Ergebnisses muss man geeignet abschätzen, z.B. mit statistischen Verfahren.<br/>''Einfache Programmierung, dafür muss man mehr Mathematik anwenden.''
# '''Suchen in O(1):'''<br>Hashing <br>[https://de.wikipedia.org/wiki/Hashfunktion Wikipedia: Hash-Funktion] <br>[http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo34.php Algorithmus der Woche]
# '''Suchen in O(1):'''<br>Hashing <br>[https://de.wikipedia.org/wiki/Hashfunktion Wikipedia: Hash-Funktion] <br>[http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo34.php Algorithmus der Woche]
# '''Pi berechnen mit einem Monte-Carlo-Algorithmus''' <br/>Die Programmierung ist sehr einfach - hier wäre der Schwerpunkt mathematisch: Wie oft muss man "schießen", um mit 95%er Wahrscheinlichkeit eine Abweichung von 1% (bzw. 0,1% oder 0,001%) zu erzielen. D.h. man braucht hier Statistik.<br>Daran schließt sich die Frage an, wie effektiv der Algorithmus ist.<br/>Scratch!
# '''Pi berechnen mit einem Monte-Carlo-Algorithmus''' <br/>Die Programmierung ist sehr einfach - hier wäre der Schwerpunkt mathematisch: Wie oft muss man "schießen", um mit 95%er Wahrscheinlichkeit eine Abweichung von 1% (bzw. 0,1% oder 0,001%) zu erzielen. D.h. man braucht hier Statistik.<br>Daran schließt sich die Frage an, wie effektiv der Algorithmus ist.<br/>Scratch!
# '''Pi berechnen mit einem rekursiven Algorithmus:''' <br/>Einen geeigneten rekursiven Algorithmus recherchieren, seine Herleitung, Genauigkeit
# '''Pi berechnen mit einem rekursiven Algorithmus:''' <br/>Einen geeigneten rekursiven Algorithmus recherchieren, seine Herleitung, Genauigkeit
# '''Integrale näherungsweise berechnen mit der Trapezregel:'''<br/>Abschätzung der Genauigkeit
# '''Magische Quadrate berechnen:'''<br/>Systematisches Probieren.
# '''Projektwoche: Wie verteilt man die Schüler auf Projekte?'''<br/>''1000 Schüler und 50 Projekte; an jedem Projekt dürfen max. 25 Schüler teilnehmen. Jeder Schüler hat 3 Wunschprojekte angegeben.''<br/>''Wie verteilt man die Schüler, so dass möglichst viele in ein Wunschprojekt kommen?''
# '''Welche Funktion erfüllt die Differentialgleichung y'(x) = y<sup>2</sup>(x) + y(x) ?'''<br>Für Differentialgleichungen dieser Art gibt es numerische Verfahren, die (gute!) näherungsweise Lösungen ausgeben.<br>[https://de.wikipedia.org/wiki/Gewöhnliche_Differentialgleichung#Numerische_Verfahren Wikipedia: Numerische Verfahren für gewöhnliche Differentialgleichungen]
# '''Welche Funktion erfüllt die Differentialgleichung y'(x) = y<sup>2</sup>(x) + y(x) ?'''<br>Für Differentialgleichungen dieser Art gibt es numerische Verfahren, die (gute!) näherungsweise Lösungen ausgeben.<br>[https://de.wikipedia.org/wiki/Gewöhnliche_Differentialgleichung#Numerische_Verfahren Wikipedia: Numerische Verfahren für gewöhnliche Differentialgleichungen]
# '''Numerische Verfahren''':<br>Ziel der Numerik ist es ''"das eigentlich Unberechenbare zu berechnen, und das in Lichtgeschwindigkeit."''<br>Es gibt SEHR unterschiedliche numerische Verfahren für SEHR VIELE unterschiedliche Problemstellungen<br>[https://de.wikipedia.org/wiki/Liste_numerischer_Verfahren Wikipedia: Liste numerischer Verfahren]
# '''Numerische Verfahren''':<br>Ziel der Numerik ist es ''"das eigentlich Unberechenbare zu berechnen, und das in Lichtgeschwindigkeit."''<br>Es gibt SEHR unterschiedliche numerische Verfahren für SEHR VIELE unterschiedliche Problemstellungen<br>[https://de.wikipedia.org/wiki/Liste_numerischer_Verfahren Wikipedia: Liste numerischer Verfahren]
# '''Lässt sich eine Landkarte mit 3 Farben einfärben? - das P-NP-Problem'''<br>''Zur Klasse '''P''' gehören alle Entscheidungsprobleme, die in polynomieller Zeit '''gelöst''' werden können.<br>Zur Klasse '''NP''' gehören alle Entscheidungsprobleme, bei denen die Antwort "JA" in polynomieller Zeit '''verifiziert''' werden kann.'' <br>Es soll aufgezeigt werden, dass das 3-Farben-Problem nicht zur Klasse P, aber zur Klasse NP gehört. <br>Außerdem soll die Bedeutung von NP-vollständigen Problemen für die Algorithmik an diesem Beispiel erläutert werden.<br>''Das ist eine rein theoretische Arbeit!''<br>[https://de.wikipedia.org/wiki/Färbung_(Graphentheorie) Wikipedia: Färbung eines Graphen]<br>[http://www14.in.tum.de/lehre/2008WS/ea/EA-12.pdf Erläuterung von P und NP]<br>[https://de.wikipedia.org/wiki/Karps_21_NP-vollständige_Probleme Wikipedia: 21 NP-vollständige Probleme]
# '''Lässt sich eine Landkarte mit 3 Farben einfärben? - das P-NP-Problem'''<br>''Zur Klasse '''P''' gehören alle Entscheidungsprobleme, die in polynomieller Zeit '''gelöst''' werden können.<br>Zur Klasse '''NP''' gehören alle Entscheidungsprobleme, bei denen die Antwort "JA" in polynomieller Zeit '''verifiziert''' werden kann.'' <br>Es soll aufgezeigt werden, dass das 3-Farben-Problem nicht zur Klasse P, aber zur Klasse NP gehört. <br>Außerdem soll die Bedeutung von NP-vollständigen Problemen für die Algorithmik an diesem Beispiel erläutert werden.<br>''Das ist eine rein theoretische Arbeit!''<br>[https://de.wikipedia.org/wiki/Färbung_(Graphentheorie) Wikipedia: Färbung eines Graphen]<br>[http://www14.in.tum.de/lehre/2008WS/ea/EA-12.pdf Erläuterung von P und NP]<br>[https://de.wikipedia.org/wiki/Karps_21_NP-vollständige_Probleme Wikipedia: 21 NP-vollständige Probleme]
# '''Sortieren mit AVL-Bäumen'''<br/>Dafür braucht man Java!

Version vom 12. Dezember 2016, 18:24 Uhr


Anforderungen an die Projektarbeit

mögliche Gliederung

In der Regel umfasst die Projektarbeit die folgenden Teile:

  1. Abstract
    Im Abstract wird die Arbeit in ca. 1/2 Seite zusammengefasst, d.h.: es werden in aller Kürze die Fragestellung der Arbeit, die Ergebnisse und ihre Relevanz dargestellt.
    Das Abstract dient dazu, dass man als Leser schnell erkennen kann, ob es sich - im Hinblick auf eigene Forschungsinteressen - lohnt, die ganze Arbeit zu lesen.
    Das Abstract steht immer am Anfang der Arbeit, aber geschrieben wird es als Letztes!.
  2. Einleitung
    Die Einleitung führt zum Thema hin, z.B. indem die Bedeutung des Algorithmus aufgezeigt wird.
  3. Beschreibung des Algorithmus
    1. Zweck
    2. Funktionsweise
    3. Vorteile / Nachteile
  4. Laufzeitabschätzung / Genauigkeitsabschätzung für n Elemente
    1. Average Case
    2. Worst Case
  5. Quelltext des Algorithmus, gut erläutert
    Hier wird nicht die ganze Programmierung aufgeführt, sondern nur die für den Algorithmus zentralen Teile der Programmierung!
    Die restliche Programmierung kommt in den Anhang.
  6. Praxistest
    Dokumentation von Beispielläufen des Algorithmus
    1. Average Case
    2. (wenn möglich:) Worst Case
  7. Vergleich Theorie - Praxis
    1. ggf.: welche Probleme ergaben sich?
    2. ggf.: Warum ist der Algorithmus in der Praxis langsamer/schneller als in der Theorie?
  8. Resümee
    1. z.B.: Verbesserungsvorschläge
    2. Bedeutung in der Praxis
    3. andere Optionen für das Problem
  9. Anhang
    1. Programmquelltext

formale Anforderungen

Für die Projektarbeit gelten dieselben formalen Anforderungen wie für eine Facharbeit.

Die formalen Anforderungen finden sich hier: SIBI-Homepage: Facharbeit


Außerdem gibt es auf dieser Seite auch Vorlagen für die Formatierung einer Arbeit! (Sowohl MS-Word als auch LibreOffice-Writer.) Am einfachsten lädt man sich die Vorlage runter und schreibt darin seine Arbeit - dann ist die Formatierung "automatisch" richtig.

Themen für die Projektarbeit

Hier werden einige Themen vorgeschlagen. Nach Absprache sind natürlich auch ganz andere Themen möglich!

  1. Ameisenalgorithmus zur Lösung des Travelling-Salesman-Problems:
    Ameisenalgorithmus(Wikipedia)
  2. Greedy-Algorithmus am Beispiel Wechselgeld rausgeben:
    Beispiel: 3,47 Euro soll mit möglichst wenig Münzen herausgegeben werden.
    Zu zeigen sind auch die Grenzen des Greedy-Algorithmus in diesem Beispiel, d.h. dass er nicht immer eine ideale Lösung findet.
  3. Aus einer Liste von 1.000.000 Codes möglichst schnell den häufigsten finden.
    Dafür braucht man Hashmaps, d.h. das Hashing-Verfahren muss erklärt werden.
    Python / Java
  4. Planetenbahnen zeichnen:
    Aus den Gesetzen der Schwerkraft kann man Näherungen gewinnen, so dass man (näherungsweise) Schritt für Schritt eine Planetenbahn zeichnen kann.
    Scratch!
  5. Eine Doppelfeder simulieren:
    Aus physikalischen Gesetzen das Verhalten einer Doppelfeder näherungsweise darstellen.
    Scratch!
  6. Rucksackproblem:
    Pareto-optimale Punkte nutzen
    Algorithmus der Woche
  7. Ein Stromnetz optimal planen:
    Minimaler Spannbaum
    Algorithmus der Woche
  8. Konvexe Hülle:
    Die Konvexe Hülle (d.h. "Umrandung") einer Punktmenge möglichst schnell bestimmen.
  9. Den Zauberwürfel lösen:
    Einen Algorithmus zum Lösen des Zauberwürfels programmieren.
  10. Travelling Salesman Problem (TSP)
    z.B. Nearest-Neighbor-Heuristik zum Lösen des TSP für n>18
    Wikipedia: Problem des Handlungsreisenden
    Wikipedia: Nearest-Neighbor-Heuristik
  11. Wie macht man die beste Ausbeute an Glücksspielautomaten?
    Das Multi-Armed-Bandit Problem:
    Wikipedia (en): Multi-Armed-Bandit
  12. Optimale Verkehrsplanung:
    Maximale Flüsse
    Algorithmus der Woche
  13. Minimale Spannbäume berechnen mit dem Algorithmus von Prim
    Algorithmus-von-Prim-(Wikipedia)
  14. Minimale Spannbäume berechnen mit dem Algorithmus von Kruskal
    Algorithmus-von-Kruskal-(Wikipedia)
  15. Mit welcher Wahrscheinlichkeit würfelt man beim Spiel Kniffel einen Kniffel (d.h. 5 Gleiche?).
    Zu berücksichtigen ist, dass man bei Kniffel 3x nicht passende Zahlen zurücklegen kann.
    Die Qualität des Ergebnisses muss man geeignet abschätzen, z.B. mit statistischen Verfahren.
    Einfache Programmierung, dafür muss man mehr Mathematik anwenden.
  16. Suchen in O(1):
    Hashing
    Wikipedia: Hash-Funktion
    Algorithmus der Woche
  17. Pi berechnen mit einem Monte-Carlo-Algorithmus
    Die Programmierung ist sehr einfach - hier wäre der Schwerpunkt mathematisch: Wie oft muss man "schießen", um mit 95%er Wahrscheinlichkeit eine Abweichung von 1% (bzw. 0,1% oder 0,001%) zu erzielen. D.h. man braucht hier Statistik.
    Daran schließt sich die Frage an, wie effektiv der Algorithmus ist.
    Scratch!
  18. Pi berechnen mit einem rekursiven Algorithmus:
    Einen geeigneten rekursiven Algorithmus recherchieren, seine Herleitung, Genauigkeit
  19. Integrale näherungsweise berechnen mit der Trapezregel:
    Abschätzung der Genauigkeit
  20. Magische Quadrate berechnen:
    Systematisches Probieren.
  21. Projektwoche: Wie verteilt man die Schüler auf Projekte?
    1000 Schüler und 50 Projekte; an jedem Projekt dürfen max. 25 Schüler teilnehmen. Jeder Schüler hat 3 Wunschprojekte angegeben.
    Wie verteilt man die Schüler, so dass möglichst viele in ein Wunschprojekt kommen?
  22. Welche Funktion erfüllt die Differentialgleichung y'(x) = y2(x) + y(x) ?
    Für Differentialgleichungen dieser Art gibt es numerische Verfahren, die (gute!) näherungsweise Lösungen ausgeben.
    Wikipedia: Numerische Verfahren für gewöhnliche Differentialgleichungen
  23. Numerische Verfahren:
    Ziel der Numerik ist es "das eigentlich Unberechenbare zu berechnen, und das in Lichtgeschwindigkeit."
    Es gibt SEHR unterschiedliche numerische Verfahren für SEHR VIELE unterschiedliche Problemstellungen
    Wikipedia: Liste numerischer Verfahren
  24. Lässt sich eine Landkarte mit 3 Farben einfärben? - das P-NP-Problem
    Zur Klasse P gehören alle Entscheidungsprobleme, die in polynomieller Zeit gelöst werden können.
    Zur Klasse NP gehören alle Entscheidungsprobleme, bei denen die Antwort "JA" in polynomieller Zeit verifiziert werden kann.

    Es soll aufgezeigt werden, dass das 3-Farben-Problem nicht zur Klasse P, aber zur Klasse NP gehört.
    Außerdem soll die Bedeutung von NP-vollständigen Problemen für die Algorithmik an diesem Beispiel erläutert werden.
    Das ist eine rein theoretische Arbeit!
    Wikipedia: Färbung eines Graphen
    Erläuterung von P und NP
    Wikipedia: 21 NP-vollständige Probleme
  25. Sortieren mit AVL-Bäumen
    Dafür braucht man Java!