Setzen Sie vier vorgegebene Performance-Massnahmen um und belegen Sie jede mit einer Messung vorher und nachher.
| Nr. | Funktion | Vorgegebene Massnahme |
|---|---|---|
| 1 | gesperrte_anfragen | geeignetere Datenstruktur wählen |
| 2 | zuordnen | innere Schleife durch einen Index ersetzen |
| 3 | fibonacci | Memoization einsetzen |
| 4 | top_drei_pro_kunde | unveränderliche Arbeit aus der Schleife ziehen |
Die Testdaten erzeugt main.py selbst und reproduzierbar (fester Seed). Die Signaturen bleiben unverändert, sonst laufen die Tests nicht.
assert alt == neu. Eine schnellere Funktion mit anderem Ergebnis ist keine Optimierung, sondern ein Bug.MESSUNGEN.md festhalten.Eine Tabelle mit fünf Spalten: Massnahme, vorher (s), nachher (s), Faktor, Begründung.
| Teil | Punkte |
|---|---|
Tests (main_test.py) | 14 |
pylint (main.py) | 5 |
Die Tests prüfen zweierlei: identisches Ergebnis und mindestens Faktor 20 gegenüber der langsamen Referenzfassung im Testfile. Der Faktor ist bewusst tief angesetzt; wer die Massnahme richtig umsetzt, erreicht ein Vielfaches.
Achtung bei Massnahme 4: Die naheliegende Lösung teilt allen Kunden dieselbe Liste zu. Solange niemand sie verändert, fällt das nicht auf. test_top_drei_listen_sind_unabhaengig fängt es ab - der Referenz-Effekt aus LU02d.
Achtung bei Massnahme 2: Die Vorher-Version überspringt Bestellungen ohne passenden Kunden stillschweigend. Ein reiner Index-Zugriff wirft dort einen KeyError - das wäre eine Verhaltensänderung.