Методы решения оптимизационных задач

Содержание

Слайд 2

Методы решения оптимизационных задач

Формула
Жадный алгоритм
Перебор
Бинарный поиск по ответу
Динамическое программирование

Методы решения оптимизационных задач Формула Жадный алгоритм Перебор Бинарный поиск по ответу Динамическое программирование

Слайд 3

Методы решения оптимизационных задач

Перебор
Бинарный поиск по ответу
Динамическое программирование
- это когда разбиваем

Методы решения оптимизационных задач Перебор Бинарный поиск по ответу Динамическое программирование -
исходную задачу над подзадачи и выражаем более сложные через простые, записывая ответы в таблицу.

Слайд 4

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

Задача №2963:
Имеется калькулятор, который выполняет три операции:
Прибавить к числу X единицу.
Умножить

Динамическое программирование Задача №2963: Имеется калькулятор, который выполняет три операции: Прибавить к
число X на 2.
Умножить число X на 3.
Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.

Слайд 5

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

Слайд 6

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

Слайд 7

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

Слайд 8

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

Слайд 9

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

+1 *2

Слайд 10

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

+1 *2

Слайд 11

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

*3

+1

3 можем получить из единицы или из двойки
Из 1 за 0+1 действие
Из 2 за 1+1 действие

Слайд 12

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

*3

+1

3 можем получить из единицы или из двойки
Из 1 за 0+1 действие
Из 2 за 1+1 действие
Выгоднее из 1

Слайд 13

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

*2

+1

4 можем получить из тройки или из двойки
Из 3 за 1+1 = 2 действия
Из 3 за 1+1 = 2 действие
Ответ: 2

Слайд 14

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

*2

+1

4 можем получить из тройки или из двойки
Из 3 за 1+1 = 2 действия
Из 3 за 1+1 = 2 действие
Ответ: 2

Слайд 15

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

+1

5 можем получить только из 4 за 2 + 1 действие

Слайд 16

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Будем последовательно решать задачу для N = 1, 2, 3, …

*2

+1

6 можем получить из 2, 3, 5
Из 2 за 1+1 = 2 действия
Из 3 за 1+1 = 2 действие
Из 5 за 3 + 1 = 4 действия
Выгодно за 2

*3

Слайд 17

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Где находится ответ?

Слайд 18

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Где находится ответ? В Answer[N]

Слайд 19

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Где находится ответ? В Answer[N]

Можно не заполнять массив, а написать рекурсивную функцию.

Слайд 20

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Нам повезло, что все операции только увеличивают число. В противном случае метод применить было бы нельзя.

Слайд 21

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Нам повезло, что все операции только увеличивают число. В противном случае метод применить было бы нельзя.

Слайд 22

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Но есть и более общий подход:

Слайд 23

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

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число X

Динамическое программирование Прибавить к числу X единицу. Умножить число X на 2.
на 3.

Последовательно заполняем массив ответов слева направо.
Но есть и более общий подход: Поиск в ширину (BFS)

Слайд 24

Как найти ответ?

Прибавить к числу X единицу.
Умножить число X на 2.
Умножить число

Как найти ответ? Прибавить к числу X единицу. Умножить число X на
X на 3.

Массив Parent[i] – число, которое было на калькуляторе перед i (как вариант – последняя операция)