Определите, может ли решение быть оптимально задано с помощью жадного алгоритма [закрыто]
в большинстве случаев запутанный факт заключается в том, следует ли идти на исчерпывающий поиск (динамическое программирование или обратное отслеживание или грубая сила), чтобы решить проблему или пойти на жадный подход.
Я не говорю об использовании greedy для определения наилучшего возможного решения, я говорю об использовании жадного алгоритма для поиска "решения". Я пытаюсь получить некоторые стандартные способы, с помощью которых я могу проверить, может ли проблема быть решена с помощью жадного подхода. Как Оптимальный субструктура, запоминание для динамического программирования. И не связано с какой-то конкретной проблемой.
есть ли какие-либо доказательства индукции, которые я могу сделать, чтобы решить, всегда ли жадный подход будет лучшим решением?
1 ответов
в общем
чтобы доказать, что задача оптимизации может быть решена с помощью жадного алгоритма, нам нужно доказать, что проблема имеет следующее:
оптимальной субструктуры: оптимальное глобальное решение содержит оптимальные решения всех подзадач.
жадный выбор недвижимости: a глобальные оптимальное решение может быть получено взахлеб выбор локально оптимальный выбор.
пример
давайте рассмотрим классический проблема выбора активности. У нас есть набор S of n мероприятия, каждый с временем начала
s[i]
и время окончанияe[i]
. Мы хотим выбрать подмножество S, такое, что выбор максимизирует количество неперекрывающихся событий.
эта проблема может быть решена с помощью жадного алгоритма, но как мы можем доказать что?
нам нужно показать его экспонаты:
- оптимальная подструктура
рассмотрим общую активность a содержится в глобальном оптимальном решении S = {A', a, A''}
, где S
является глобальным оптимальным решением,a это наша маленькая активность, и A'
и A''
две подзадачи поиска деятельности до и после a.
если задача имеет оптимальное свойство подструктуры,оптимальное решение для подзадачи A'
и A''
должно содержаться в глобальном оптимальном решении S
.
это правда, но почему?
предположим, что оптимальное решение для подзадачи A'
не S
. Тогда мы могли бы заменить оптимальный для A'
, сказал S'
, в A
, чтобы получить новое глобальное оптимальное решение, которое лучше, чем S
. Но!--3--> было глобальным оптимальным решением! Противоречие.
- жадный выбор:
нам нужно доказать, что наш жадный выбор (выбрать действие, которое заканчивается первым) является правильным.
пусть B
быть подзадачей. Пусть b быть деятельностью подзадачи B
что заканчивается во-первых, так b это наш (первый) жадный выбор. мы должны доказать, что b входит в некоторое оптимальное решение для B
.
пусть X
быть оптимальным решением для подзадачи B
. Пусть x быть активность в X
что закончится раньше.
если b = x, потом b находится в
X
оптимальное решение дляB
, и показано, что жадный выбор входит в оптимальное решение.-
если b != x, конечно, у нас есть это
end_time[b] < end_time[x]
.С b наш жадный выбор (т. е. деятельность, которая заканчивается в первую очередь в подзадаче
B
), то мы можем заменитьx
С b наX
получить оптимальное решение:X' = (X \ {x}) U {b}
.X'
оптимально, потому что он имеет то же самое ряд мероприятийX
иX
было оптимальным, и в этом случае, b находится вX'
оптимальное решение дляB
.
Итак, наш жадный выбор b
входит в некоторое оптимальное решение для B
в том или ином случае.
матроидов
кроме того, есть мощная математическая теория, которая может быть в некоторых случаях используется для механического доказательства того, что проблему можно решить жадным подходом.
кратко:
можно определить конкретную комбинаторную структуру с именем матроида.
какой-то умный человек доказал в прошлом, что эти матроиды имеют оптимальное свойство субструктуры и свойство жадного выбора.
это означает, что вы можете запустить жадный алгоритм в своей задаче оптимизации, и это найдем оптимальное решение. Вам нужно только убедитесь, что ваша проблема определяется на матроида структуры.
более подробную информацию об этом можно найти здесь.