Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
136
Добавлен:
28.03.2015
Размер:
740.86 Кб
Скачать

§ 23. Жадный алгоритм

Рассмотрим следующую задачу дискретной оптимиза­ции. Пусть Е — непустое конечное множество, w: ER+ — функция, ставящая в соответствие каждому элементу е этого множества неотрицательное действительное число w(e)—вec элемента е. Для ХЕ вес w(X) опре­делим как сумму весов всех элементов множества X:

Пусть, далее, Iнекоторый набор подмножеств множе­ства Е, т. е. I  2E. Задача состоит в выборе в I под­множества максимального веса.

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

Жадный (градиентный) алгоритм.

1-й шаг. Находим такой элемент е1 Е, что

к-й шаг (к≥2). Находим такой элемент еk Е, что

Если такого элемента нет, то конец.

Примером жадного алгоритма служит алгоритм Краскала нахождения остова максимального веса во взве­шенном графе (см. § 15).

Очевидно, что выходом жадного алгоритма всегда яв­ляется элемент множества I, максимальный относитель­но включения. Однако он может оказаться не максималь­ного веса. Чтобы убедиться в этом, рассмотрим пример: Е = {1, 2, 3}, I = {{1}, {1, 2}, {2, 3}}, w(1) = 3, w(2) = 2, w(3) = 4. Наш алгоритм найдет множество {1, 2}, хотя множество {2, 3} имеет больший вес.

Возникает вопрос: когда же можно гарантировать по­лучение подмножества максимального веса, решая задачу с помощью жадного алгоритма? На этот вопрос отвечает следующая

Теорема 23.1. Если I набор независимых мно­жеств матроида М = (Е, I), элементам которого припи­саны неотрицательные веса, то жадный алгоритм находит в I множество максимального веса.

> Очевидно, что жадный алгоритм строит базу; пусть это база

Остается показать, что вес базы Во максимален. Пусть это не так. Среди всех баз максимального веса выберем такую базу В, которая имеет наибольшее число общих элементов с Во. Так как В Вo и |В| = |Bo|, то Во\В Ø. Выберем в Bo\B элемент еi с минимальным но­мером i. Множество В еi содержит цикл С. Так как ба­за матроида циклов не содержит, то существует eС\Во. Пусть В` =(B\e) еi. Множество В` не содержит циклов, поскольку С — единственный цикл в В ei (следствие 16.7). Кроме того, |В`| = |В|. Следовательно, В` являет­ся базой. Далее имеем

Поэтому

иное противоречило бы выбору базы В.

С другой стороны, w(B`)=w(B)—w(e)+w{ei), по­этому из (1) вытекает, что w(e)> w>(еi). Но последнее неравенство неверно, поскольку на i-м шаге алгоритм вы­брал ei, а не е. Полученное противоречие доказывает теорему. <

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

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

Заметим, что приведенное здесь доказательство пре­дыдущей теоремы буквально то же, что и доказательство теоремы 15.1, обосновывающей алгоритм Краскала.

Оказывается, верна теорема, в некотором смысле об­ратная предыдущей.

Теорема 23.2. Пусть F набор подмножеств конеч­ного множества Е, обладающий тем свойством, что если XF, УХ,то YF. Тогда, если F не является на­бором независимых множеств матроида, то применение к F жадного алгоритма не гарантирует получения подмно­жества максимального веса.

> Пусть для набора F не выполняется аксиома I.2, т. е. в F есть такие Х = {х1, х2, ..., xk+1}, Y = {y1, y2, ..., yk), что не существует xiХ\уi, для которого Y xi e  F. Покажем, что в этом случае можно так подобрать веса, что жадный алгоритм построит множество не мак­симального веса.

Пусть wi)=1 (i = 1,…,k), w(xi)=t, если xi Х\Y, где 0<t<1, w(е) = 0, если еЕ\(XY), Тогда жад­ный алгоритм построит сперва множество Y. Так как от­сутствует такой элемент xi, что Y xi  F, то далее алго­ритм выберет элементы из Е\(ХY) и закончит работу, получив в результате множество Хо, вес которого равен весу множества Y.

Пусть |ХY|=р. Тогда w(X) = p-{k+1-p)t. По­этому, учитывая, что w (Хо) = k, можно выбрать 0 < t < 1 таким, чтобы было w(Xo)<w(X). Тем самым жадный ал­горитм не находит в F множества максимального веса. <

Соседние файлы в папке Emelichev_V_A_Melnikov_O_I_Sarvanov_V_I_T