В своей простейшей форме динамическое программирование полагается на хранение и повторное использование данных для повышения эффективности алгоритма. Большинство вопросов информатики решаются с помощью различных форм динамического программирования. Уловка состоит в том, чтобы распознать, когда оптимальные решения могут быть разработаны с использованием простой переменной или требуют использования сложной структуры данных или алгоритма.
Мемоизация
Процесс повторного использования данных также называется мемоизацией и может принимать разные формы. Как мы увидим, этот стиль программирования дает множество преимуществ.
Если вы что-то приобрели через Amazon, вам будет знаком термин "сайт" - сохранить на потом. Как следует из этой фразы, покупатели могут добавлять товары в свою корзину или сохранять их в списке желаний для последующего просмотра. При написании алгоритмов мы часто сталкиваемся с аналогичным выбором завершения действий (выполнения вычислений) при интерпретации данных или сохранения результатов для последующего использования. Примеры включают получение данных JSON из службы RESTful или использование Core Data Framework:
В iOS шаблоны проектирования могут помочь нам рассчитать время и координировать обработку данных. Конкретные методы включают многопоточные операции (структурированный параллелизм), уведомления и делегирование. С другой стороны, динамическое программирование не обязательно является единственной техникой кодирования, это скорее способ думать о действиях (например, подзадачах), которые происходят при работе функции. Полученное решение DP может отличаться в зависимости от проблемы.
Ниже приведены 5 основных проблем, которые можно решить с помощью динамического программирования:
- Счетчик вхождений
- Счетный алгоритм сортировки
- Пересмотренный Фибоначчи
- Самая длинная подпоследовательность
- Пара чисел
Другие известные алгоритмы, которые также применяют динамическое программирование, включают PageRank, а также Кратчайший путь Дейкстры. Только эти два алгоритма обеспечивают работу многих онлайн-инструментов и процессов, которые мы используем сегодня.
Другие списки исследований
Спасибо за просмотр моего списка динамического программирования! Если вы еще этого не сделали, не забудьте также просмотреть другие мои списки, поскольку они относятся к информатике и разработке Swift / iOS.