Proseminar | |
Programming Pearls | |
Algorithm Design Techniques | |
von Andreas Lenerz | |
Algorithmus A1
Eingabe: Array rationaler Zahlen x der Länge n
Algorithmus A1: | |||||||
max_so_far = 0 | |||||||
for i = [0,n) | |||||||
|
Erläuterung:
max_so_far | die bisher größte gefundene Teilsumme. Da der Wert am Anfang null beträgt, wird somit zugleich sicher gestellt, daß kein negativer Wert für die maximale Summe herauskommt ( siehe Einleitung ) |
sum | die Variable, auf der in der innersten for-Schleife der Wert von sum x[i..j] bestimmt wird, indem sukzessiv alle x[k] mit i <= k <= j aufsummiert werden |
max(x_1,x_2,..,x_n) | die Funktion, die das Maximum über die in der Klammer stehenden Werte x_1 .. x_n bezüglich des größer-Operators ">" zurückgibt. |
Die innerste Schleife ( rot ) berechnet sum x[i..j] ( also die Summe eines Teilarrays ) und speichert diese auf der Variablen sum ab. Der nun folgende Schritt vergleicht das bisher gefundene Maximum auf der Variablen max_so_far mit der eben berechneten Summe bezüglich der Funktion max(-,-), welche bestimmt ob die Variable sum vielleicht das neue Maximum enthält und in diesem Fall die Variable max_so_far aktualisiert. Nun muß lediglich noch sicher gestellt werden, daß dieser Schritt für alle Teilsummen mit 0 <= i <= j < n bestimmt wird, da dann am Ende die Variable max_so_far die maximale Summe eines Teilarrays von x enthält. Gerade dafür sorgen die beiden äußeren for-Schleifen, die alle gültigen Kombinationen von i und j durchlaufen.
Laufzeit:
Man sieht leicht, daß der Algorithmus durch die 3 for-Schleifen, die maximal über n Werte laufen, eine Laufzeit von O( n³ ) besitzt.
Vorteile | Nachteile |
|
|
Im Test ergab sich das folgenden Ergebnis:
Für 10.000 Werte benötigte A1 eine Zeit von: 39 min 23 sec 709 msec