(eine Aufgabe aus Jon Bentley: Programming Pearls)
naiver Algorithmus:
int best = 0;
for (a=1; a<n; a++) {
for (b=a; b<n; b++) {
int sum = 0;
for (int i=a; i<= b; i++) {
sum += x[i];
}
best = max(best,sum);
}
}
Laufzeit? Geht besser?
...ja, mit passenden Invarianten:
int best_so_far
int best_ending_here
for (int i=1; i<n; i++) {
// INVARIANT:
// best_so_far ist ...
// best_ending_here ist ...
}
wer sagt ,,das war ja leicht,``
der finde bitte einen effizienten Algorithmus für die entsprechende zweidimensionale Aufgabe: