Предположим, у нас есть N чисел (целые числа, числа с плавающей запятой, что вы хотите) и мы хотим найти их среднее арифметическое. Самый простой способ - сложить все значения и разделить на количество значений:
def simple_mean(array[N]): # pseudocode
sum = 0
for i = 1 to N
sum += array[i]
return sum / N
Работает нормально, но требует больших целых чисел.
Если нам не нужны большие целые числа, и мы в порядке с ошибками округления, а N - это степень двойки, мы можем использовать «разделяй и властвуй»: ((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
и т. Д.
def bisection_average(array[N]):
if N == 1: return array[1]
return (bisection_average(array[:N/2])+bisection_average(array[N/2:]))/2
Есть другие способы?
PS. площадка для ленивых