Dies ist eine alte Version des Dokuments!


LU07.A08 - Vorgegebene Massnahmen umsetzen

Setzen Sie vier vorgegebene Performance-Massnahmen um und belegen Sie jede mit einer Messung vorher und nachher.

import random
random.seed(42)
 
gesperrt = [f"user{i}" for i in range(10000)]
anfragen = [f"user{random.randrange(20000)}" for _ in range(2000)]
 
kunden = [{"id": i, "name": f"K{i}"} for i in range(2000)]
bestellungen = [{"kunde_id": random.randrange(2000), "betrag": 10} for _ in range(2000)]

Massnahme 1

def gesperrte_anfragen(anfragen, gesperrt):
    return sum(1 for a in anfragen if a in gesperrt)

Vorgabe: Ersetzen Sie die Datenstruktur für gesperrt.

Massnahme 2

def zuordnen(bestellungen, kunden):
    out = []
    for b in bestellungen:
        for k in kunden:
            if k["id"] == b["kunde_id"]:
                out.append((k["name"], b["betrag"]))
                break
    return out

Vorgabe: Ersetzen Sie die innere Schleife durch einen Index.

Massnahme 3

def fibonacci(n):
    return n if n < 2 else fibonacci(n - 1) + fibonacci(n - 2)

Vorgabe: Setzen Sie Memoization ein.

Massnahme 4

def top_drei_pro_kunde(kunden, produkte):
    ergebnis = {}
    for k in kunden:
        top = sorted(produkte, key=lambda p: p["preis"])[:3]
        ergebnis[k["name"]] = [p["name"] for p in top]
    return ergebnis

Vorgabe: Ziehen Sie unveränderliche Arbeit aus der Schleife heraus.

  1. Messen Sie vor der Änderung mit timeit (LU07f): min(timeit.repeat(funktion, number=1, repeat=5)).
  2. Setzen Sie die Massnahme um.
  3. Prüfen Sie mit assert alt(…) == neu(…), dass das Ergebnis identisch bleibt.
  4. Messen Sie nach und halten Sie beide Zahlen sowie den Faktor fest.
  5. Notieren Sie zu jeder Massnahme in einem Satz: Warum ist die neue Fassung schneller?

Eine Tabelle mit fünf Spalten: Massnahme, vorher (s), nachher (s), Faktor, Begründung.


© Kevin Maurizi

  • modul/m323/learningunits/lu07/aufgaben/performance.1788945382.txt.gz
  • Zuletzt geändert: 2026/09/09 11:16
  • von admin