Angenommen, wir haben N Zahlen (ganze Zahlen, Gleitkommazahlen, was immer Sie wollen) und wollen ihr arithmetisches Mittel finden. Die einfachste Methode ist, alle Werte zu summieren und durch die Anzahl der Werte zu dividieren:
def simple_mean(array[N]): # pseudocode
sum = 0
for i = 1 to N
sum += array[i]
return sum / N
Es funktioniert gut, erfordert aber große ganze Zahlen. Wenn wir keine großen ganzen Zahlen wollen und mit Rundungsfehlern zurechtkommen und N eine Potenz von zwei ist, können wir "Teilen und Beherrschen" verwenden: ((a+b)/2 + (c+d)/2)/2 = (a+b+c+d)/4
, ((a+b+c+d)/4 + (e+f+g+h)/4)/2 = (a+b+c+d+e+f+g+h)/8
und so weiter.
def bisection_average(array[N]):
if N == 1: return array[1]
return (bisection_average(array[:N/2])+bisection_average(array[N/2:]))/2
Gibt es noch andere Möglichkeiten?
0 Stimmen
Interessant, aber der Teil über "Rundungsfehler sind kein Problem" hat mich beunruhigt. Ich würde eine Methode bevorzugen, bei der keine Fehler auftreten.
0 Stimmen
Wenn ich es mir recht überlege, werde ich morgen früh darauf zurückkommen und meine Antwort wieder löschen, wenn ich dann immer noch froh bin, dass sie nicht völlig falsch ist...
0 Stimmen
@pavium: Wenn Sie eine fehlerfreie Methode wünschen, müssen Sie diese von Hand berechnen.
1 Stimmen
@MusiGenesis -- heh, wenn ich das selbst von Hand berechnen würde, würde es K Fehler garantieren, wobei K >> 1 und K/N sich wahrscheinlich einer Konstante wie 1/e oder so annähert. ;)