Understanding fast exponentiation (part 73b9)
Предлагаю решить задачу вместе: без спешки, с объяснением каждой строки.
Задача
Вычислить 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).
Это решение удобно как отправная точка для экспериментов: попробуйте изменить входные данные и проследить за поведением кода.
Читайте также:
данные · использует · Предлагаю · работы · решение · log2(exp · power(base · O(exp · возводится · быстрого · Быстрый · степень · result · возведения · квадрат · делится · против · основание · объяснением · работает · спешки · поведением · Сложность · Решение · проследить · return · Число · строки
