- left
- right
- up
- down
Guten Tag,
Ich habe einige implementierungsspezifische Fragen zur Bewertung.
Wie wichtig ist die Programmoptimierung, ist sie gar das oberste Ziel oder ist Klarheit und Verständlichkeit wichtiger?
Konkret anhand einiger Beispiel in der Programmiersprache Python:
list_of_lists: List[list[int]] map(sum, list_of_lists)
oder[sum(l) for l in list_of_lists]
verwenden?min_number = min(list_of_numbers) index = list_of_numbers.index(min_number)
eine eigene Implementation mit nur einer Iteration der Liste verwenden?Vielen Dank!
Mit freundlichen Grüßen
PN
Hallo,
ich würde sagen die Verständlichkeit ist wichtiger als solche Mikrooptimierungen. Ob man einmal oder zweimal über die Liste iteriert mach in der Regel keinen großen Unterschied. Wichtiger ist die theoretische Laufzeit (Big-O Notation).
Zu 2 und 3: Ich hätte keine Bedenken built-ins zu benutzen. Die Leute die sich Deine Lösung anschauen können schließlich Programmieren. Es macht das Programm eher schwerer verständlich, wenn man für Funktionen wie min() oder index() eigene Funktionen implementiert.
Hallo,
Tobias weist auf etwas wichtiges hin: Die asymptotische Laufzeit (Groß-O-Notation) ist bzgl. der Effizienz meist am wichtigsten. In dieser Notation hat ein Algorithmus, der eine Liste zwei- statt einmal durchgeht, die gleiche (lineare) theoretische Laufzeit, während beispielsweise ein Algorithmus, der alle Paare von Elementen der Liste durchgeht, eine quadratische Laufzeit hätte. Dieser Unterschied ist deshalb so bedeutend, weil er viel über die Skalierbarkeit des Algorithmus verrät: Im ersteren Fall verdoppelt sich die Laufzeit bei doppelt so großer Eingabegröße, im letzteren vervierfacht sie sich.
Nichtsdestoweniger wird ein Programm natürlich wirklich langsamer, wenn es mehr Iterationen enthält (in Deinem Beispiel würde es, für diese eine Instruktion, doppelt so lange brauchen). Wo sich das ohne größere Auswirkungen auf die Lesbarkeit vermeiden lässt und sich nennenswert auf die tatsächliche Gesamtlaufzeit auswirkt, spricht sicherlich nichts dagegen.
Etwas konkreter zu Deinen Punkten: