From 21372617c0a47cbb622f1a93355b37d559f59efa Mon Sep 17 00:00:00 2001 From: Albina Gimaletdinova Date: Mon, 13 May 2024 07:56:14 +0100 Subject: [dynamic-programming/ru] Added translation (#4571) --- ru-ru/dynamic-programming-ru.html.markdown | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 ru-ru/dynamic-programming-ru.html.markdown (limited to 'ru-ru') diff --git a/ru-ru/dynamic-programming-ru.html.markdown b/ru-ru/dynamic-programming-ru.html.markdown new file mode 100644 index 00000000..0b823b2d --- /dev/null +++ b/ru-ru/dynamic-programming-ru.html.markdown @@ -0,0 +1,66 @@ +--- +category: Algorithms & Data Structures +name: Dynamic Programming +contributors: + - ["Akashdeep Goel", "http://github.com/akashdeepgoel"] + - ["Miltiadis Stouras", "https://github.com/mstou"] +translators: + - ["Albina Gimaletdinova", "https://github.com/albina-astr"] +lang: ru-ru +--- + +# Динамическое программирование + +## Введение + +Динамическое программирование (dynamic programming, DP) — мощный инструмент для решения определенного класса задач. Идея очень проста: если вы решили задачу для каких-то вводных данных, сохраните этот результат для будущих вычислений, чтобы снова не решать ту же самую задачу с теми же данными. + +Запомните! +«Кто не помнит своего прошлого, обречен на то, чтобы пережить его вновь» + +## Способы решения подобных задач + +1. *Сверху-вниз*: Начните с разбиения задачи на подзадачи. Если вы видите, что подзадача уже была решена, тогда используйте сохраненный ранее результат. Иначе решите подзадачу и сохраните её результат. Эта техника интуитивно понятна и называется мемоизацией. + +2. *Снизу-вверх*: Проанализируйте задачу и определите порядок, в котором решаются подзадачи, и начните решать от тривиальной подзадачи до изначальной задачи. Это гарантирует, что подзадачи будут решены, прежде чем решится вся задача. В этом и заключается динамическое программирование. + +## Пример задачи динамического программирования + +В задаче по определению самой длинной возрастающей подпоследовательности необходимо найти найти самую длинную возрастающую подпоследовательность для заданной последовательности. +Для последовательности `S={ a1, a2, a3, a4, ............., an-1, an }` мы должны найти самое длинное подмножество, такое, что для всех `j` и `i`, `j a[j] and LS[i]