====== 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, mit ''gesperrte'' als:
* **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 mit ''assert''.
- 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.
----
{{tag>M323-LU07 M323-D1A}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi