====== 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