Skip to main content

Step-by-step: fast exponentiation (part 9e2b)

Updated 2 min readMarkdown

Разложим решение на шаги и объясним, что происходит на каждом из них.

Задача

Вычислить base ** exp двумя способами: простым умножением и алгоритмом быстрого возведения в степень.

Решение

def power(base: int, exp: int) -> int:
    result = 1
    for _ in range(exp):
        result *= base
    return result


def fast_power(base: int, exp: int) -> int:
    result = 1
    while exp > 0:
        if exp % 2 == 1:
            result *= base
        base *= base
        exp //= 2
    return result


print(power(2, 10), fast_power(2, 10))

Как это работает

Быстрый метод использует двоичное представление показателя: показатель делится на два, а основание возводится в квадрат. Число умножений падает с exp до log2(exp).

Пример работы

1024 1024

Сложность

O(exp) против O(log exp).

Разбор по шагам

  1. Шаг 1. Входные данные. Проверяем, что приходит в функцию, и какие значения считаются корректными.
  2. Шаг 2. Основной цикл. Именно здесь происходит вся работа; следим за изменениями переменных на каждой итерации.
  3. Шаг 3. Результат. Убеждаемся, что возвращаемое значение соответствует условию задачи, включая крайние случаи.

Читая чужой код, повторите тот же мысленный разбор по шагам — это самый быстрый способ научиться.

Читайте также:

задачи · возведения · Задача · power(base · считаются · print(power(2 · range(exp · случаи · O(exp · python · итерации · работа · данные · способами · переменных · значения · работает · против · условию · соответствует · показателя · двумя · Быстрый · Разбор · происходит · разбор · значение · квадрат · каждой · log2(exp

No comments yet. Be the first to comment.

More from this blog