На первый взгляд мемоизированные функции кажутся очень сложными и всеобъемлющими, но на самом деле это одна из самых простых концепций для понимания. Я собираюсь использовать javascript для объяснения мемоизированных функций, но даже если вы не знакомы с javascript и у вас другой опыт программирования, вы сможете понять концепцию с объяснением, которое я собираюсь предоставить в этой статье.
Давайте сделаем забавное упражнение, чтобы сначала понять важность запоминаемых функций.
Я хочу знать столицу Узбекистана (или любой другой страны по вашему выбору, если вы уже знаете ее столицу). Пожалуйста, найдите ответ и запишите время, которое вам потребовалось, чтобы найти ответ. Не читайте дальше, пока не найдете ответ. Я уверен, что вам может потребоваться от нескольких секунд до минуты (если вы были очень медленны или с трудом находили ответ), чтобы найти ответ либо в Интернете, либо с помощью других средств, таких как опрос друзей, сверка с картами, книги и т. д.
Только что, если я еще раз спрошу вас, какая столица Узбекистана, я уверен, что почти каждый из вас сможет ответить за долю секунды. Улучшение производительности вашего времени отклика здесь огромно, и причина такого быстрого времени отклика заключается в том, что информация уже хранится в вашем мозгу, и ваш мозг не нуждается в ее повторной обработке.
Это именно то, что делает мемоизированная функция. Он не обрабатывает заново то, что уже знает. Мы также можем сказать, что запоминаемая функция — это функция с интеллектом. Интеллект — это память (или, технически называемая кэшем), связанная с функцией. Если миллионы людей онлайн хотят узнать столицу Узбекистана, вам нужно будет только проверить ее в первый раз, заглянув в базу данных, а для остальных запросов пользователей вы можете использовать кеш. Это огромное улучшение производительности с точки зрения времени отклика и загрузки вашей базы данных избыточными или неинтеллектуальными запросами.
Теперь давайте разберемся, как мы можем писать запоминаемые функции. Нам нужно выполнить эти 3 шага, чтобы создать очень простую мемоизированную функцию.
- Проверьте, что является вводом. (набор входных аргументов)
- Проверьте, обрабатывала ли функция уже выходные данные для данного набора входных данных.
- Если это так, верните вывод (или ответ), заглянув в его кеш. В противном случае обработайте ввод, сохраните вывод в кэше и затем верните ввод.
Выполнив описанные выше шаги, вы получите запомненную функцию для примера, который мы обсуждали в статье.
function findCapitalOfCountry(country){ // create the cache which serves as function intelligence and // close it for any outside modification. const cache = [] return function(country){ if(country in cache){ return cache[country]; } else { const capital = findCapitalFromDatabase(country); cache[country] = capital; return capital; } } }
Разве изучение и написание запоминаемых функций не было простым делом? Я сказал Я.
Если вы хотите более подробно изучить функции Memoized, я рекомендую вам посмотреть пояснительное видео ниже, которое я создал на своем канале YouTube. Этот видеоурок поможет вам понять и написать стандартные мемоизированные функции, которые можно использовать во всех ваших проектах.