1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6

# теория · шаг 2 из 6

Теорема Радо-Эдмондса: жадность верна ровно на матроидах

Коротко

Главный результат темы: жадный алгоритм находит независимое множество максимального веса для ЛЮБЫХ весов, если отрицательные элементы пропускаются, тогда и только тогда, когда структура - матроид. «Тогда» объясняет, почему Крускал, максимальный лес и «не больше k из каждой группы» работают без отдельных доказательств. «Только тогда» - сильнее и полезнее: если структура не матроид, найдутся веса, на которых жадность ошибётся, и искать их надо среди небольших примеров. Крускал из раздела 11 - буквально жадность на графовом матроиде, и его корректность теперь следствие общей теоремы. Проверено машинно: на двух матроидах 600 прогонов без расхождений с перебором, на рюкзаке - 220 наборов ценностей с ошибкой из 1728.

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

Если ты можешь сформулировать теорему в обе стороны, объяснить Крускала через неё и знаешь, что ломается у не-матроидов, листай до «Теперь сам».

Как думаешь, в какую сторону теорема полезнее

У утверждения две половины: «на матроиде жадность верна» и «если не матроид - найдутся веса, на которых она неверна». Первая половина экономит доказательства. А вторая?

Подумай, что она даёт в работе: ты смотришь на задачу, видишь, что обмен не выполняется, - и можешь не рассчитывать на универсальную схему «сортировать элементы по весу и добавлять допустимые». Теорема исключает эту схему для всех весов; другие алгоритмы и специальные случаи конкретной задачи она не запрещает.

На что это похоже

Признак делимости. Можно каждый раз делить число на 3 в столбик, а можно сложить цифры - и сразу знать ответ. Три аксиомы матроида - такой же признак: вместо того чтобы для каждой новой задачи искать обменный аргумент или контрпример, ты проверяешь структуру допустимых множеств и получаешь ответ сразу, в обе стороны.

Механизм: формулировка и жадный алгоритм

ТЕОРЕМА (Радо, Эдмондс)
Пусть (E, I) - семейство подмножеств, удовлетворяющее аксиомам (1) и (2)
(наследственная система). Тогда равносильны:
    (а) (E, I) - матроид (то есть выполнено и свойство обмена);
    (б) для ЛЮБОЙ весовой функции w: E → R жадный алгоритм находит
        независимое множество максимального веса.
ЖАДНЫЙ АЛГОРИТМ НА МАТРОИДЕ

A = ∅
отсортировать E по УБЫВАНИЮ веса
для каждого e по порядку:
    если w(e) < 0 - пропустить e
    иначе если A ∪ {e} независимо - добавить e в A
вернуть A

цена: Θ(n·log n) на сортировку плюс n проверок независимости
проверка независимости - своя у каждого матроида, и обычно она и дороже всего
ДВЕ ПОСТАНОВКИ, И ИХ НАДО РАЗЛИЧАТЬ

(А) максимум веса среди ВСЕХ независимых множеств
    элементы с отрицательным весом не берут - они только ухудшают,
    и ответ может не быть базой. Это нормально: цель - вес, а не размер

(Б) максимум (или минимум) веса среди БАЗ - то есть ответ обязан быть
    максимальным независимым множеством
    здесь знак веса не важен: берут всё, что не нарушает независимость,
    только порядок сортировки меняется - по убыванию для максимума,
    по возрастанию для минимума

Крускал - это случай (Б): остовное дерево обязано быть остовным,
даже если все веса положительные и «выгоднее» было бы не брать ничего

Правило

Теорема Радо-Эдмондса: для наследственной системы жадность даёт максимальный по весу независимый набор при ЛЮБЫХ весах тогда и только тогда, когда система - матроид; отрицательные элементы в этой постановке пропускаются. Отсюда два следствия. Положительное: доказав матроидность, доказательство правильности жадного алгоритма писать не нужно - оно уже есть. Отрицательное, и более полезное: если структура не матроид, то существуют веса, на которых сортировка по весу с допустимым добавлением ошибётся. Это ограничение данной схемы, а выбор другого алгоритма зависит от задачи. Алгоритм Крускала - жадность на графовом матроиде, и его корректность следствие теоремы, а не отдельный факт. Цена жадности на матроиде - сортировка плюс n проверок независимости, и дорогая часть почти всегда проверка.

Разбор: Крускал - это и есть жадность на матроиде

Вспомним Крускала из раздела 11: сортируем рёбра по возрастанию веса и добавляем ребро, если оно не образует цикл.

СООТВЕТСТВИЕ
элементы E            = рёбра графа
независимые I         = ациклические наборы рёбер (лесá)
проверка независимости = «не образует цикл» (система непересекающихся множеств)
база                  = остовное дерево (в связном графе)

На минимум сортируют по возрастанию, на максимум - по убыванию; это одна и та же жадность в постановке (Б), и переход между ними честный: минимальная по w база - это максимальная по −w база. Важно, что речь про БАЗЫ: при положительных исходных весах w, если бы мы искали максимум веса среди всех независимых множеств при весах −w (постановка А), ответом было бы пустое множество, ведь все веса отрицательные. Крускалу нужно дерево, поэтому он работает с базами и знака не смотрит.

Обоснуем переход от теоремы для всех независимых наборов к базам. У всех баз матроида один размер r: если бы база была меньше другой, обмен разрешил бы увеличить её, вопреки максимальности. Для минимума исходных весов w выберем константу C больше каждого веса и зададим новые веса v(e)=C−w(e)>0. Максимальный по новому весу независимый набор обязательно база: любой допустимый добавленный элемент увеличивал бы вес. Для базы Σv=Cr−Σw, поэтому максимум нового веса равносилен минимуму исходного. Убывание v - возрастание w, то есть порядок Крускала. Для максимума веса базы достаточно прибавить к исходным весам константу, делающую их положительными: сумма каждой базы вырастет на одну и ту же величину Cr. Так переход верен и для отрицательных весов.

ЧТО ДАЁТ ТЕОРЕМА
в разделе 11 корректность Крускала доказывалась свойством разреза - отдельным
рассуждением на полстраницы. Теперь она СЛЕДСТВИЕ: лесá образуют матроид
(проверено в прошлом уроке), значит жадность верна для любых весов

Машинная проверка в обе стороны - 300 случайных наборов весов на графе из шести рёбер: жадность совпала с полным перебором максимального по весу леса во всех 300 случаях. Столько же прогонов на раздельном матроиде («не больше двух из каждой группы», девять элементов) - тоже ноль расхождений.

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

Разбор: «только тогда» на примере рюкзака

Теперь обратная половина. Наборы, влезающие в рюкзак, матроидом не являются (прошлый урок), значит ОБЯЗАНЫ существовать ценности, на которых жадность по ценности ошибается. Найдём их перебором.

предметы весов 3, 3, 4; вместимость 6
перебрали ВСЕ наборы ценностей из диапазона 1..12 - это 1728 вариантов
жадность по ценности ошиблась в 220 из них

минимальный пример: ценности 2, 2, 3
    жадность: берёт предмет ценности 3 (вес 4), больше ничего не влезает → 3
    оптимум:  два предмета по 2 (вес 3 + 3 = 6)                          → 4

Обрати внимание на логику: мы не искали контрпример наугад и не надеялись на удачу - теорема ГАРАНТИРОВАЛА, что он есть. Осталось только перебрать небольшой диапазон. Это и есть практическая польза половины «только тогда»: она превращает поиск контрпримера из творческой задачи в механическую.

И ещё одно наблюдение из того же замера: жадность ошиблась в 220 случаях из 1728, то есть в 13%. Случайный тест с вероятностью 87% прошёл бы успешно - вот почему «я прогнал тесты» ничего не доказывает даже на трёх предметах.

а что с ДРОБНЫМ рюкзаком, где жадность верна?
    там структура другая: мы выбираем не подмножество, а ДОЛИ,
    и задача вообще не про независимые множества - это линейное
    программирование (раздел 12), у которого своя теория оптимальности

Разбор: почему обмен достаточен и необходим

Сначала докажем прямую половину. Отрицательные веса пропускаем, нулевые на цену не влияют. Положительные элементы идут в порядке w₁≥…≥wₖ>0. Обозначим через Pⱼ первые j элементов. После их просмотра жадный набор Aⱼ максимален по включению в Pⱼ: любой пропущенный элемент уже нарушал независимость, а добавление других элементов не могло устранить это нарушение.

В матроиде такой набор имеет и наибольший размер. Если бы независимый Bⱼ был больше, свойство обмена разрешало бы добавить к Aⱼ элемент из Bⱼ. Получили противоречие максимальности. Значит в каждом начальном отрезке жадность выбрала не меньше элементов, чем любой независимый конкурент B: |A∩Pⱼ|≥|B∩Pⱼ|.

Теперь перейдём от числа элементов к весу. Положим wₖ₊₁=0 и запишем w(A)=Σⱼ(wⱼ−wⱼ₊₁)·|A∩Pⱼ|. Элемент позиции i учитывается во всех отрезках с j≥i; сумма его коэффициентов равна wᵢ−wₖ₊₁=wᵢ. Например, для весов 5,3,2 и выбора первого и третьего элемента числа выбранных в отрезках равны 1,1,2: 2·1+1·1+2·2=7, как и 5+2. Все разности неотрицательны. Поэтому сравнение чисел элементов в каждом отрезке даёт w(A)≥w(B). Это доказательство для любого набора весов.

Для обратной половины пусть обмен нарушен: независимы I и J, |I|<|J|, но к I нельзя добавить ни один элемент из J\I. Пусть всего n элементов. Назначим вес 1+ε элементам I, вес 1 элементам J\I, остальным 0, где ε=1/(n+1). Жадность сначала возьмёт всё I, затем отвергнет всё J\I. Её вес (1+ε)|I|. Вес допустимого J равен |J|+ε|I∩J| и больше: разница равна |J|−|I|−ε|I\J|>0, поскольку первая часть хотя бы 1, а вычитаемая поправка меньше 1. Нулевые элементы этот проигрыш не исправят. Таким образом, отсутствие обмена действительно создаёт веса, на которых схема ошибается.

Что ломается без этого

Первое: применять теорему к системе, у которой нет наследственности: аксиому (2) надо проверить тоже, хотя она обычно очевидна. Второе: сортировать по возрастанию, когда нужен максимум веса: направление определяется задачей, и перепутать его легко, потому что у Крускала (минимум) сортировка возрастающая. Третье: путать две постановки: при максимуме веса среди ВСЕХ независимых множеств элементы с отрицательным весом брать не надо (и ответ тогда не база), а при поиске оптимальной БАЗЫ - надо, как в Крускале. Четвёртое: думать, что из «не матроид» следует «жадность всегда ошибается»: она ошибается НА НЕКОТОРЫХ весах - на твоих конкретных данных может и не ошибиться, и именно поэтому тесты обманчивы. Пятое: считать, что матроидность решает всё: она даёт верный ответ для МАКСИМУМА ВЕСА независимого множества; стоит поменять целевую функцию (например, максимизировать не сумму, а минимум элемента), и теорема к задаче уже не относится.

Зачем это в работе

Теорема помогает выбрать схему алгоритма до реализации. Для этого нужно проверить аксиомы семейства допустимых наборов; удачных примеров недостаточно. В разобранных задачах встречаются два матроида: раздельный («не больше k_i элементов из каждой категории» - квоты, лимиты, распределение по регионам) и графовый (связность, отсутствие циклов - сети, зависимости, деревья). Если задача сводится к одному из них, можно сразу писать сортировку с проверкой и не искать доказательств. А если в условии ограничена сумма ресурса, матроидность всё ещё нужно проверить: при одинаковом расходе 1 на элемент лимит k даёт равномерный матроид, а произвольные расходы рюкзака могут нарушать обмен. Само слово «сумма» не доказывает ни отсутствие матроида, ни какую-либо гарантию приближения.

Теперь сам

Задача: выбрать максимальный по суммарной стоимости набор рёбер графа, в котором ни одна вершина не имеет больше одного инцидентного ребра (то есть паросочетание). Матроид ли это? Сработает ли жадность?

Ответ. Это НЕ матроид, и жадность в общем случае неверна.

проверим обмен на пути из четырёх вершин:  1 - 2 - 3 - 4
рёбра: a = (1,2), b = (2,3), c = (3,4)

независимые (паросочетания): ∅, {a}, {b}, {c}, {a,c}
    {a,b} - общая вершина 2, нельзя
    {b,c} - общая вершина 3, нельзя

A = {b},  B = {a, c},  |A| = 1 < 2 = |B|
    A ∪ {a} = {b, a} - нельзя
    A ∪ {c} = {b, c} - нельзя
обмен нарушен ⇒ не матроид

Теорема обещает веса, на которых жадность ошибётся, - вот они:

веса: a = 2, b = 3, c = 2
жадность берёт b (вес 3), после чего ни a, ни c недоступны → 3
оптимум: a + c = 4

Это та же конфигурация, что в контрпримере про занятия из первой главы, и неслучайно: «короткое посередине мешает двум по краям» - типовая форма нарушения обмена.

При этом паросочетание максимального веса вычислимо точно - но не жадностью: в двудольном графе это поток минимальной стоимости (раздел 12), в общем - алгоритм Эдмондса. Вывод, который стоит унести: «не матроид» исключает универсальную сортировку по весу с допустимым добавлением, а не решение задачи вообще или любой другой жадный алгоритм.

Главное

Теорема Радо-Эдмондса: для наследственной системы жадность находит независимое множество максимального веса ПРИ ЛЮБЫХ весах тогда и только тогда, когда система - матроид; отрицательные элементы при поиске среди всех независимых пропускаются. Прямая половина экономит доказательства: Крускал - жадность на графовом матроиде (элементы - рёбра, независимость - ацикличность, база - остовное дерево), и свойство разреза из раздела 11 больше не нужно. Обратная половина сильнее: если матроида нет, контрпример ГАРАНТИРОВАННО существует, и его ищут перебором маленьких весов - на рюкзаке 3, 3, 4 при вместимости 6 жадность ошибается на 220 наборах ценностей из 1728 (13%), минимальный пример - ценности 2, 2, 3. Паросочетание - тоже не матроид (на пути из четырёх вершин к {b} нельзя добавить ни a, ни c), и жадность по весу даёт 3 вместо 4. «Не матроид» означает, что эта схема не верна для всех весов; выбор другого алгоритма или специального случая остаётся открытым.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.