Python und Algorithmen

Warum sollen Systemintegratoren programmieren?

Beherrschung moderner IT-Infrastrukturen erfordert:

  • Automatisierung
  • Skripting
  • API-Verständnis

Wer Systeme baut, muss sie auch automatisieren, integrieren und analysieren können.

Warum sollen SIs programmieren?

  • Automatisierung von Routineaufgaben: Userverwaltung, Backups, Logrotation, Updates, Monitoring; ohne Skripte manuell, fehleranfällig, langsam
  • Skripting für Betriebssysteme: PowerShell, Bash, Python sind Standard für Admins
  • Infrastructure as Code: Ansible, Terraform, Cloud-Deployments basieren auf deklarativer oder prozeduraler “Programmierung”
  • API-Verständnis: Moderne Systeme kommunizieren über REST-APIs
  • Fehleranalyse: Logs parsen, Daten filtern, Zusammenhänge erkennen
  • Automatisiertes Deployment: CI/CD-Pipelines, Container, Cloud-Umgebungen
  • Konfigurationsmanagement: Tools wie Puppet, Chef, Ansible nutzen YAML, Python, DSLs
  • Netzwerkautomatisierung: Switch-Konfigurationen, Firewall-Regeln, VLAN-Rollouts: heute oft automatisiert statt manuell
  • Sicherheitsaufgaben: Schwachstellenscans, Log-Korrelation, Incident-Response: Skripte
  • Cloud-Kompetenz: AWS, Azure, GCP: alles API- und Code-getrieben
  • DevOps-Kultur verlangt, dass Admins und Entwickler gemeinsam arbeiten
  • Prüfungsrelevanz: AP1 / AP2 enthalten regelmäßig Skript- und Automatisierungsaufgaben

Python: for-Schleifen

Eine for‑Schleife wiederholt Anweisungen für jedes Element in einer Sequenz.

for i in range(5):
    print("Durchlauf:", i)
Durchlauf: 0
Durchlauf: 1
Durchlauf: 2
Durchlauf: 3
Durchlauf: 4

Python: range() verstehen

range() liefert eine Folge von Zahlen.

range(5)
range(2, 6)
range(0, 10, 2)
0,1,2,3,4
2,3,4,5
0,2,4,6,8

Python Tutorial


Python Tutorial von J. Lötzsch:
https://johannesloetzsch.github.io/python-tutorial/index.html


Online Python:
https://www.online-python.com/

Sortieralgorithmen: Bubble Sort

  • Vergleicht wiederholt benachbarte Elemente und vertauscht sie, wenn sie sich in der falschen Reihenfolge befinden
  • Größte Elemente “wandern” pro Durchlauf nach rechts (wie Blasen nach oben)
  • Wird wiederholt, bis keine Vertauschungen mehr nötig sind
  • Vorteil: relativ einfach zu verstehen
  • Nachteil: ineffizient bei großen Datenmengen
  • Laufzeit: O(n²)

Was bedeutet O(n²)?

  • Aussprache: „O von n Quadrat“
  • O steht für „Order of“ → beschreibt die Größenordnung des Wachstums
  • n ist die Eingabegröße (z. B. Anzahl der Listenelemente)
  • Quadratisches Wachstum: Verdoppelt man n, vervierfacht sich die Laufzeit
  • Typisch bei Algorithmen mit verschachtelten Schleifen

Bubble Sort: Ablauf

Python: doctests

Doctests sind eingebettete Tests in Docstrings, die wie interaktive Python‑Beispiele aussehen (>>>).

Zweck:

  • Dokumentation und Test in einem Schritt
  • Zeigen, wie eine Funktion benutzt wird
  • Prüfen automatisch, ob die Beispiele noch stimmen

Dokumentation: https://docs.python.org/3/library/doctest.html

Python: doctests

Beispiel:

def add(a, b):
    """
    Add two numbers.

    >>> add(2, 3)
    5
    """
    return a + b

Sortieralgorithmen: Selection Sort

  • Sucht im unsortierten Teil das kleinste (oder größte) Element
  • Tauscht es an die aktuelle Position
  • Verschiebt die Grenze zwischen sortiertem und unsortiertem Bereich Schritt für Schritt
  • Wenige Vertauschungen, aber viele Vergleiche
  • Laufzeit: O(n²)

Selection Sort: Ablauf

Sortieralgorithmen: Insertion Sort

  • Baut die sortierte Liste schrittweise auf
  • Nimmt das nächste Element und fügt es an der richtigen Stelle im bereits sortierten Teil ein
  • Gut für kleine oder fast sortierte Listen
  • Intuitiv (ähnlich wie Kartensortieren in der Hand)
  • Laufzeit: O(n²), aber sehr schnell für fast sortierte Daten

Insertion Sort: Ablauf

Sortieralgorithmen: Merge Sort

  • Teilt die Liste rekursiv in immer kleinere Hälften
  • Sortiert die Teilstücke und führt sie geordnet wieder zusammen („merge“)
  • Nutzt das Prinzip Divide and Conquer (“Teile und herrsche”)
  • Sehr effizient, auch bei großen Datenmengen
  • Laufzeit: O(n log n)
  • Stabil und gut parallelisierbar

Merge Sort vs. Bubble / Selection / Insertion Sort

  • Deutlich schneller: O(n log n) statt O(n²)
  • Komplexer zu implementieren
    (Rekursion + Zusammenführen)
  • Benötigt zusätzlichen Speicher zum Mergen
  • Für große Datenmengen klar überlegen
  • Während die einfachen Sortierverfahren oft verschachtelte Schleifen nutzen, arbeitet Merge Sort mit Teilen und Zusammenfügen

Sortieralgorithmen: Quick Sort

  • Teile-und-Herrsche-Algorithmus: zerlegt Problem in kleinere Teilprobleme -> Rekursion!
  • Wählt ein Element als Pivot aus (z. B. erstes, letztes oder mittleres)
  • Partitionierung
    • Alle Elemente kleiner als Pivot nach links, E. größer als P. nach rechts
    • Pivot wird an seiner endgültigen Position platziert
  • Laufzeiten:
    • Günstiger Fall: O(n log n)
    • Ungünstiger Fall: max. O(𝑛²) (z. B. wenn Pivot ungünstig gewählt wird)
  • Geringer Speicherbedarf: meist wird im Array (in place) umsortiert
  • Nicht stabil: relative Reihenfolge gleicher Elemente kann sich ändern!

O(n log n) vs. O(n²)

n (Länge Liste) n log2(n) (ungefähr) n²
10 33 100
100 664 10 000
1 000 9 966 1 000 000
10 000 132 877 100 000 000
1 000 000 19 931 568 1 000 000 000 000

Quadratische vs. Logarithmische Sortierverfahren

Quadratische Sortierverfahren Logarithmische Sortierverfahren
Vorteile
– Einfache Implementierung
– Gut für kleine Datenmengen
– Leicht verständlich
– Einfaches Debugging
Vorteile
– Effizientere und schnellere Sortierung
– Gute Skalierbarkeit
– Häufiger Standard in Bibliotheken
Nachteile
– Je nach Datenmenge sehr ineffizient
– Viele unnötige Vertauschungen
– Nicht optimal für moderne Hardware
– Nicht für verteilte Systeme geeignet
Nachteile
– Aufwändige Implementierung
– Benötigt ggf. zusätzlichen Speicherplatz
– Ggf. höherer Verwaltungsaufwand
Beispiele
– Bubble Sort
– Selection Sort
– Insertion Sort
Beispiele
– Merge Sort
– Quick Sort

Viel Erfolg mit allen Algorithmen!

Zurück zur Übersicht LF8