Angenommen, wir haben N Zahlen (Ganzzahlen, Gleitkommazahlen, was immer Sie wollen) und möchten ihr arithmetisches Mittel finden. Einfachste Methode ist es, alle Werte und Dividieren durch die Anzahl der Werte zu summieren:Gibt es eine Möglichkeit, arithmetisches Mittel "besser" als Summe()/N zu finden?
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 Zahlen. Wenn wir keine großen ganzen Zahlen wollen und uns Rundungsfehler gut machen, und N die Potenz von zwei ist, können wir 'teile und herrsche' 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
, 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
Andere Möglichkeiten?
Interessant, aber das bisschen über 'gut mit Rundungsfehlern' hat mich beunruhigt. Ich würde eine Methode mit NO-Fehlern bevorzugen. – pavium
In zweiter Linie, werde ich zurück zu diesem Morgen kommen und lösche meine Antwort, wenn ich immer noch glücklich bin, dass es nicht sehr falsch ist ... –
@pavium: Wenn Sie eine Methode mit NO-Fehlern möchten, müssen Sie berechnen das von Hand. – MusiGenesis