Supponiamo di avere N numeri (interi, float, qualunque cosa tu voglia) e voglio trovare la loro media aritmetica. il metodo più semplice è quello di sommare tutti i valori e dividere per il numero di valori:C'è un modo per trovare la media aritmetica "migliore" di sum()/N?
def simple_mean(array[N]): # pseudocode
sum = 0
for i = 1 to N
sum += array[i]
return sum/N
Funziona bene, ma richiede grandi numeri interi. Se non vogliamo i grandi numeri interi e stiamo bene con gli errori di arrotondamento, e N è la potenza di due, possiamo usare 'divide-and-conquer': ((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
, così via.
def bisection_average(array[N]):
if N == 1: return array[1]
return (bisection_average(array[:N/2])+bisection_average(array[N/2:]))/2
In altri modi?
Interessante, ma quel po 'di "bene con errori di arrotondamento" mi ha preoccupato. Preferirei un metodo con NESSUN errore. – pavium
Ripensandoci, tornerò su questo al mattino e recupererò la mia risposta se sono ancora felice che non sia gravemente sbagliato ... –
@pavium: se vuoi un metodo con NESSUN errore, devi calcolare questo a mano. – MusiGenesis