Upload
igor-kleiner
View
152
Download
3
Embed Size (px)
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 и более
МОЖНО ЛИ САМОСТОЯТЕЛЬНО ИЗУЧИТЬ
ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ?
• Можно и нужно!
• Идеи метода доступны даже школьникам
КАК ИЗУЧИТЬ САМОСТОЯТЕЛЬНО
ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Бархатный путь
КАК ИЗУЧИТЬ САМОСТОЯТЕЛЬНО
ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
СЕРТИФИКАТ ДОСТИЖЕНИЙ
ОБРАТНАЯ СВЯЗЬ
Ваши вопросы и обратная связь суть лучший источник
мотивации
ССЫЛКИ
• Бесплатный онлайн курс «Динамическое
программирование» https://goo.gl/p5yks2
ССЫЛКИ
• Задача о выборе невесты
• https://goo.gl/ij25ZJ
ССЫЛКИ
• Задача о сдаче
• https://goo.gl/BZJh1V
ССЫЛКИ
• Задача о подпоследовательности
• https://goo.gl/ulEBor
ЛИТЕРАТУРА
• Е.С. Вентцель «Исследование операций»
• А. Кофман «3аймемся исследованием операций»
• Dynamic programming and optimal control D.
Bertsekas
БЛАГОДАРНОСТИ
БЛАГОДАРНОСТИ
БЛАГОДАРНОСТИ
• Клейнер Надежда
• Бородин Захар
• Гольцман Александр
• Дубинский Игаль
• Гликин Григорий
• Емельянов Юрий