Supongamos que tenemos N números (enteros, flotantes, lo que quieras) y queremos encontrar su media aritmética. método más sencillo consiste en sumar todos los valores y se divide por el número de valores:¿Hay alguna forma de encontrar la media aritmética "mejor" que sum()/N?
def simple_mean(array[N]): # pseudocode
sum = 0
for i = 1 to N
sum += array[i]
return sum/N
Funciona bien, pero requiere grandes números enteros. Si no queremos enteros grandes y estamos bien con errores de redondeo, y N es el poder de dos, podemos usar 'divide y vencerás': ((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
, etc.
def bisection_average(array[N]):
if N == 1: return array[1]
return (bisection_average(array[:N/2])+bisection_average(array[N/2:]))/2
¿Alguna otra manera?
Interesante, pero ese poco acerca de "bien con errores de redondeo" me tiene preocupado. Prefiero un método sin errores. – pavium
Pensándolo bien, volveré a esto por la mañana y recuperaré mi respuesta si aún estoy contento de que no esté muy mal ... –
@pavium: si quieres un método sin errores, debes calcular esto a mano. – MusiGenesis