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

Мемоизация

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

Если вы что-то приобрели через Amazon, вам будет знаком термин "сайт" - сохранить на потом. Как следует из этой фразы, покупатели могут добавлять товары в свою корзину или сохранять их в списке желаний для последующего просмотра. При написании алгоритмов мы часто сталкиваемся с аналогичным выбором завершения действий (выполнения вычислений) при интерпретации данных или сохранения результатов для последующего использования. Примеры включают получение данных JSON из службы RESTful или использование Core Data Framework:

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

Ниже приведены 5 основных проблем, которые можно решить с помощью динамического программирования:

  1. Счетчик вхождений
  2. Счетный алгоритм сортировки
  3. Пересмотренный Фибоначчи
  4. Самая длинная подпоследовательность
  5. Пара чисел

Другие известные алгоритмы, которые также применяют динамическое программирование, включают PageRank, а также Кратчайший путь Дейкстры. Только эти два алгоритма обеспечивают работу многих онлайн-инструментов и процессов, которые мы используем сегодня.

Другие списки исследований

Спасибо за просмотр моего списка динамического программирования! Если вы еще этого не сделали, не забудьте также просмотреть другие мои списки, поскольку они относятся к информатике и разработке Swift / iOS.