Увлекательное путешествие в страну Динамического...

Preview:

Citation preview

(с) Игорь Клейнер 2015

УВЛЕКАТЕЛЬНОЕ ПУТЕШЕСТВИЕ В

СТРАНУ ДИНАМИЧЕСКОГО

ПРОГРАММИРОВАНИЯ

ДОБРО ПОЖАЛОВАТЬ

ОБО МНЕ:

ОБО МНЕ:

ОБО МНЕ:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ В

МАССЫ

ГЛАВНЫЕ ВОПРОСЫ

ГЛАВНЫЕ ВОПРОСЫ

• Кто я?

• Кто здесь?

• Зачем мы тут?

ГЛАВНЫЕ ВОПРОСЫ

• Кто я?

• Кто здесь?

• Зачем мы тут?

ГЛАВНЫЕ ВОПРОСЫ

• Кто я?

• Кто здесь?

• Зачем мы тут?

• Что такое динамическое программирование и

зачем оно нам нужно?

МЕТАФОРА

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

• Два подхода к объяснениям:

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

• Два подхода к объяснениям:

• Сверху вниз

• Снизу вверх

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

• Два подхода к объяснениям:

• Сверху вниз

• Снизу вверх

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

Пример обычного объяснения «снизу вверх»

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

Объяснение: сверху вниз

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

Объяснение: сверху вниз

Мотивация –

ЧТО ТАКОЕ ДИНАМИЧЕСКОЕ

ПРОГРАММИРОВАНИЕ И ЗАЧЕМ ОНО НАМ

НУЖНО?

Объяснение: сверху вниз

Мотивация – истории из жизни

CASE STORY #1

• 2011 Intel интервью

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3]

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность с

максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3] -7

• [1 -10 2 1 12 -4 5 -3] -2

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в последовательности чисел подпоследовательность с максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3] -7

• [1 -10 2 1 12 -4 5 -3] -2

• [1 -10 2 1 12 -4 5 -3] 16

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3]

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3]

• Ничтоже сумняшеся

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• [1 -10 2 1 12 -4 5 -3]

• Ничтоже сумняшеся

CASE STORY #1

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• +

CASE STORY #1

• 2011 Intel интервью

• Предложите алгоритм который находит в

последовательности чисел подпоследовательность

с максимальной суммой элементов

• + =

CASE STORY #2

• 2014 Microsoft интервью

CASE STORY #2

• 2014 Microsoft интервью

• Сколько существует способов вернуть сдачу n

монетами 1, 2, 3 и 5 копеек?

CASE STORY #2

• 2014 Microsoft интервью

• Сколько существует способов вернуть сдачу n

монетами 1, 2, 3 и 5 копеек?

• Решение:

CASE STORY #2

• 2014 Microsoft интервью

• Сколько существует способов вернуть сдачу n

монетами 1, 2, 3 и 5 копеек?

• Решение: ???

CASE STORY #2

• 2014 Microsoft интервью

• Сколько существует способов вернуть сдачу n

монетами 1, 2, 3 и 5 копеек?

• Решение: динамическое программирование

CASE STORY #3

• Хайфский университет, 2000 год, лекция именитого

профессора

CASE STORY #3

• Хайфский университет, 2000 год, лекция именитого

профессора

• Задача: 100 этажей + два яйца:

Определить за минимальное

количество попыток, этаж

начиная с которого яйцо разбивается

CASE STORY #3

• Хайфский университет, 2000 год, лекция именитого

профессора

• Задача: 100 этажей + два яйца:

Определить за минимальное

количество попыток, этаж

начиная с которого яйцо разбивается

МАГИЯ ДИНАМИЧЕСКОГО ПРОГРАММРОВАНИЯ

МАГИЯ ДИНАМИЧЕСКОГО ПРОГРАММРОВАНИЯ

[1 -10 2 1 12 -4 5 -3]

МАГИЯ ДИНАМИЧЕСКОГО ПРОГРАММРОВАНИЯ

[1 -10 2 1 12 -4 5 -3]

МАГИЯ ДИНАМИЧЕСКОГО ПРОГРАММРОВАНИЯ

ЕЩЕ НЕМНОГО МОТИВАЦИИ

ЕЩЕ НЕМНОГО МОТИВАЦИИ

ЕЩЕ МОТИВАЦИЯ

• Олимпиады по программированию

ЕЩЕ НЕМНОГО МОТИВАЦИИ

И ЕЩЕ СОВСЕМ ЧУТЬ-ЧУТЬ МОТИВАЦИИ

И ЕЩЕ СОВСЕМ ЧУТЬ-ЧУТЬ МОТИВАЦИИ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• ДП – позволяет решать комбинаторные задачи и

задачи оптимизации, обладающие определенным

свойством

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• ДП – позволяет решать комбинаторные задачи и задачи оптимизации, обладающие определенным свойством

• СКОЛЬКО:

• сколько способов вернуть сдачу

• сколько способов обойти граф

• сколько способов выполнить план

• сколько игр надо сыграть чтобы …

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• ДП – позволяет решать комбинаторные задачи и задачи

оптимизации, обладающие определенным свойством

• Минимум или максимум

• прибыли \ ущерба

• вероятности успеха

• среднего ожидаемого дохода

• продолжительности жизни процесса

ВОПРОС НА ЗАСЫПКУ

• Выбор лучшей невесты это:

• Задача оптимизации

• Комбинаторная задача

• Задача вариационного исчисления

• Хитрая казуистика

ВОПРОС НА ЗАСЫПКУ

• Выбор лучшей невесты это:

• Задача оптимизации

• Комбинаторная задача

• Задача вариационного исчисления

• Хитрая казуистика

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• ДП – позволяет решать комбинаторные задачи и

задачи оптимизации, обладающие

определенным свойством

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения аналогичной задачи

меньшей размерности

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Оптимальность у подзадач – можно решить

задачу, с помощью решения задачи меньшей

размерности:

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Хватит теории, дайте практики!

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Хватит теории, дайте практики!

• Определить минимальное количество монет,

необходимое для возврата сдачи n

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Хватит теории, дайте практики!

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• сдача 11 - ?

• сдача 6 - ?

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЗА 5 МИНУТ

• Хватит теории, дайте практики!

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• сдача 11 – 2 монеты (10) (1)

• сдача 6 - 2 монеты (3)(3) или (5) (1)

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество

монет, необходимое для возврата сдачи n

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество

монет, необходимое для возврата сдачи n

• Напишем “чудо формулу” для вычисления F(n)

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет, необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [ , , , ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет, необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [ , , , ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет, необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [1+ , , , ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет, необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [1+ F(n-1) , , , ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет, необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [1+ F(n-1), 1+F(n-2) , , ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество

монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = [1+F(n-1), 1+F(n-2), 1+F(n-3) ,1+F(n-5) ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество

монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = ??? [1+F(n-1), 1+F(n-2), 1+F(n-3) ,1+F(n-5) ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• Обозначим через F(n) минимальное количество

монет, необходимое для возврата сдачи n

• Напишем чудо формулу для вычисления F(n)

• F(n) = min [1+F(n-1), 1+F(n-2), 1+F(n-3) ,1+F(n-5) ]

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• F(n) = min [1+F(n-1),1+F(n-2),1+F(n-3),1+F(n-5)]

• Не стоит пугаться если не все понятно!

ЗАДАЧА О СДАЧЕ

РЕШЕНИЕ

• Определить минимальное количество монет,

необходимое для возврата сдачи n

• F(n) = min [1+F(n-1),1+F(n-2),1+F(n-3),1+F(n-5)]

• Не стоит пугаться если не все понятно!

• И даже если все не понятно

ВОПРОС

• Любую задачу можно решить с помощью

динамического программирования?

• Да

• Нет

ВОПРОС

• Любую задачу можно решить с помощью

динамического программирования?

• Да

• Нет

РЕЗЮМЕ

• Динамическое программирования –

относительно простая и одновременно

мощная техника позволяющая решать

широкий класс задач

ЗАДАЧА О ВЫБОРЕ НЕВЕСТЫ \ РАЗБОРЧИВЫЙ

ПРИНЦ

• Принцу необходимо выбрать лучшую из n

невест которые подходят к нему по одной в

случайном порядке, раз отказав невесте,

принц не сможет вернуться к ней

ЗАДАЧА О ВЫБОРЕ НЕВЕСТЫ \ РАЗБОРЧИВЫЙ

ПРИНЦ

• Принцу необходимо выбрать лучшую из n

невест которые подходят к нему по одной в

случайном порядке, раз отказав невесте,

принц не сможет вернуться к ней

ЗАДАЧА О ВЫБОРЕ НЕВЕСТЫ \ РАЗБОРЧИВЫЙ

ПРИНЦ

• Принцу необходимо выбрать лучшую из n

невест которые подходят к нему по одной в

случайном порядке, раз отказав невесте,

принц не сможет вернуться к ней

БИРЖА

БИРЖА

• Опцион -

БИРЖА

• Опцион дает право купить или продать продукт по

специальной цене

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Пример: Вася хочет купить через год 1000 долларов, но

переживает, что курс может вырасти.

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Пример: Вася хочет купить через год 1000 долларов но

переживает, что курс может вырасти.

• Сегодня доллар стоит 56 рублей. Вася покупает за х

рублей опцион на покупку 1000 долларов через год за 60

рублей.

• Если через год доллар будет стоить больше 60, Вася

воспользуется опционом иначе выбросит его в мусор

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Пример: Вася хочет купить через год 1000 долларов но

переживает, что курс может вырасти.

• Сегодня доллар стоит 56 рублей. Вася покупает за х

рублей опцион на покупку 1000 долларов через год за 60

рублей.

• Если через год доллар будет стоить больше 60, Вася

воспользуется опционом иначе выбросит его в мусор

• Как определить цену опциона?

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Как определить цену опциона?

• Формула Блека-Шоулза

• Успех и широкое распространение формулы привело к

тому, что Шоулз получил Нобелевскую премию по

экономике в 1997 году «за новый метод определения

стоимости производных ценных бумаг».

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Как определить цену опциона?

• Формула Блека-Шоулза

ОПЦИОН ДАЕТ ПРАВО КУПИТЬ ИЛИ ПРОДАТЬ

ПРОДУКТ ПО СПЕЦИАЛЬНОЙ ЦЕНЕ

• Как определить цену опциона?

• Формула Блека-Шоулза

РЕЗЮМЕ

• Динамическое программирования –

относительно простая и одновременно

мощная техника позволяющая решать

широкий класс задач

МАГИЯ ДИНАМИЧЕСКОГО ПРОГРАММРОВАНИЯ

ЧТО ДЕЛАТЬ ЕСЛИ Я ХОЧУ ИЗУЧИТЬ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?

ЧТО ДЕЛАТЬ ЕСЛИ Я ХОЧУ ИЗУЧИТЬ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?

• Что понять идеи метода стоит посмотреть на

решения 3-5 задач и столько же задач решить

самостоятельно

ЧТО ДЕЛАТЬ ЕСЛИ Я ХОЧУ ИЗУЧИТЬ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?

• Чтобы уметь самостоятельно пользоваться

методом и решать нестандартные задачи стоит

посмотреть на решения и решить самостоятельно

10-15 задач

ЧТО ДЕЛАТЬ ЕСЛИ Я ХОЧУ ИЗУЧИТЬ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?

• Чтобы стать гуру в ДП, стоит увеличить количество

решенных задач до 30 и более

МОЖНО ЛИ САМОСТОЯТЕЛЬНО ИЗУЧИТЬ

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?

• Можно и нужно!

• Идеи метода доступны даже школьникам

КАК ИЗУЧИТЬ САМОСТОЯТЕЛЬНО

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Бархатный путь

КАК ИЗУЧИТЬ САМОСТОЯТЕЛЬНО

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

СЕРТИФИКАТ ДОСТИЖЕНИЙ

ОБРАТНАЯ СВЯЗЬ

• igkleiner@gmail.com

Ваши вопросы и обратная связь суть лучший источник

мотивации

ССЫЛКИ

• Бесплатный онлайн курс «Динамическое

программирование» https://goo.gl/p5yks2

ССЫЛКИ

• Задача о выборе невесты

• https://goo.gl/ij25ZJ

ССЫЛКИ

• Задача о сдаче

• https://goo.gl/BZJh1V

ССЫЛКИ

• Задача о подпоследовательности

• https://goo.gl/ulEBor

ЛИТЕРАТУРА

• Е.С. Вентцель «Исследование операций»

• А. Кофман «3аймемся исследованием операций»

• Dynamic programming and optimal control D.

Bertsekas

БЛАГОДАРНОСТИ

БЛАГОДАРНОСТИ

БЛАГОДАРНОСТИ

• Клейнер Надежда

• Бородин Захар

• Гольцман Александр

• Дубинский Игаль

• Гликин Григорий

• Емельянов Юрий

Recommended