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

Увеличьте скорость вашей программы на 1000000 раз 🤯, используя эту технику!

Откройте ноутбук Jupyter, чтобы следовать. Следующие блоки кода являются ячейками в ноутбуке IPYNB. P… Tagged с учебником, Python, Algorithms, Memoization.

Откройте ноутбук Jupyter, чтобы следовать. Следующие блоки кода являются ячейками в ipynb ноутбук.

Предварительные условия:

Вы должны знать, как найти N-TH-член последовательности Fibonacci, используя рекурсию.

Ссылка на видео Анкет

from timeit import timeit

Теперь давайте сначала сделаем стандартную рекурсивную функцию.

def fibo(n: int) -> int:
    # without memoization
    if n <= 2:
        return 1
    return fibo(n-1) + fibo(n-2)

Теперь давайте попробуем использовать Мемуализация , это уменьшит сложность времени до n Анкет

def memo_fibo(n: int, memo: dict = {}) -> int:
    # with memoization
    if n in memo:
        return memo[n]
    if n <= 2:
        return 1
    memo[n] = memo_fibo(n-1, memo) + memo_fibo(n-2, memo)
    return memo[n]

Давайте установим значение n (термин последовательности Фибоначчи, который мы хотим найти)

n = 40

Давайте выполним нормальный путь. (Здесь я использовал ноутбук Jupyter Magic Command of Jupyter, чтобы найти время исполнения)

%%timeit -n 1 -r 10
fibo(n)
33.4 s ± 257 ms per loop (mean ± std. dev. of 10 runs, 1 loop each)

Теперь позвольте нам выполнить функцию, которая использовала меморандум.

%%timeit -n 1 -r 10
memo_fibo(n)
The slowest run took 86.52 times longer than the fastest. This could mean that an intermediate result is being cached.
3.6 µs ± 9.59 µs per loop (mean ± std. dev. of 10 runs, 1 loop each)

Разница резко. От 33,4 с к 3,6 мкс Анкет

Таким образом, вы видите, как использование памятиализации приводит к огромной разнице во время исполнения.

Название «Фибоначчи» обусловлено итальянским математиком 13-го века Леонардо из Пизы, который позже стал известен как Фибоначчи.

Тем не менее, то, что мы широко называем «Fibonacci Numbers», найдем их самое раннее упоминание во втором веке работы индийского мыслителя Ачарья Пингала Анкет

Оригинал: “https://dev.to/aahnik/increase-the-speed-of-your-program-by-1000000-times-by-using-this-technique-4m8a”