1. 1

# конспект · шаг 1 из 1

Конспект раздела: жадные алгоритмы

выжимка - её можно унести в заметки

Понятия

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

Безопасность жадного шага - существует оптимум, СОДЕРЖАЩИЙ наш выбор (не «наш выбор лучший»).

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

Матроид - структура, на которой жадность верна при любых весах.

c-приближённый алгоритм - для любого входа ответ не хуже оптимума в c раз.

Что унести

Весь раздел отвечает на один вопрос: можно ли здесь жадничать - и даёт три разных ответа.

ЧЕК-ЛИСТ

1. НАЗВАТЬ ЦЕЛЬ. Без цели «оптимальный» - не формулировка.
2. ОПИСАТЬ ДОПУСТИМЫЕ НАБОРЫ.
3. ПРОВЕРИТЬ НАСЛЕДСТВЕННОСТЬ (часть допустимого допустима)
   И ОБМЕН (аксиома 3):
   |A| < |B| ⇒ найдётся ли элемент B, добавляемый к A?
4. НЕТ  → перебрать все маленькие веса: контрпример ГАРАНТИРОВАН теоремой.
         Дальше смотреть ступени отступления.
5. ДА   → сортировка по убыванию веса + проверка независимости;
         элементы с весом ≤ 0 пропускать.
         Доказательство уже есть, писать его не нужно.
6. ПРОВЕРИТЬ ЦЕЛЬ: теорема про максимум СУММЫ. Цель неаддитивна -
   теорема не применима, даже если структура идеальна.
ТРИ ТЕХНИКИ ДОКАЗАТЕЛЬСТВА

ОБМЕН ЭЛЕМЕНТА     взять оптимум O, построить O' = O − o + g,
                   проверить допустимость и что не хуже
                   (занятия: обменивать ПЕРВОЕ по времени занятие O)

ОБМЕН СОСЕДНИХ     показать, что в оптимуме нет «плохой пары соседей»
                   (расписания: перестановка меняет цель на t_i − t_j)

ЖАДНЫЙ НЕ ОТСТАЁТ  выбрать меру частичного ответа и индукцией показать,
                   что жадный по ней не хуже любого другого
задача критерий статус
максимум непересекающихся занятий самый ранний КОНЕЦ оптимум (обмен)
сумма времён завершения короткие вперёд (SPT) оптимум
максимальное опоздание ближайший срок вперёд (EDF) оптимум, длительности не нужны
взвешенная сумма завершений убывание w/t (Смит) оптимум
код Хаффмана два самых редких узла оптимум (обмен листьев)
расписание со штрафами убывание штрафа + проверка оптимум (матроид)
максимальный по весу лес убывание веса + ацикличность оптимум (Крускал, матроид)
квоты «не больше k_i из группы» убывание веса оптимум (раздельный матроид)
дробный рюкзак удельная цена оптимум
целый рюкзак - неверна, нужна динамика
занятия с ценностями - неверна, нужна динамика
сдача произвольными монетами - неверна, нужна динамика
паросочетание максимального веса в двудольном графе - неверна, нужен поток
покрытие множеств больше всего ненакрытых приближение H(n) ≤ 1 + ln n
максимальное покрытие k множествами то же приближение 1 − 1/e (цель монотонна и субмодулярна)
вершинное покрытие оба конца НЕПОКРЫТОГО ребра приближение 2

Главные числа раздела. Хаффман на частотах 45, 16, 13, 12, 9, 5: 224 бита против 300 у трёхбитного кода (энтропия 2.22, Хаффман 2.24 бита на символ). Расписание 8, 1, 3, 2: сумма завершений 24 по возрастанию против 46 по убыванию. Целый рюкзак на классическом наборе: жадность 160 против оптимума 220 (дробный - 240). Рюкзак 3, 3, 4 при C = 6 и исходном порядке при равных ценностях: жадность ошибается на 13% перебранных наборов; в остальных 87% этого перебора ответ верен. Вершинное покрытие на звезде с отростками: алгоритм с гарантией 2 дал 6, жадность по степени (её гарантия хуже - ln n) - 4, оптимум - 3.

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

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

Куда это ведёт

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

Комментарии

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

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

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