Мы все задавали вопрос: «Что отличает младшего инженера-программиста от старшего инженера-программиста?». Одно из различий заключается в том, что младшие инженеры-программисты могут не знать важности управления памятью или запуска программы в ограниченное время или эффективно, но старший инженер-программист знает об этом, поэтому они находят способ решить проблему с учетом эффективности. Сегодня вы узнаете один из способов написать программу, которая будет работать эффективно и очень быстро с использованием мемоизации и динамического программирования.

Что такое мемоизация?

Вы могли подумать, что термин «мемоизация» - это опечатка и что я имел в виду запоминание? но нет, мемоизация - это термин в компьютерной науке, который означает метод или шаблон оптимизации, который ускоряет выполнение программы за счет сохранения результатов сложных вызовов функций (функций, которые занимают много времени и потребляют много памяти во время выполнения функции) и возвращение результата, хранящегося в памяти, когда те же входные данные или аргументы повторяются снова.

Как этот метод ускоряет работу нашей программы?

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

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

Теперь сравните результаты с кодом ниже.

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

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

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