Algorithmen definieren
Ein Algorithmus ist einfach ein schrittweises Verfahren zur Lösung eines Problems oder zur Erfüllung einer Aufgabe. Es ist eine präzise Reihe von Anweisungen, die, wenn sie korrekt befolgt werden, ein gewünschtes Ergebnis liefern. Algorithmen sind nicht nur Computern vorbehalten – du verwendest sie jeden Tag, ohne es zu merken.
Denken Sie an ein Rezept zum Backen von Keksen: Mischen Sie die Zutaten in einer bestimmten Reihenfolge, backen Sie sie bei einer bestimmten Temperatur, lassen Sie sie eine bestimmte Zeit abkühlen. Das ist ein Algorithmus. In der Programmierung lösen Algorithmen Rechenprobleme nach dem gleichen Prinzip: klare, eindeutige Schritte.
Beispiele für alltägliche Algorithmen
Bevor wir uns mit dem Code beschäftigen, werfen wir einen Blick auf Algorithmen im täglichen Leben:
- Kaffee zubereiten: Wasser kochen → Kaffeesatz in den Filter geben → Wasser über den Kaffeesatz gießen → Aufbrühen lassen → In die Tasse gießen
- Ein Wort im Wörterbuch finden: Öffnen bis zur Mitte → Ist das Wort davor oder danach? → Mit der entsprechenden Hälfte wiederholen → Wort gefunden
- Anziehen: Unterwäsche anziehen → Hose anziehen → Hemd anziehen → Socken anziehen → Schuhe anziehen
Beachte, dass jeder Algorithmus einen klaren Start, spezifische Schritte und ein definiertes Endziel hat. Computeralgorithmen funktionieren auf die gleiche Weise.
Algorithmus-Eigenschaften
Ein guter Algorithmus muss folgende Eigenschaften aufweisen:
- Eingang: Nimmt null oder mehr Eingaben
- Ausgabe: Erzeugt mindestens eine Ausgabe
- Bestimmtheit: Jeder Schritt ist klar und eindeutig
- Endlichkeit: Beendet nach einer endlichen Anzahl von Schritten
- Wirksamkeit: Die Schritte sind einfach genug, um ausgeführt zu werden
Pseudocode: Planung vor der Programmierung
Pseudocode hilft beim Entwurf von Algorithmen, bevor echter Code geschrieben wird:
// Algorithm: Find maximum number in a list
FUNCTION findMaximum(numbers):
SET max to first number in list
FOR EACH number in numbers:
IF number > max:
SET max to number
RETURN max
// Example usage
numbers = [5, 2, 9, 1, 7]
maximum = findMaximum(numbers) // Returns 9
Beispiel für echte Programmierung
Hier ist der gleiche Algorithmus in JavaScript:
function findMaximum(numbers) {
let max = numbers[0];
for (let i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
return max;
}
// Test the algorithm
const numbers = [5, 2, 9, 1, 7];
const maximum = findMaximum(numbers);
console.log(maximum); // Output: 9
Grundlagen der Big-O-Notation
Big O beschreibt, wie die Laufzeit eines Algorithmus mit zunehmender Eingabegröße wächst:
- O(1) – Konstant: Gleiche Zeit unabhängig von der Eingabegröße (Zugriff auf Array-Element)
- O(log n) – logarithmisch: Zeit wächst langsam (binäre Suche)
- O(n) – Linear: Die Zeit wächst proportional zum Input (Maximale Suche in der Liste)
- O(n²) – Quadratisch: Die Zeit wächst mit dem Quadrat des Inputs (verschachtelte Schleifen)
- O(2ⁿ) – Exponentiell: Die Zeit verdoppelt sich mit jeder Addition (einige rekursive Algorithmen)
Beispielvergleich mit 1000 Artikeln:
- O(1): 1 Operation
- O(log n): ~10 Operationen
- O(n): 1.000 Operationen
- O(n²): 1.000.000 Operationen
Gängige Sortieralgorithmen
Sortieren ist ein grundlegendes algorithmisches Problem. Hier ist Bubble Sort, eines der einfachsten:
function bubbleSort(arr) {
const n = arr.length;
// Outer loop: number of passes
for (let i = 0; i < n - 1; i++) {
// Inner loop: compare adjacent elements
for (let j = 0; j < n - i - 1; j++) {
// Swap if elements are in wrong order
if (arr[j] > arr[j + 1]) {
const temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
// Test
const unsorted = [64, 34, 25, 12, 22, 11, 90];
const sorted = bubbleSort(unsorted);
console.log(sorted); // [11, 12, 22, 25, 34, 64, 90]
Die Bubble-Sortierung hat eine Komplexität von O(n²) – sie ist einfach, aber für große Datensätze ineffizient. Fortgeschrittenere Algorithmen wie Quicksort und Mergesort sind schneller (O(n log n)).
Suchalgorithmen
Die lineare Suche überprüft jedes Element nacheinander:
function linearSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return i; // Found at index i
}
}
return -1; // Not found
}
// O(n) complexity - checks each element once
Die binäre Suche ist schneller, erfordert aber ein sortiertes Array:
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid; // Found
} else if (arr[mid] < target) {
left = mid + 1; // Search right half
} else {
right = mid - 1; // Search left half
}
}
return -1; // Not found
}
// O(log n) complexity - eliminates half the data each step
Strategien für das Algorithmen-Design
- Brute-Force: Alle Möglichkeiten ausprobieren (einfach, aber oft langsam)
- Teile und herrsche: Problem in kleinere Teilprobleme zerlegen (binäre Suche, Mergesort)
- Gierig: Treffen Sie bei jedem Schritt eine lokal optimale Wahl (Münzwechsel).
- Dynamische Programmierung: Ergebnisse von Teilproblemen speichern, um Neuberechnung zu vermeiden (Fibonacci)
- Rückverfolgung: Lösungen ausprobieren, rückgängig machen, wenn sie nicht funktionieren (Sudoku-Löser)
Warum Algorithmen wichtig sind
Das Verständnis von Algorithmen hilft Ihnen:
- Effizienteren Code schreiben, der schneller läuft und weniger Speicher verbraucht
- Wählen Sie den richtigen Ansatz zur Lösung von Problemen
- Bestehen Sie technische Vorstellungsgespräche bei großen Technologieunternehmen
- Verstehen, wie bestehende Tools und Bibliotheken funktionieren
- Datenbankabfragen und API-Aufrufe optimieren
- Debuggen von Leistungsproblemen in Anwendungen
Praxis-Ressourcen
Verbessern Sie Ihre Algorithmusfähigkeiten:
- LeetCode: Tausende von Algorithmusproblemen mit Lösungen
- HackerRank: Algorithmus-Herausforderungen nach Schwierigkeitsgrad
- Projekt Euler: Mathematische/berechnungstechnische Probleme
- Codewars: Gamifizierte Programmieraufgaben
- AlgoExpert: Videoerklärungen zu gängigen Interview-Algorithmen
Nächste Schritte
Erfahren Sie mehr über:
- Datenstrukturen (Arrays, verknüpfte Listen, Bäume, Graphen)
- Rekursion und rekursive Algorithmen
- Graph-Algorithmen (BFS, DFS, Dijkstra)
- Algorithmen zur Zeichenfolgenmanipulation
- Algorithmusanalyse und Beweistheorie
Algorithmen sind das Herzstück der Informatik. Wenn du sie beherrschst, wirst du ein deutlich besserer Programmierer!




