Algorithmen erfüllen verschiedene Bedingungen.
Determiniertheit
Ein Algorithmus ist determiniert, wenn er bei gleichen Startbedingungen und der gleichen Eingabe immer das gleiche Ergebnis liefert.
Terminiertheit
Ein Algorithmus ist terminierend, wenn er immer nach endlich vielen Schritten anhält/abbricht.
Beispiel: Fibonacchi-Zahlen
Die Fibonacchi-Zahlen sind die Zahlenreihe 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, … Dabei kommt auf die nächste Zahl, indem man die beiden Zahlen davor addiert: Die 6. Zahl ist 3 + 5 = 8, die 7. Zahl ist 5 + 8 = 13, usw.
Der einfachste Algorithmus, um eine beliebige Fibonacchi-Zahl zu berechnen:
Der Algorithmus gibt 1 für die ersten beiden Fibonacchi-Zahlen zurück. Danach ergibt es immer die Summe der vorherigen Fibonacchi-Zahlen.
Der Algorithmus ist deterministisch, denn wenn man den Algorithmus 1000 Mal für das gleiche x anwendet, erhält man jedes Mal das gleiche Ergebnis.
Der Algorithmus ist terminierend. Zwar wendet sich der Algorithmus sich selbst an, was zuerst nach einer Endlosschleife klingt. Aber da dabei das x immer kleiner wird, gelangt man irgendwann am Anfang der Fibonacchi-Reihe, wo die Endlosschleife abgebrochen wird.
Hier ist die Ausführung für x = 5 als Baum dargestellt:
fib(5) = 5
├─ fib(4) = 3
│ ├─ fib(3) = 2
│ │ ├─ fib(2) = 1
│ │ └─ fib(1) = 1
│ └─ fib(2) = 1
└─ fib(3) = 2
├─ fib(2) = 1
└─ fib(1) = 1
Fibonacchi in Java
Der obige Algorithmus ließe sich in der Programmiersprache Java folgendermapen programmieren:
int fib(int x)
{
if (x == 1 || x == 2)
{
return 1;
}
return fib(x - 2) + fib(x - 1);
}
Beispiel: Fakultät
Die Fakultät von x ist das Produkt aller Zahlen von 1 bis x. Die Fakultät von 5 ist zum Beispiel 1 × 2 × 3 × 4 × 5 = 120. Der Algorithmus lässt sich so formulieren:
Setze y auf 1
Falls x = 1, wird der Algorithmus beendet, das Ergebnis ist y
Multipliziere y mit x.
Verringere x um 1.
Fahre mit Punkt 2 fort.
Das passiert für x = 5:
1. y hat nun den Wert 1
2. Dieser Schritt wird ignoriert, weil x ≠ 1
3. y hat nun den Wert 1 × 5 = 5
4. x hat nun den Wert 5 — 1 = 4
5.
2. Dieser Schritt wird ignoriert, weil x ≠ 1
3. y hat nun den Wert 5 × 4 = 20
4. x hat nun den Wert 4 — 1 = 3
5.
2. Dieser Schritt wird ignoriert, weil x ≠ 1
3. y hat nun den Wert 20 × 3 = 60
4. x hat nun den Wert 3 — 1 = 2
5.
2. Dieser Schritt wird ignoriert, weil x ≠ 1
3. y hat nun den Wert 60 × 2 = 120
4. x hat nun den Wert 2 — 1 = 1
5.
2. x = 1, also wird der Algorithmus beendet, das Ergebnis ist 120
Fakultät in Java
Der obige Algorithmus ließe sich in Java folgendermapen programmieren:
int fakultaet(int x)
{
int y = 1;
while (true) // Endlosschleife
{
if (x == 1) return y;
y = y * x;
x = x - 1;
}
}
Du hast noch nicht genug vom Thema?
Hier findest du noch weitere passende Inhalte zum Thema: