Рубрики
Без рубрики

Вавилонский квадратный корневой алгоритм в Python

Узнайте о вавилонский квадратный алгоритм корневого алгоритма и как реализовать его в языке программирования Python, и повысит свои навыки алгоритмического мышления.

Автор оригинала: Robin Andrews.

Разработка вашего алгоритмическое мышление Навыки – отличная идея, независимо от ваших целей программирования. Помимо того, что делает вас гораздо лучшим программистом, вам также нужно будет разработать тезисы навыки, если вы хотите подать заявку на работу по разработке программного обеспечения с престижными компаниями, такими как Facebook, Google, Amazon и т. Д., Наряду со многими менее известными, но все еще удивительными компаниями. Это как хорошо алгоритмическое мышление очаровательно очаровательно, как форма психического спорта!

Вавилонский алгоритм Для поиска квадратных корней впечатляет как из-за его эффективности и его возраста. Вы можете быть удивлены, чтобы узнать, что хотя этот алгоритм в течение 3000 лет, он все еще используется сегодня в современных калькуляторах.

Основным подходом, используемым в алгоритме, является Угадай, проверьте, улучшите , повторяется до тех пор, пока не будет достигнут необходимый уровень точности.

Алгоритм зависит от того, что если х это переоценка для квадратного корня положительного числа S Тогда S/X будет недооценка, и поэтому среднее из этих двух дает лучшее приближение (и наоборот, для недооценки). Затем мы можем повторить процесс, пока мы не достигнем соответственно точного ответа.

Смущенный? Давайте посмотрим на конкретный пример:

Расчет √5 с использованием вавилонского алгоритма

Мы начинаем с «образованного догада» для чего квадратный корень 5 возможно. Давайте выберем 2 Отказ С 2 недооценка (мы знаем это, потому что 2² <5 ), 5/2 – переоценка.

Подумайте, почему это правда.

5 Разделен на число, которое меньше, чем его квадратный корень, даст значение больше, чем его квадратный корень.

Вот короткий объем, чтобы подчеркнуть этот момент, используя фактический квадратный номер, чтобы сделать его более понятным:

8 – квадратный корень из 64. Если я делю 64 на 7, я получаю больше 8. То есть 9.14 (до 2 д.п.). Это как видели с точным квадратным корнем в середине …

В нашем примере √5, если вы начнете с угадания 3 для √5 Ваша оценка слишком велика (так как ), поэтому √5/3 будет слишком маленьким.

Вот ключ к алгоритму:

Средний * из переоценки и недооценка может быть разумно ожидается обеспечить лучшее приближение к фактической ценности.

* Часто называется «средним» в расплывающем разговорном смысле, который приводит к тому, что всевозможные недоразумения распространенных аспектов обсуждаемой ситуации, но это еще одна история …

Мы можем табликовать процесс нахождения √5, используя вавилонский алгоритм, как так:

x               5/x             Mean
2.000000        2.500000        2.250000
2.250000        2.222222        2.236111
2.236111        2.236025        2.236068
2.236068        2.236068        2.236068
2.236068        2.236068        2.236068

х представляет наше предположение каждый раз. (На самом деле это только в первую очередь, после этого алгоритм захватывает и рассчитывает последовательные значения x для вас, в соответствии с соотношением, показанным этим уравнением.

Не будете осторожны, если вы не знакомы с таком нотацией, хотя. Некоторые люди удобнее с математической нотами, чем другие. Если это поможет, вы можете обратиться к этим математическим фактам, чтобы помочь вам понять, но совершенно возможно думать чисто в алгоритмических условиях, чтобы понять, как работает алгоритм.

Рассчитать √a, обратите внимание, что

  • Икс . = √a. √a.
  • Если X <√a, то ᵃ/ₓ> √a
  • Если x> √a, то ᵃ/ₓ <√a

То, что уравнение в основном говорит: «Каждое новое значение X – это среднее значение, рассчитанное в предыдущем строке».

Вы должны попробовать этот процесс для себя на бумаге, пока не получите хорошее почувствовать, как это работает. Обратите внимание, что 5 В 5/х Руководство столбца ниже – это номер, квадратный корень которого мы пытаемся найти. Это не меняется по всему алгоритму. Все значения ниже отображаются с точностью дефекта для поплавки с помощью Pythons F-струны Отказ

Сравните результат к значению Python для √5 (рассчитан без использования Math.sqrt , поскольку x ** 0,5 = √x .

>>> 5 ** 0.5
2.23606797749979

Реализация Python из вавилонского квадратного корневого алгоритма

Так как реализовать это в Python?

Идите на реализацию этого алгоритма для себя. Для этой первой попытки просто используйте фиксированное количество итераций (внутри для петля), а не беспокоиться о том, чтобы остановить алгоритм. Это придет дальше. Обратите внимание, что для целей этой статьи мы обсуждаем только положительные квадратные корни.

Если вы хотите отправной точкой, вы можете использовать код шаблона ниже.

def babylonian_algorithm(S, x):
    print(f"x\t\t{S}/x\t\tMean")  # f-strings for displaying vars in string. \t for tab (spacing)
    for i in range(5):  # Just five iterations for now.
        ...
        ...
        print(f"{x:f}\t{estimate:f}\t{mean:f}")
        ...
    return x


S = 5  # Number to find the square root of
x = 2  # Initial guess
print(f"The square root of {n} is close to {round(babylonian_algorithm(S, x), 6)}")

Вот возможное решение. Не волнуйтесь, если у вас другой, пока он работает.

def babylonian_algorithm(S, x):
    print(f"x\t\t{S}/x\t\tMean")
    for i in range(5):
        estimate = S / x
        mean = (x + estimate) / 2
        print(f"{x:f}\t{estimate:f}\t{mean:f}")
        x = mean
    return x


S = 5  # Number to find the square root of
x = 2  # Initial guess
print(f"The square root of {n} is close to {round(babylonian_algorithm(S, x), 6)}")

Улучшенная реализация Python из вавилонского квадратного корневого алгоритма

Для человека достаточно легче угадать разумное начальное значение для квадратного корня. Тем не менее, компьютеры не имеют осведомленности для выполнения этой задачи. Во второй реализации алгоритма мы используем значение S (Номер, который мы хотим найти квадратный корень) как нашего первоначального предположения. Затем мы определяем, приносит ли каждое последовательное угадать в приемлемый диапазон цели целевого значения

Из-за ошибок округления вы никогда не должны полагаться на равенство двойных или плавающих. Вам нужен другой метод определения, когда ваше приближение будет достаточно хорошим.

Вот еще один Python внедрение корневого алгоритма вавилонского квадрата:

def babylonian_algorithm(S):
    e = 0.00001
    mean = (S + 1) / 2  # This is the first pass of the algorithm
    print(f"x\t\t{S}/x\t\tMean")
    while abs(mean ** 2 - S) > e:
        estimate = S / mean
        mean = (mean + estimate) / 2
        print(f"{mean:f}\t{estimate:f}\t{mean:f}")
    return mean


S = 5  # Number to find the square root of
print(f"\nThe square root of {S} is close to {babylonian_algorithm(S):f}\n")
S = 64  # Number to find the square root of
print(f"\nThe square root of {S} is close to {babylonian_algorithm(S):f}")

Эта версия использует Хотя ABS (значит ** 2 - S)> E Чтобы проверить, находится ли оценка внутри е правильного ответа.

x               5/x             Mean
2.333333        1.666667        2.333333
2.238095        2.142857        2.238095
2.236069        2.234043        2.236069

The square root of 5 is close to 2.236069

x               64/x            Mean
17.234615       1.969231        17.234615
10.474036       3.713457        10.474036
8.292192        6.110347        8.292192
8.005148        7.718104        8.005148
8.000002        7.994855        8.000002
8.000000        7.999998        8.000000

The square root of 64 is close to 8.000000
>>>

В зависимости от вашего уровня опыта, корневой алгоритм вавилонского квадрата может показаться небольшим сложным и трудно понять, или вы можете найти его прямо вперед. Если для вас трудно, один совет – сосредоточиться на одном небольшом небольшом аспекте алгоритма в то время, пока вы не поймете эту часть, затем сделайте то же самое для других частей. Это нормально, чтобы забыть большую картину временно. В любом случае, добавление этого алгоритма в вашу базу данных знаний, поможет развивать свое мастерство алгоритмического мышления.

Я надеюсь, что вы нашли эту статью интересную. Если это так, пожалуйста, поделитесь в социальных сетях, а также рассмотрим присоединение к списку рассылки Compucucademy, используя одну из форм на этой странице.

Счастливые вычисления!