Hallo Stefan,
Am 27.07.2017 um 23:26 schrieb Stefan Ziegler:
Hallo Urs,
Hast du die Python-Programme lokal getestet?
Ja, natürlich, soweit mir das möglich war. In den ersten Kursen gab es auch noch einfach die Gelegenheit zum Stress-Testing, weil die Vorgabedateien einen naiven Algorithmus implementiert hatten. Damit konnte man für kleinere Datenmengen Vergleiche anstellen und zumindest die Korrektheit der Ergebnisse überprüfen.
Wenn das fehlt, ist man allerdings auf sich alleine gestellt und muss versuchen, die gefährlichen Fälle mit großen Datenmengen herauszufinden und gezielt zu testen. Dabei komme ich allerdings an meine Grenzen.
Kann man die Lernumgebung auf der Webseite lokal nachbauen, um dann mehr Rückmeldungen zu bekommen?
Nein. Wie gesagt bekommt man bei den jeweils ersten Aufgaben eines Kurses sowohl die Eingabedaten als auch die (falschen) Antworten geliefert, später wird man aber bewusst im Dunkeln gelassen.
Es macht nicht wirklich Spaß, stundenlang in einer Umgebung zu testen, wo man keine sinnvollen Rückmeldungen bekommt.
Das stimmt allerdings. *Sinn* macht es aber bis zu einem gewissen Grad schon.
Gerade bei Programmen für Anfänger und Einsteiger geht es doch nicht um Laufzeitoptimierung sondern um klare, einfache Struktur.
Doch, darum geht es hier durchaus. Das Programmieren ist ja nicht Gegenstand des Kurses (wird vorausgesetzt), sondern die Algorithmen. Und es geht darum, die Erfahrung zu machen, welche spektakulären Laufzeitunterschiede Details des Algorithmus und der Implementierungen machen können. Wenn man (nicht-professionell) vor sich hin programmiert, probiert man ja i.d.R. mit ein paar Fällen herum und verarbeitet dann ein paar Dutzend, Hundert oder auch Tausend Datensätze - und das geht mit heutigen Computern eben doch auch mit dem schlechtesten Algorithmus. Wenn man dann aber einen Baum mit bis zu 10^5 Knoten verarbeiten soll, macht es doch einen signifikanten Unterschied. Während ich die Beispiele für diese Anfrage vorbereitet habe, konnte ich eine Aufgabe doch selber lösen, indem ich beim Durchlaufen eines Baums die Zeile
return left + [index] + right in return left[0::-1] + [index] + right[0::-1]
umwandelte. Auf einmal brach der Grader nicht mehr bei 20 Sekunden ab (er bricht immer nach dem Doppelten der erlaubten Zeit ab, so dass man nicht weiß, ob der Algorithmus nicht terminiert oder doch einfach nur zu lange braucht), sondern gab eine maximale Zeit von 1.05 Sekunden an.
Diese Art von Engpässen selbst zu finden, ist die Vorgabe der Kurse. Und grundsätzlich finde ich das auch gut. Allerdings kann man u.U. in einer Sackgasse landen, wenn man einfach nicht weiter weiß. Es gibt natürlich die Diskussionsforen, wo auch Mentoren und gelegentlich die Dozenten antworten. Es ist aber (natürlich) ausdrücklich verboten, dort konkreten Code zu teilen.
Herzliche Grüße Urs
Viele Grüße, Stefan Ziegler.
Gesendet: Donnerstag, 27. Juli 2017 um 19:58 Uhr Von: "Urs Liska" ul@openlilylib.org An: flug@lug-freiburg.de Betreff: [Flug] (OT?) Algorithmen und Datenstrukturen
Hallo zusammen,
ich schreibe das an diese Gruppe, weil sie mir den nächstliegenden bzw. persönlichsten Kontakt zu versprechen scheint und weil die Frage hier vielleicht am wenigsten "OT" ist (weil das "T" ja auch nicht ganz so spezifisch eingeschränkt ist). Es ist aber ganz klar, dass ich nur in die Runde frage, ob jemand *Interesse* an der Sache hat, ich erhebe keinerlei *Anspruch* auf Unterstützung. Und zwar Interesse daran, ein paar Python-Dateien anzusehen und (helfend) zu diskutieren.
Ich mache gerade eine Serie von Online-Kursen bei Coursera zum Thema Algorithmen und Datenstrukturen (ein Versuch, etwas gegen meine langgehegte Frustration über fehlende Grundlagen zu tun). Insgesamt läuft es sehr gut und ich bin froh, es angefangen zu haben, aber in einigen Fällen komme ich doch nicht weiter. Das heißt letztlich, dass meine Programmieraufgaben vom System zurückgewiesen werden, weil irgendein Testfall ein falsches Ergebnis provoziert oder weil die Lösung für einen Fall zu lange rechnet. Das Interessante, aber auch Frustrierende an den Kursen ist, dass man außer bei den ersten Aufgaben jeder Einheit nur diese Information erhält, aber weiter nichts über die Fälle oder falschen Ergebnisse.
Was ich also gerne hätte, wäre, dass sich jemand Python-Dateien ansieht, die z.B. eine Lösung für die Frage haben "Ist die Eingabe ein korrekter BInärer Suchbaum?" oder "Gibt es in dem gegebenen gerichteten Graphen negative Zyklen?" und Ähnliches. Ich will auf keinen Fall, dass mir jemand die Lösungen anbietet bzw. schreibt. Vielmehr wäre ich dankbar für konkrete Hinweise auf (versteckte) Fehler oder Optimierungsmöglichkeiten meiner Algorithmen bzw. Implementierungen.
HG Urs
-- ul@openlilylib.org https://openlilylib.org http://lilypondblog.org
Freiburger Linux User Group Mail an die Liste: flug@lug-freiburg.de Mailingliste verwalten (u.a. abbestellen): https://lug-freiburg.de/mailman/listinfo/flug