LU07.A09 - Datenstruktur begründet auswählen
Lösen Sie dieselbe Aufgabe mit drei Datenstrukturen, messen Sie alle drei und sprechen Sie eine begründete Empfehlung aus - inklusive der Fälle, in denen Ihre Empfehlung falsch wäre.
Die Aufgabe
Eine Bibliothek führt eine Sperrliste. Zu jeder Ausleihe muss geprüft werden, ob das Konto gesperrt ist; bei gesperrten Konten wird zusätzlich der Sperrgrund angezeigt.
import random random.seed(7) gesperrte_konten = [(f"konto{i}", "Mahnung offen" if i % 2 else "Ausweis abgelaufen") for i in range(20000)] ausleihen = [f"konto{random.randrange(40000)}" for _ in range(5000)]
Detaillierte Aufgabenstellung
- Implementieren Sie
pruefen(ausleihen, gesperrte)dreimal, mitgesperrteals:- Liste von Tupeln (wie oben)
- Set der gesperrten Kontonummern, Grund über eine zweite Struktur
- Dict
{konto: grund}
- Alle drei Fassungen liefern dieselbe Liste von
(konto, grund)-Paaren, in derselben Reihenfolge. Belegen Sie das mitassert. - Messen Sie alle drei mit
timeit. Messen Sie den Aufbau der Datenstruktur separat von der Abfrage. - Erstellen Sie eine Empfehlungstabelle.
Zu beantwortende Fragen
- Ab welcher Datenmenge lohnt sich der Aufbau eines Index? Messen Sie mit 100, 2000 und 20'000 gesperrten Konten.
- Was geht beim Wechsel von der Liste zum Set oder Dict verloren?
- In welchem Szenario wäre die Liste trotz schlechterer Laufzeit die richtige Wahl?
- Warum ist das Dict hier dem Set überlegen, obwohl beide O(1) sind?
Diese Aufgabe deckt das Portfolio-Artefakt D1A ab: Messung vorher/nachher plus Begründung der gewählten Datenstruktur. Übertragen Sie das Vorgehen auf eine echte Stelle in Ihrem Flask-Projekt.
