Определите, может ли решение быть оптимально задано с помощью жадного алгоритма [закрыто]

в большинстве случаев запутанный факт заключается в том, следует ли идти на исчерпывающий поиск (динамическое программирование или обратное отслеживание или грубая сила), чтобы решить проблему или пойти на жадный подход.

Я не говорю об использовании 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 что закончится раньше.

  1. если b = x, потом b находится в X оптимальное решение для B, и показано, что жадный выбор входит в оптимальное решение.

  2. если 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 в том или ином случае.


матроидов

кроме того, есть мощная математическая теория, которая может быть в некоторых случаях используется для механического доказательства того, что проблему можно решить жадным подходом.

кратко:

  • можно определить конкретную комбинаторную структуру с именем матроида.

  • какой-то умный человек доказал в прошлом, что эти матроиды имеют оптимальное свойство субструктуры и свойство жадного выбора.

  • это означает, что вы можете запустить жадный алгоритм в своей задаче оптимизации, и это найдем оптимальное решение. Вам нужно только убедитесь, что ваша проблема определяется на матроида структуры.

более подробную информацию об этом можно найти здесь.