Создан заказ №1200582
14 мая 2016
С++ раскрой выпуклого многоугольника методом динамического программирования
Как заказчик описал требования к работе:
Найти минимальную стоимость разреза выпуклого многоугольника, т е, найти минимальную сумму длин не пересекающихся диагоналей.
Решать задачу надо двумя способами:
1)методом полного перебора
Он заключается в следующем:
У нас есть n вершин, значит можно сделать всего n(n-1)/2 диагоналей. Ну там из пер
вой во все остальные точки, из второй - во все начиная с третьей и т.д.
Дальше берем все возможные n-2 из них (это называется Сочетания, и есть куча алгоритмов, как сгенерировать все возможные сочетания... Ну или можно через бинарный счетчик выкрутить).
Когда взяла n-2 диагонали - можно посмотреть и сказать, пересекаются ли в них прямые (ну посмотреть все пары внутри и увидеть, есть ли пересечение).
2) метод динамического программирования:
Динамическое программирование — это метод решения оптимизационных задач, в
результате которого основная задача разбивается на множество пересекающихся подзадач.
Под пересекающимися задачами здесь понимается пересекающееся условие.
При этом в алгоритмах динамического программирования одна и та же задача не должна
решаться дважды. Решение задачи записывается, и потом используется, если оно
необходимо.
Динамическое программирование — это решение задач с использованием дополнительной
памяти (хранятся промежуточные решения).
Процесс разработки алгоритма динамического программирования
1. Описание структуры оптимального решения
Здесь предполагают, что оптимальное решение получено, и выводят какие-то его свойства
(через решения более маленьких задач)
2. Определение значения, соответствующего оптимальному решению, с помощью
рекурентного соотношения
Формируется рекурсивная формула (используя выводы пункта 1), которая позволила бы
вычислить оптимальное решение через решения более маленьких задач.
3. Вычисление оптимального значения
Вычисляется оптимальное решение с помощью указанной рекурсивной формулы. Чтобы
вычисление было именно решением с помощью динамического программирования, каждая
задача должна решаться только один раз. Для этого существует два способа вычисления:
а) Нисходящий с запоминанием
В этом случае создается специальная таблица, которая будет хранить данные.
А затем реализуется рекурсивный алгоритм. Если при вызове функции поставлена задача,
которая еще не решалась, то она решается и ее ответ записывается в таблицу
В противном случае задача не решается, а ее ответ просто берется из таблицы
б) Восходящий
Таблица заполняется последовательно таким образом, чтобы при вычислении каждого
значения все необходимые были уже посчитаны.
4. Составление оптимального решения.
Оптимальное решение может быть или вычислено по таблице решения подзадач, либо
вычисляться параллельно при составлении этой таблицы.
подробнее
Заказчик
заплатил
заплатил
500 ₽
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
Автор24
20 дней
Заказчик принял работу без использования гарантии
17 мая 2016
Заказ завершен, заказчик получил финальный файл с работой
5
С++ раскрой выпуклого многоугольника методом динамического программирования.docx
2020-10-16 11:22
Последний отзыв студента о бирже Автор24
Общая оценка
4.3
Положительно
Отличный автор. С ответственным подходом к работе. Все выполнил в срок и с отличным результатотм. Всем только рекомендую