Einführung in die Algorithmik

In dieser Einstiegslektion lernst du die grundlegenden Konzepte der Algorithmik anhand praktischer Beispiele kennen. Du verstehst, was einen Algorithmus ausmacht und wie er sich von einfachen Anleitungen unterscheidet. Anhand eines alltäglichen Kuchenrezepts erkennst du die wichtigsten Eigenschaften und Prinzipien algorithmischen Denkens.

Einführung

Stell dir vor, du musst einem Roboter beibringen, wie man einen Kuchen backt. Du kannst ihm nicht einfach sagen: “Mach einen Kuchen.” Du musst jeden einzelnen Schritt klar und eindeutig beschreiben - vom Abwiegen der Zutaten bis zum Einschalten des Ofens.

Nur wenn jeder Schritt präzise definiert ist, kann der Roboter das gewünschte Ergebnis liefern.

Genau das ist die Grundidee der Algorithmik: Probleme so zu formulieren, dass sie von einem Computer verstanden und zuverlässig gelöst werden können.

In dieser Lerneinheit lernst du, was einen Algorithmus ausmacht, welche Eigenschaften er haben muss und wie du ihn planst und darstellst, bevor er in Code umgesetzt wird.

Lernziele

Nach dieser Lerneinheit kannst du

  • den Begriff Algorithmus präzise definieren und die fünf Kriterien (Eingabe, Ausgabe, Eindeutigkeit, Ausführbarkeit, Endlichkeit) sicher anwenden.
  • Qualitätsmerkmale von Algorithmen (Korrektheit, Effizienz, Skalierbarkeit) beurteilen und deterministische von randomisierten Verfahren unterscheiden.
  • Abstraktion und Modularisierung auf ein Problem übertragen und geeignete Funktionen/Methoden strukturiert ableiten.
  • Algorithmen in Pseudocode, Flussdiagrammen und Struktogrammen korrekt darstellen und die Darstellungsformen zielgerichtet auswählen.

Was ist ein Algorithmus?

Ein Algorithmus ist eine präzise und endliche Schritt-für-Schritt-Anleitung zur Lösung eines Problems. Stell es dir wie ein Kochrezept für den Computer vor: Eine klar definierte Abfolge von Anweisungen, die von einer Maschine ausgeführt werden kann, um von einem Anfangszustand (Problem) zu einem Endzustand (Lösung) zu gelangen.

Die Analogie: Ein Kuchenrezept

Ein Kuchenrezept ist ein perfektes Beispiel, um das Konzept zu verstehen. Es beschreibt exakt, was zu tun ist, um ein vorhersehbares Ergebnis – den Kuchen – zu erhalten.

  • Eingabe (Input): Die Zutaten (z.B. 250g Mehl, 150g Zucker, 3 Eier). In der Programmierung sind das die Parameter oder Variablen, die eine Funktion erhält.
    int mehlMenge = 250;
    int zuckerMenge = 150;
  • Verarbeitung (Process): Die einzelnen Schritte des Rezepts (Ofen vorheizen, Zutaten mischen, Teig kneten). Dies entspricht den Anweisungen, Schleifen, Bedingungen und Funktionsaufrufen in deinem Code.
    heizeOfenVor(180);
    Teig teig = mischeZutaten(mehlMenge, zuckerMenge, ...);
  • Ausgabe (Output): Der fertige Kuchen. In der Programmierung ist das der Rückgabewert einer Funktion oder der veränderte Zustand des Systems.

Eigenschaften von Algorithmen

Man unterscheidet zwischen den grundlegenden Eigenschaften, die eine Anleitung überhaupt erst zu einem Algorithmus machen, und den Qualitätsmerkmalen, die einen guten von einem schlechten Algorithmus unterscheiden.

Grundlegende Eigenschaften (Die Definition)

Damit eine Anleitung als Algorithmus gilt, muss sie diese fünf Kriterien zwingend erfüllen:

  1. Eingabe (Input): Ein Algorithmus besitzt null oder mehr eindeutig definierte Eingaben.
  2. Ausgabe (Output): Ein Algorithmus erzeugt mindestens eine eindeutig definierte Ausgabe.
  3. Eindeutigkeit (Definiteness): Jeder Schritt muss klar und unmissverständlich formuliert sein. Die Anweisung “eine Prise Salz” ist für einen Computer nicht eindeutig, “füge 1g Salz hinzu” hingegen schon.
  4. Ausführbarkeit (Effectiveness): Jeder einzelne Schritt muss tatsächlich durchführbar sein. Die Anweisung “Zähle alle Sandkörner der Sahara” wäre nicht ausführbar.
  5. Endlichkeit (Finiteness): Ein Algorithmus muss nach einer endlichen Anzahl von Schritten zu einem Ende kommen. Eine Endlosschleife (while(true) ohne Abbruchbedingung) verletzt dieses Prinzip.

Qualitätsmerkmale (Die Bewertung)

Wenn die Grundvoraussetzungen erfüllt sind, bewerten wir Algorithmen nach weiteren Kriterien, um ihre Praxistauglichkeit zu beurteilen:

  • Korrektheit (Correctness): Der Algorithmus muss das Problem für alle zulässigen Eingaben korrekt lösen. Ein Sortieralgorithmus, der nur manchmal die richtige Reihenfolge liefert, ist fehlerhaft.
  • Effizienz (Efficiency): Ein guter Algorithmus löst ein Problem mit möglichst geringem Ressourcenverbrauch (Rechenzeit und Speicher). Die Analyse der Effizienz ist ein zentrales Thema der Komplexitätstheorie.
  • Skalierbarkeit (Scalability): Wie gut verhält sich der Algorithmus, wenn die Eingabemenge stark wächst? Ein Algorithmus, der für 100 Datensätze schnell ist, aber bei 1 Million Datensätzen unbrauchbar langsam wird, skaliert nicht gut.

Eine weitere wichtige Eigenschaft: Determinismus

Ein Algorithmus kann deterministisch oder nicht-deterministisch sein. Dies ist eine Klassifizierung, kein Qualitätsmerkmal.

  • Determinismus: Ein deterministischer Algorithmus liefert für dieselbe Eingabe bei jeder Ausführung exakt dasselbe Ergebnis und durchläuft denselben Weg. Dies ist der “Normalfall” in vielen Anwendungsbereichen.
  • Nicht-Determinismus / Randomisierung: Ein randomisierter Algorithmus enthält Zufallselemente. Er kann für dieselbe Eingabe unterschiedliche Ergebnisse liefern oder verschiedene Lösungswege nehmen.

Das wichtigste Werkzeug: Abstraktion

In der Anwendungsentwicklung lösen wir selten alles in einem einzigen, riesigen Algorithmus. Wir nutzen Abstraktion: Wir zerlegen ein komplexes Problem in kleinere, handhabbare Teilprobleme und schreiben für jedes eine separate Lösung.

Statt einen riesigen Algorithmus “Baue ein Auto” zu schreiben, definieren wir kleinere Algorithmen (oder in der Programmierung: Funktionen, Methoden und Klassen):

  • montiereMotor()
  • befestigeRad(radPosition)
  • lackiereKarosserie(farbe)

Der Hauptalgorithmus ruft diese Bausteine dann in der richtigen Reihenfolge auf. Wir müssen als Aufrufer nicht wissen, wie ein Rad im Detail befestigt wird, nur dass die Funktion befestigeRad() es korrekt tut.

Dieses Prinzip ist die Grundlage für wiederverwendbaren Code, APIs und Frameworks und damit ein Kernkonzept deiner täglichen Arbeit.

⏳ Lädt Dataview-Inhalt...

Wie man Algorithmen darstellt

Ein Algorithmus ist zunächst nur ein logisches Konzept. Bevor man ihn in Code umsetzt, muss man ihn planen, verstehen und oft auch mit anderen diskutieren. Dafür gibt es verschiedene Darstellungsformen. Sie helfen uns, die Logik zu visualisieren und zu überprüfen, bevor eine einzige Zeile Code geschrieben wird.

Wir schauen uns drei zentrale Darstellungsformen an: Pseudocode, Flussdiagramme und Struktogramme.

Pseudocode

Pseudocode ist eine informelle, an eine menschliche Sprache angelehnte Beschreibung eines Algorithmus. Er verzichtet bewusst auf die strenge Syntax einer echten Programmiersprache und konzentriert sich stattdessen vollständig auf die logische Abfolge der Schritte.

Wann nutzt man ihn? Pseudocode ist ideal für den schnellen Entwurf von Algorithmen, zur Dokumentation oder wenn man die Logik mit Kollegen besprechen möchte, ohne sich in Details wie Semikolons oder Klammern zu verlieren. Er lässt sich später sehr leicht in jede beliebige Programmiersprache (wie Java, Python oder C#) übersetzen.

Beispiel: Gerade oder ungerade?

Dieser Pseudocode prüft, ob eine eingegebene Zahl gerade ist.

ALGORITHMUS: prüfe_ob_gerade

  EINGABE: ganze_zahl

  WENN ganze_zahl Modulo 2 gleich 0 ist DANN
      AUSGABE "Die Zahl ist gerade."
  SONST
      AUSGABE "Die Zahl ist ungerade."
  ENDE WENN

ENDE

Flussdiagramme (Flowcharts)

Ein Flussdiagramm (engl. Flowchart) ist eine grafische Darstellung, die den Ablauf und die Entscheidungen eines Algorithmus mit standardisierten Symbolen und Pfeilen zeigt.

Wann nutzt man sie? Flussdiagramme sind hervorragend geeignet, um komplexe Kontrollflüsse mit vielen Verzweigungen und Schleifen verständlich zu machen. Sie sind besonders nützlich in der Planungsphase oder um Nicht-Programmierern die Funktionsweise einer Logik zu erklären.

  • Ovale/abgerundete Rechtecke: Start- und Endpunkte
  • Rauten: Entscheidungen (Ja/Nein-Fragen)
  • Rechtecke: Operationen oder Anweisungen

Beispiel: Gerade oder ungerade?

Struktogramme

Hinweis: Das Struktogramm (Nassi-Shneiderman-Diagramm) ist laut aktuellem IHK-Prüfungskatalog nicht mehr prüfungsrelevant.

Ein Struktogramm (auch Nassi-Shneiderman-Diagramm genannt) ist eine kompakte, blockbasierte Darstellung. Es zwingt den Entwickler von vornherein zu einem gut strukturierten Entwurf, da es keine Möglichkeit gibt, “Spaghetti-Code” (z.B. mit goto-Sprüngen) darzustellen.

Wann nutzt man sie? Struktogramme eignen sich sehr gut, um die Schachtelung von logischen Blöcken (wie Schleifen in Schleifen oder if-else in einer case-Anweisung) übersichtlich darzustellen. Sie sind in der Ausbildung und bei der Planung von Algorithmen nach den Prinzipien der strukturierten Programmierung beliebt.

Die Entscheidungsstruktur wird dabei durch eine horizontale Trennlinie (Ja/Nein) innerhalb eines Blocks visualisiert.

Welche Form für welchen Zweck?

Jede Darstellungsform hat ihre Stärken. Die Wahl hängt vom Kontext ab: Wer ist die Zielgruppe, und was soll vermittelt werden?

DarstellungsformStärkeIdeal für…
PseudocodeSchnell, flexibel, nah am CodeSchnelle Entwürfe, Dokumentation, einfache Logik
FlussdiagrammSehr visuell, leicht verständlichDarstellung komplexer Abläufe, Kommunikation mit Nicht-Entwicklern
StruktogrammFördert saubere Struktur, kompaktLehre, Planung nach strukturierten Prinzipien, Schachtelungen

In der Praxis werden oft mehrere Formen kombiniert: Pseudocode für die schnelle Skizze, ein Flussdiagramm für die Präsentation beim Kunden.

⏳ Lädt Dataview-Inhalt...

Praxisnahe Übung

Finde die größte Zahl

Stell dir vor, du hast eine Liste mit mehreren Zahlen und deine Aufgabe ist es, die größte Zahl in dieser Liste zu finden und auszugeben.

Deine Aufgabe: Entwirf einen Algorithmus, der dieses Problem löst, und stelle ihn in den folgenden drei Formen dar:

  1. Pseudocode
  2. Flowchart (Flussdiagramm)
  3. Struktogramm (Nassi-Shneiderman-Diagramm)

Du kannst davon ausgehen, dass die Liste mindestens eine Zahl enthält.

Klicke hier, um die Musterlösung anzuzeigen

Musterlösung Struktogramm: Größte Zahl finden

1. Pseudocode

EINGABE: Eine Liste von Zahlen namens "zahlenListe"

1. Setze die erste Zahl aus der "zahlenListe" als vorläufige "groessteZahl".
2. FÜR JEDE weitere Zahl in der "zahlenListe":
3.   WENN die aktuelle Zahl > "groessteZahl" DANN
4.     Setze "groessteZahl" = aktuelle Zahl
5.   ENDE WENN
6. ENDE FÜR

AUSGABE: "groessteZahl"

2. Flowchart

3. Struktorgramm

Zusammenfassung

Zusammenfassung:

Algorithmus und seine Eigenschaften

Ein Algorithmus ist eine endliche, präzise und schrittweise Anleitung, um ein Problem zu lösen. Er wandelt einen Anfangszustand (Problem) über klar definierte Schritte in einen Endzustand (Lösung) um.

  • Eingabe (Input): Parameter oder Variablen, die der Algorithmus erhält.
  • Verarbeitung (Process): Logische Schritte wie Schleifen, Bedingungen und Funktionsaufrufe.
  • Ausgabe (Output): Das Ergebnis, z. B. ein Rückgabewert oder veränderter Systemzustand.

Damit eine Anleitung als Algorithmus gilt, muss sie folgende fünf Kriterien erfüllen:

  • Eingabe: Null oder mehr klar definierte Eingaben.
  • Ausgabe: Mindestens eine klar definierte Ausgabe.
  • Eindeutigkeit: Jeder Schritt muss eindeutig formuliert sein.
  • Ausführbarkeit: Jeder Schritt muss tatsächlich durchführbar sein.
  • Endlichkeit: Der Algorithmus endet nach endlich vielen Schritten.

Bewertungskriterien für gute Algorithmen:

  • Korrektheit: Liefert für alle Eingaben korrekte Ergebnisse.
  • Effizienz: Nutzt Zeit und Speicher optimal.
  • Skalierbarkeit: Funktioniert auch bei großen Datenmengen.

Ein Algorithmus kann deterministisch (gleiches Ergebnis bei gleicher Eingabe) oder nicht-deterministisch (z. B. mit Zufallsanteilen) sein.

Abstraktion und Modularisierung

Komplexe Probleme werden in Teilprobleme zerlegt. Jeder Teil wird durch eine Funktion oder Methode gelöst. Beispielhafte Teilalgorithmen:

  • montiereMotor()
  • befestigeRad(radPosition)
  • lackiereKarosserie(farbe)

Dieses Prinzip ermöglicht wiederverwendbaren Code und ist Grundlage von APIs und Frameworks. Der Hauptalgorithmus ruft Unterfunktionen in logischer Reihenfolge auf, ohne deren innere Funktionsweise zu kennen.

Darstellungsformen von Algorithmen

Zur Planung und Kommunikation von Logik werden drei zentrale Darstellungsformen verwendet:

1. Pseudocode: Informelle Beschreibung eines Algorithmus, die sich an menschliche Sprache anlehnt. Ideal für Entwurf und Diskussion.

ALGORITHMUS: prüfe_ob_gerade
EINGABE: ganze_zahl
WENN ganze_zahl Modulo 2 gleich 0 ist DANN
    AUSGABE "Die Zahl ist gerade."
SONST
    AUSGABE "Die Zahl ist ungerade."
ENDE

2. Flussdiagramm: Grafische Darstellung mit Symbolen für Start, Entscheidung und Operation. Eignet sich zur Visualisierung komplexer Kontrollflüsse.

3. Struktogramm: Blockbasierte Darstellung (Nassi-Shneiderman-Diagramm). Fördert strukturierte, verschachtelungsfreie Logik. Wird häufig in der Ausbildung eingesetzt.

DarstellungsformStärkeIdeal für
PseudocodeSchnell, flexibel, nah am CodeEntwurf, Dokumentation
FlussdiagrammVisuell, verständlichKomplexe Abläufe, Kommunikation
StruktogrammStrukturiert, kompaktLehre, Planung verschachtelter Logik

Anwendung und Relevanz

In der Anwendungsentwicklung bildet der Algorithmus das logische Fundament jeder Lösung.

  • Er ermöglicht planbare, reproduzierbare Prozesse.
  • Durch Abstraktion und Darstellung wird er verständlich, überprüfbar und implementierbar.
  • Die Wahl der richtigen Darstellungsform unterstützt Kommunikation, Wartung und Teamarbeit.

Jede dieser Formen hilft dir, Fehler frühzeitig zu erkennen und den Algorithmus effizient zu planen, bevor er in Code umgesetzt wird.

Ausblick:

Als Nächstes strukturierst du jedes Problem domänenunabhängig: Ziele, Stakeholder, Ist-Prozesse, Randbedingungen, Risiken und Datenflüsse. Daraus leitest du eine überprüfbare Spezifikation mit funktionalen Anforderungen, messbaren nicht-funktionalen Anforderungen, Schnittstellen, Datenmodellen und klaren Akzeptanzkriterien ab. So stellst du sicher, dass Design, Implementierung und Tests zielgerichtet arbeiten und Änderungen kontrolliert eingeplant werden können.